module state game objects
This commit is contained in:
@@ -1,57 +1,27 @@
|
||||
using Escape_Room_Engine.Engine.Scripts.Utilities;
|
||||
using UnityEngine;
|
||||
using Logger = Escape_Room_Engine.Engine.Scripts.Utilities.Logger;
|
||||
using LogType = Escape_Room_Engine.Engine.Scripts.Utilities.LogType;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Escape_Room_Engine.Engine.Scripts.Modules
|
||||
{
|
||||
public enum PuzzleEventType
|
||||
{
|
||||
Reset, Solved
|
||||
}
|
||||
|
||||
public delegate void PuzzleEventHandler(PuzzleModule source, PuzzleEventType e);
|
||||
|
||||
public class PuzzleModule : Module
|
||||
{
|
||||
internal event PuzzleEventHandler PuzzleEvent;
|
||||
|
||||
internal bool Solved
|
||||
{
|
||||
get => _solved;
|
||||
private set
|
||||
{
|
||||
var type =
|
||||
!_solved && value ? Some<PuzzleEventType>.Of(PuzzleEventType.Solved)
|
||||
: _solved && value ? Some<PuzzleEventType>.Of(PuzzleEventType.Reset)
|
||||
: None<PuzzleEventType>.New();
|
||||
_solved = value;
|
||||
type.Match(some: OnPuzzleEvent);
|
||||
}
|
||||
}
|
||||
|
||||
private bool _solved;
|
||||
internal new PuzzleState State { get; private set; }
|
||||
|
||||
internal PuzzleModule(Space space, PuzzleModuleDescription description) : base(space, description)
|
||||
{
|
||||
srDimensions.Size = Vector2Int.one; // TODO: larger modules
|
||||
}
|
||||
|
||||
protected virtual void OnPuzzleEvent(PuzzleEventType type)
|
||||
internal override void InstantiateModule(Transform parent)
|
||||
{
|
||||
Logger.Log($"{this} has been {type}", LogType.PuzzleFlow);
|
||||
base.InstantiateModule(parent);
|
||||
|
||||
PuzzleEvent?.Invoke(this, type);
|
||||
space.room.AddPuzzle(this);
|
||||
}
|
||||
|
||||
public void Solve()
|
||||
protected override void AddStateComponent()
|
||||
{
|
||||
Solved = true;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"Puzzle module ({(Solved ? "" : "not ")}solved)";
|
||||
State = moduleObject.AddComponent<PuzzleState>();
|
||||
State.SetModule(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user