puzzle flow

This commit is contained in:
2022-11-11 16:25:25 +01:00
parent c4f63ce3be
commit 990c7205ba
8 changed files with 128 additions and 23 deletions

View File

@@ -1,5 +1,6 @@
using System;
using UnityEngine;
using LogType = Escape_Room_Engine.Engine.Scripts.Utilities.LogType;
namespace Escape_Room_Engine.Engine.Scripts.Modules
{
@@ -13,12 +14,21 @@ namespace Escape_Room_Engine.Engine.Scripts.Modules
{
public bool IsEntrance => IsType((ModuleType)DoorType.Entrance);
public bool IsExit => IsType((ModuleType)DoorType.Exit);
private bool _unlocked;
internal DoorModule(Space space, DoorModuleDescription description) : base(space, description)
{
srDimensions.Size = Vector2Int.one; // door always has size 1x1
}
internal void Unlock()
{
_unlocked = true;
Utilities.Logger.Log($"{this} has been unlocked", LogType.PuzzleFlow);
}
public override string ToString()
{
return $"{(IsEntrance ? "Entrance" : IsExit ? "Exit" : "Unknown")} door";

View File

@@ -1,12 +1,57 @@
using UnityEngine;
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;
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 PuzzleModule(Space space, PuzzleModuleDescription description) : base(space, description)
{
srDimensions.Size = Vector2Int.one; // TODO: larger modules
}
protected virtual void OnPuzzleEvent(PuzzleEventType type)
{
Logger.Log($"{this} has been {type}", LogType.PuzzleFlow);
PuzzleEvent?.Invoke(this, type);
}
public void Solve()
{
Solved = true;
}
public override string ToString()
{
return $"Puzzle module ({(Solved ? "" : "not ")}solved)";
}
}
}