100 lines
2.9 KiB
C#
100 lines
2.9 KiB
C#
using EscapeRoomEngine.Engine.Runtime.Modules;
|
|
using EscapeRoomEngine.Engine.Runtime.Utilities;
|
|
using NaughtyAttributes;
|
|
using UnityEngine;
|
|
using Logger = EscapeRoomEngine.Engine.Runtime.Utilities.Logger;
|
|
using LogType = EscapeRoomEngine.Engine.Runtime.Utilities.LogType;
|
|
|
|
namespace EscapeRoomEngine.Desert.Runtime.Puzzle_C
|
|
{
|
|
[SelectionBase]
|
|
[RequireComponent(typeof(Animator), typeof(Emission))]
|
|
public class Dispenser : ModuleState
|
|
{
|
|
private static readonly int Open = Animator.StringToHash("Open");
|
|
|
|
public Transform dispensable;
|
|
[SerializeField] [Min(0)]
|
|
private float cooldown;
|
|
[BoxGroup("Internal")] [SerializeField]
|
|
private Transform dispenseOrigin;
|
|
[BoxGroup("Internal")] [SerializeField]
|
|
private Button dispenseButton;
|
|
|
|
public bool Solved
|
|
{
|
|
set
|
|
{
|
|
if (value)
|
|
{
|
|
CloseHatch();
|
|
dispenseButton.Disable();
|
|
_light.color = _solvedColor.hdr;
|
|
}
|
|
else
|
|
{
|
|
dispenseButton.Enable();
|
|
_light.color = _puzzleColor.hdr;
|
|
}
|
|
}
|
|
}
|
|
|
|
private float _previousDispense = -1;
|
|
private Animator _animator;
|
|
private Emission _light;
|
|
private DynamicColor _puzzleColor, _solvedColor;
|
|
|
|
private void Awake()
|
|
{
|
|
_animator = GetComponent<Animator>();
|
|
_light = GetComponent<Emission>();
|
|
_puzzleColor = Engine.Runtime.Engine.DefaultEngine.theme.puzzleColor;
|
|
_solvedColor = Engine.Runtime.Engine.DefaultEngine.theme.solvedColor;
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
dispenseButton.ButtonEvent += (_, type) =>
|
|
{
|
|
if (type == ButtonEventType.Pressed)
|
|
{
|
|
Dispense();
|
|
}
|
|
};
|
|
|
|
_light.active = true;
|
|
}
|
|
|
|
#region Debug Buttons
|
|
|
|
[Button(enabledMode: EButtonEnableMode.Playmode)]
|
|
public void Dispense()
|
|
{
|
|
if (_previousDispense + cooldown <= Time.time)
|
|
{
|
|
Logger.Log($"{this} dispensing {dispensable.gameObject}", LogType.PuzzleDetail);
|
|
|
|
_animator.SetBool(Open, true);
|
|
Instantiate(dispensable, dispenseOrigin.position, dispenseOrigin.rotation);
|
|
|
|
_previousDispense = Time.time;
|
|
}
|
|
}
|
|
|
|
[Button(enabledMode: EButtonEnableMode.Playmode)]
|
|
public void CloseHatch()
|
|
{
|
|
_animator.SetBool(Open, false);
|
|
}
|
|
|
|
[Button(enabledMode: EButtonEnableMode.Playmode)]
|
|
public void Solve() => Solved = true;
|
|
|
|
[Button(enabledMode: EButtonEnableMode.Playmode)]
|
|
public void Reset() => Solved = false;
|
|
|
|
#endregion
|
|
|
|
public override void SetModule(Module module) {}
|
|
}
|
|
} |