Files
Studio/Assets/Scripts/XED/Managers/ModePanel.cs
2025-02-21 11:57:09 +09:00

68 lines
1.9 KiB
C#

using JetBrains.Annotations;
using System;
using System.Collections.Generic;
using UnityEngine;
using XRLib;
using XED.Interfaces;
using XED.Util;
namespace XED.Manage
{
public class ModePanel : MonoBehaviour, ISingle
{
public enum ProgramMode
{
None,
WallDrawing,
ObjectLayout,
AGVPathDrawing
}
public ProgramMode currentMode;
Dictionary<ProgramMode, Action> statusEnterEventTable = new();
Dictionary<ProgramMode, Action> statusExitEventTable = new();
public void SetMode(ProgramMode newMode)
{
if (statusExitEventTable.TryGetValue(currentMode, out Action action))
{
Debug.Log($"Prev Status Event : {currentMode}");
action?.Invoke();
}
currentMode = newMode;
if (statusEnterEventTable.TryGetValue(currentMode, out Action action2))
{
Debug.Log($"Curr Status Event : {currentMode}");
action2?.Invoke();
}
}
public void AddModeExitEvent(ProgramMode targetStatus, Action evt)
{
if (!statusExitEventTable.ContainsKey(targetStatus))
{
statusExitEventTable.Add(targetStatus, null);
}
statusExitEventTable[targetStatus] += evt;
}
public void AddModeEnterEvent(ProgramMode status, Action evt)
{
if (!statusEnterEventTable.ContainsKey(status))
{
statusEnterEventTable.Add(status, null);
}
statusEnterEventTable[status] += evt;
}
internal void AddController(IModeController controller)
{
var status = controller.mode;
AddModeEnterEvent(status, controller.StatusEnterEvent);
AddModeExitEvent(status, controller.StatusExitEvent);
}
}
}