Files
modular-vr/Assets/Desert/Runtime/Puzzle C/Holes.cs
2022-12-01 15:13:00 +01:00

90 lines
3.1 KiB
C#

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<Hole> _holes;
private Dispenser _dispenser;
private DynamicColor _puzzleColor, _solvedColor, _activeColor;
protected override void Awake()
{
base.Awake();
_holes = new List<Hole>(GetComponentsInChildren<Hole>());
_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.");
}
}
}
}