using System; using UnityEngine; using Logger = EscapeRoomEngine.Engine.Runtime.Utilities.Logger; using LogType = EscapeRoomEngine.Engine.Runtime.Utilities.LogType; namespace EscapeRoomEngine.Desert.Runtime.Puzzle_A { public enum SymbolEventType { Activated, Deactivated } public static class SymbolEventExtensions { public static string Description(this SymbolEventType type, Symbol symbol) { var action = type switch { SymbolEventType.Activated => "activated", SymbolEventType.Deactivated => "deactivated", _ => throw new ArgumentOutOfRangeException(nameof(type), type, null) }; return $"{symbol} was {action}"; } } public delegate void SymbolEventHandler(SymbolEventType e); [RequireComponent(typeof(Emission))] public class Symbol : MonoBehaviour { public int symbolNumber; public float anglePosition; public event SymbolEventHandler SymbolEvent; public bool Active { set { var previous = _emission.active; _emission.active = value; if (previous != value) { OnSymbolEvent(value ? SymbolEventType.Activated : SymbolEventType.Deactivated); } } } private Emission _emission; private void Awake() { _emission = GetComponent(); } private void Start() { Active = false; } private void OnSymbolEvent(SymbolEventType type) { Logger.Log(type.Description(this), LogType.PuzzleDetail); SymbolEvent?.Invoke(type); } public override string ToString() { return name; } } }