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