Files
Studio/Assets/Scripts/XED/Managers/EventConnector.cs
2025-02-28 15:37:55 +09:00

159 lines
8.8 KiB
C#

using UnityEngine;
using XRLib;
using XED.UI;
using XRLib.UI;
using XED.Util;
using XED.Manage;
using XED.Asset;
using XED.Machine;
using System.Collections.Generic;
using System;
namespace XED.Manage
{
[DefaultExecutionOrder(int.MaxValue)]
public class EventConnector : MonoBehaviour, ISingle
{
public override void AfterAwake()
{
var rayCaster = FindSingle<Raycaster>();
var statusPanel = FindSingle<ModePanel>();
var canvas_static = FindSingle<Canvas_Static>();
var canvas_Popup = FindSingle<Canvas_Popup>();
var canvas_Windows = FindSingle<Canvas_Windows>();
var agvManager = FindSingle<AGV_Manager>();
var wallBuilder = FindSingle<WallBuilder>();
var agvNodeManager = FindSingle<AGVNodeManager>();
var userInputManager = FindSingle<UserInputManager>();
var agvNodeLinkManager = FindSingle<AGVNodeLinkManager>();
var nodeGizmoController = FindSingle<NodeGizmoController>();
var customAssetConnector = FindSingle<CustomAssetConnector>();
var renderObjectHandler = FindFirstObjectByType<RenderObjectHandler>();
GameObject assetWindow = canvas_Windows.panel_assetlibrary.gameObject;
SaveLoadFBXData saveLoadFBXData = customAssetConnector.saveLoadFBXData;
GameObject componentWindow = canvas_Windows.panel_componentlibrary.gameObject;
UIConnection();
StatusConnection();
ManagerConnection();
DefaultActionSetting();
void ManagerConnection()
{
customAssetConnector.onRemoveObjects += renderObjectHandler.DeselectAll;
customAssetConnector.onSelectObjects += ((name, objects) => { canvas_Windows.panel_objectinfo.gameObject.SetActive(true); });
customAssetConnector.onSelectObjects += ((name, objects) => { canvas_Windows.panel_objectalign.gameObject.SetActive(true); });
customAssetConnector.onSelectObjects += canvas_Windows.panel_objectinfo.SetObjectInfo;
customAssetConnector.onRemoveObjects += canvas_Windows.panel_objectinfo.ResetObjectInfo;
customAssetConnector.onDeselectObjects += (() => { canvas_Windows.panel_objectinfo.gameObject.SetActive(false); });
customAssetConnector.onDeselectObjects += (() => { canvas_Windows.panel_objectalign.gameObject.SetActive(false); });
//customAssetConnector.onAssetDropped += (() => componentWindow.SetActive(true));
renderObjectHandler.onDeselectAll += canvas_Windows.panel_objectinfo.ResetObjectInfo;
renderObjectHandler.onTransformChanged += canvas_Windows.panel_objectinfo.OnTransformChanged;
renderObjectHandler.onDragBegin += canvas_Popup.panel_draghandler.OnBeginDrag;
renderObjectHandler.onDragEnd += canvas_Popup.panel_draghandler.OnEndDrag;
renderObjectHandler.onDragForceEnd += canvas_Popup.panel_draghandler.ForceEndDrag;
saveLoadFBXData.onBeginLoadAsset += (() => assetWindow.SetActive(true));
canvas_Windows.panel_objectinfo.onTransformChanged += renderObjectHandler.OnTransformChanged;
agvNodeManager.onNodeConnectionAdded += agvNodeLinkManager.AddLine;
agvNodeManager.onNodeConnectionUpdated += agvNodeLinkManager.UpdateLine;
agvNodeManager.onNodeConnectionRemoved += agvNodeLinkManager.RemoveLine;
agvNodeManager.onNodeGizmoSelected += nodeGizmoController.Attach;
agvNodeManager.onNodeDeselected += nodeGizmoController.Detach;
agvNodeManager.onNodeSettingSelected += canvas_Popup.agvnodepopup.Popup;
agvNodeManager.onNodeDeselected += canvas_Popup.agvnodepopup.Popdown;
agvNodeManager.onNodeSequenceOrdered += agvManager.ordertoAGV;
agvNodeManager.onNodeSequenceUpdated += canvas_Popup.agvnodemodepopup.UpdateTextSelectedAGVNode;
agvNodeManager.onNodeSequenceOrdered += agvNodeLinkManager.AddLines;
}
void UIConnection()
{
//Panel_ShortCut
canvas_static.panel_shortcuts.onClickOpenAssetWindow += (() => assetWindow.SetActive(!assetWindow.activeSelf));
canvas_static.panel_shortcuts.onClickOpenComponentWindow += (() => componentWindow.SetActive(!componentWindow.activeSelf));
canvas_static.panel_shortcuts.onClickUndo += CommandManager.I.Undo;
canvas_static.panel_shortcuts.onClickRedo += CommandManager.I.Redo;
//Panel Header
canvas_static.panel_topbar.onClickLoadAssets += saveLoadFBXData.LoadLocalFBXDirectory;
canvas_static.panel_topbar.onClickAssetWindow += (() => assetWindow.SetActive(!assetWindow.activeSelf));
canvas_static.panel_topbar.onClickComponentWindow += (() => componentWindow.SetActive(!componentWindow.activeSelf));
//Panel Toolbar
canvas_static.panel_toolbar.onClickMove += renderObjectHandler.SetRTGMove;
canvas_static.panel_toolbar.onClickExpand += renderObjectHandler.SetRTGScale;
canvas_static.panel_toolbar.onClickRotate += renderObjectHandler.SetRTGRotate;
canvas_static.panel_toolbar.onClickRemove += renderObjectHandler.RemoveItem;
canvas_static.panel_toolbar.onClickCopy += renderObjectHandler.CopyItem;
canvas_static.panel_toolbar.onClickStartDrawWall += wallBuilder.DrawWallStart;
canvas_static.panel_toolbar.onClickModifyWall += wallBuilder.SetDrawState;
canvas_static.panel_toolbar.onClickRemoveWall += wallBuilder.SetDrawState;
canvas_static.panel_toolbar.onClickEndWall += wallBuilder.SetDrawState;
canvas_Popup.agvnodepopup.Button_Plus.onClick.AddListener(agvNodeManager.AddNode);
canvas_Popup.agvnodepopup.Button_Minus.onClick.AddListener(agvNodeManager.RemoveNode);
canvas_Popup.agvnodepopup.DropDown_AGVNodeType.onValueChanged.AddListener(agvNodeManager.NodeTypeChange);
canvas_Popup.agvnodemodepopup.Button_AGVPlay.onClick.AddListener(agvNodeManager.ordertoAGV);
canvas_Popup.agvnodemodepopup.Button_AGVNodeLoad.onClick.AddListener(agvNodeManager.Load);
canvas_Popup.agvnodemodepopup.Button_AGVNodeSave.onClick.AddListener(agvNodeManager.Save);
canvas_Popup.agvnodemodepopup.onAGVNodeModeChanged += agvNodeManager.ChangeSelectMode;
canvas_Popup.panel_draghandler.onDragBoxSelect += customAssetConnector.OnDragBoxSelect;
canvas_static.panel_toolbar.onClickAGVMode += () => statusPanel.SetMode(ModePanel.ProgramMode.AGVPathDrawing);
canvas_static.panel_toolbar.onClickStartDrawWall += ()=>statusPanel.SetMode(ModePanel.ProgramMode.WallDrawing);
}
void StatusConnection()
{
statusPanel.AddController(renderObjectHandler);
statusPanel.AddController(wallBuilder);
statusPanel.AddController(agvNodeManager);
statusPanel.AddModeEnterEvent(ModePanel.ProgramMode.AGVPathDrawing, canvas_Popup.agvnodemodepopup.Open);
statusPanel.SetMode(ModePanel.ProgramMode.ObjectLayout);
}
void DefaultActionSetting()
{
var commandHandler = CommandManager.I.GetInputHandler();
userInputManager.SetHandler(GetDefaultInputHandler());
userInputManager.SetHandler(commandHandler);
canvas_static.panel_modecontrol.onClickObjectMode += () => statusPanel.SetMode(ModePanel.ProgramMode.ObjectLayout);
//canvas_static.panel_modecontrol.onClickPropertyMode += () => statusPanel.SetMode(ModePanel.ProgramMode.None);
rayCaster.onUIHoverEvent += canvas_Popup.panel_tooltip.ActivateTooltip;
rayCaster.onUIHoverExitEvent += canvas_Popup.panel_tooltip.DeactivateTooltip;
//rayCaster.AddEvent(Raycaster.EventType.FirstRightClickOnly, typeof(TwinObject), canvas_Popup.panel_propertyviewer.Activate);
}
}
InputHandler defaultInputHandler;
InputHandler GetDefaultInputHandler()
{
if (defaultInputHandler == null)
{
Dictionary<KeyCode, Action> upKeyActions = new();
Dictionary<KeyCode, Action> getKeyActions = new();
Dictionary<KeyCode, Action> downKeyActions = new();
Dictionary<KeyCode, Dictionary<KeyCode, Action>> hotkeyActions = new();
defaultInputHandler = new InputHandler(getKeyActions, downKeyActions, upKeyActions, hotkeyActions);
}
return defaultInputHandler;
}
}
}