78 lines
2.6 KiB
C#
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.");
|
|
}
|
|
}
|
|
}
|
|
} |