Files
2023-04-12 12:18:04 +02:00

78 lines
2.6 KiB
C#

using EscapeRoomEngine.Engine.Runtime.Modules;
using EscapeRoomEngine.Engine.Runtime.Modules.State;
using EscapeRoomEngine.Engine.Runtime.Utilities;
using NaughtyAttributes;
using Station46.Modules.Hoop.Scripts;
using Station46.Scripts;
using UnityEngine;
namespace Station46.Modules.Button_Stand.Scripts
{
public class TimedButtonStand : StatePuzzle
{
[BoxGroup("Internal")] [SerializeField] private HoloButton button;
[BoxGroup("Internal")] [SerializeField] private Emission standLight;
private ButtonHoop _hoop;
protected override void Start()
{
base.Start();
PuzzleEvent += (_, type) =>
{
// ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault
switch (type)
{
case PuzzleEventType.Restarted:
standLight.color = EscapeRoomEngine.Engine.Runtime.Engine.Theme.puzzleColor.hdr;
button.hideWhenDisabled = true;
button.Enable();
button.Disable();
break;
case PuzzleEventType.Solved:
standLight.color = EscapeRoomEngine.Engine.Runtime.Engine.Theme.solvedColor.hdr;
button.hideWhenDisabled = false;
button.Enable();
button.Disable();
break;
}
};
button.ButtonEvent += (_, type) =>
{
if (type == ButtonEventType.Pressed)
{
Solve();
}
};
}
public override void SetModule(Module module)
{
base.SetModule(module);
// The hoop requires a related dispenser module
// We use the second slot because the first slot is reserved for the platform
var secondRelatedModule = Module.relatedModules[1];
if (secondRelatedModule.State is ButtonHoop hoop)
{
hoop.Button.ButtonEvent += (_, type) =>
{
if (type == ButtonEventType.Pressed)
{
button.Enable();
}
else
{
button.Disable();
}
};
}
else
{
throw new EngineException($"{this} was not assigned a related button hoop.");
}
}
}
}