using System.Collections.Generic; using EscapeRoomEngine.Engine.Runtime.Modules; using EscapeRoomEngine.Engine.Runtime.Utilities; using NaughtyAttributes; using UnityEngine; namespace EscapeRoomEngine.Desert.Runtime.Puzzle_C { public class Holes : StatePuzzle { [BoxGroup("Internal")] [SerializeField] private Emission frameLight; private List _holes; private Dispenser _dispenser; private DynamicColor _puzzleColor, _solvedColor, _activeColor; protected override void Awake() { base.Awake(); _holes = new List(GetComponentsInChildren()); _puzzleColor = Engine.Runtime.Engine.DefaultEngine.theme.puzzleColor; _solvedColor = Engine.Runtime.Engine.DefaultEngine.theme.solvedColor; _activeColor = Engine.Runtime.Engine.DefaultEngine.theme.activeColor; } protected override void Start() { base.Start(); PuzzleEvent += (_, type) => { // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (type) { case PuzzleEventType.Restarted: _holes.ForEach(hole => { hole.Enable(); hole.Emission.color = _puzzleColor.hdr; }); frameLight.color = _puzzleColor.hdr; _dispenser.Solved = false; break; case PuzzleEventType.Solved: _holes.ForEach(hole => { hole.Disable(); hole.Emission.color = solution[hole.number] == 1 ? _activeColor.hdr : _solvedColor.hdr; }); frameLight.color = _solvedColor.hdr; _dispenser.Solved = true; break; } }; _holes.ForEach(hole => hole.ButtonEvent += (_, type) => { // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault switch (type) { case ButtonEventType.Pressed: SetState(hole.number, 1, true); break; case ButtonEventType.Released: SetState(hole.number, 0, true); break; } }); frameLight.active = true; } public override void SetModule(Module module) { base.SetModule(module); var firstRelatedModule = Module.relatedModules[0]; if (firstRelatedModule.State is Dispenser dispenser) { _dispenser = dispenser; } else { throw new EngineException("Terminal was not assigned a related Ball."); } } } }