76 lines
1.9 KiB
C#
76 lines
1.9 KiB
C#
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<Emission>();
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|