66 lines
1.7 KiB
C#
66 lines
1.7 KiB
C#
using System;
|
|
using Escape_Room_Engine.Engine.Scripts.Utilities;
|
|
using NaughtyAttributes;
|
|
|
|
namespace Escape_Room_Engine.Engine.Scripts.Modules
|
|
{
|
|
public enum PuzzleEventType
|
|
{
|
|
Restarted, Solved
|
|
}
|
|
|
|
public delegate void PuzzleEventHandler(PuzzleModule source, PuzzleEventType e);
|
|
|
|
public class PuzzleState : ModuleState
|
|
{
|
|
public event PuzzleEventHandler PuzzleEvent;
|
|
|
|
private new PuzzleModule Module { get; set; }
|
|
public bool Solved
|
|
{
|
|
get => _solved;
|
|
private set
|
|
{
|
|
var type =
|
|
!_solved && value ? Some<PuzzleEventType>.Of(PuzzleEventType.Solved)
|
|
: _solved && !value ? Some<PuzzleEventType>.Of(PuzzleEventType.Restarted)
|
|
: None<PuzzleEventType>.New();
|
|
_solved = value;
|
|
type.Match(some: OnPuzzleEvent);
|
|
}
|
|
}
|
|
|
|
private bool _solved;
|
|
|
|
private void OnPuzzleEvent(PuzzleEventType type)
|
|
{
|
|
Logger.Log($"{Module} has been {type}", LogType.PuzzleFlow);
|
|
|
|
PuzzleEvent?.Invoke(Module, type);
|
|
}
|
|
|
|
public override void SetModule(Module module)
|
|
{
|
|
if (module is PuzzleModule puzzleModule)
|
|
{
|
|
Module = puzzleModule;
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("Tried to set wrong type of module.");
|
|
}
|
|
}
|
|
|
|
[Button(enabledMode: EButtonEnableMode.Playmode)]
|
|
public void Solve()
|
|
{
|
|
Solved = true;
|
|
}
|
|
|
|
[Button(enabledMode: EButtonEnableMode.Playmode)]
|
|
public void Restart()
|
|
{
|
|
Solved = false;
|
|
}
|
|
}
|
|
} |