public static void AlignToolsClicked(UIComponent c, UIMouseEventParameter p) { switch (c.name) { case "AlignToolsBtn": if (AlignToolsPanel.isVisible) { AlignToolsPanel.isVisible = false; } else { AlignToolsPanel.isVisible = true; } UpdateAlignTools(); break; case "AlignHeight": if (MITE.AlignMode == MITE.AlignModes.Height) { MITE.AlignMode = MITE.AlignModes.Off; MoveItTool.instance.toolState = MoveItTool.ToolState.Default; } else { MoveItTool.instance.StartAligningHeights(); if (MoveItTool.instance.toolState == MoveItTool.ToolState.AligningHeights) { // Change MITE's mode only if MoveIt changed to AligningHeights MITE.AlignMode = MITE.AlignModes.Height; } } if (MITE.Settings.AutoCollapseAlignTools) { AlignToolsPanel.isVisible = false; } UpdateAlignTools(); break; case "AlignIndividual": if (MITE.AlignMode == MITE.AlignModes.Individual) { MITE.AlignMode = MITE.AlignModes.Off; MoveItTool.instance.toolState = MoveItTool.ToolState.Default; } else { if (MoveItTool.instance.toolState == MoveItTool.ToolState.Cloning || MoveItTool.instance.toolState == MoveItTool.ToolState.RightDraggingClone) { MoveItTool.instance.StopCloning(); } MoveItTool.instance.toolState = MoveItTool.ToolState.AligningHeights; if (Action.selection.Count > 0) { MITE.AlignMode = MITE.AlignModes.Individual; } } if (MITE.Settings.AutoCollapseAlignTools) { AlignToolsPanel.isVisible = false; } UpdateAlignTools(); break; case "AlignGroup": if (MITE.AlignMode == MITE.AlignModes.Group) { MITE.AlignMode = MITE.AlignModes.Off; MoveItTool.instance.toolState = MoveItTool.ToolState.Default; } else { if (MoveItTool.instance.toolState == MoveItTool.ToolState.Cloning || MoveItTool.instance.toolState == MoveItTool.ToolState.RightDraggingClone) { MoveItTool.instance.StopCloning(); } MoveItTool.instance.toolState = MoveItTool.ToolState.AligningHeights; if (Action.selection.Count > 0) { MITE.AlignMode = MITE.AlignModes.Group; } } if (MITE.Settings.AutoCollapseAlignTools) { AlignToolsPanel.isVisible = false; } UpdateAlignTools(); break; case "AlignRandom": MITE.AlignMode = MITE.AlignModes.Random; if (MoveItTool.instance.toolState == MoveItTool.ToolState.Cloning || MoveItTool.instance.toolState == MoveItTool.ToolState.RightDraggingClone) { MoveItTool.instance.StopCloning(); } AlignRotationAction action = new AlignRandomAction(); action.followTerrain = MoveItTool.followTerrain; ActionQueue.instance.Push(action); ActionQueue.instance.Do(); MITE.DeactivateAlignTool(); if (MITE.Settings.AutoCollapseAlignTools) { AlignToolsPanel.isVisible = false; } UpdateAlignTools(); break; } //Debug.Log($"{c.name} clicked, mode is {MITE.AlignMode}"); }
public static bool Prefix(MoveItTool __instance, ref Instance ___m_hoverInstance, ref int ___m_nextAction) { if (___m_hoverInstance == null) { return(true); } if (MITE.AlignMode != MITE.AlignModes.Off && MITE.AlignMode != MITE.AlignModes.Height) { float angle; if (___m_hoverInstance is MoveableBuilding mb) { Building building = Singleton <BuildingManager> .instance.m_buildings.m_buffer[mb.id.Building]; angle = building.m_angle; } else if (___m_hoverInstance is MoveableProp mp) { PropInstance prop = Singleton <PropManager> .instance.m_props.m_buffer[mp.id.Prop]; angle = prop.Angle; } else if (___m_hoverInstance is MoveableSegment ms) { PropInstance segment = Singleton <PropManager> .instance.m_props.m_buffer[ms.id.Prop]; NetSegment[] segmentBuffer = NetManager.instance.m_segments.m_buffer; Vector3 startPos = NetManager.instance.m_nodes.m_buffer[segmentBuffer[ms.id.NetSegment].m_startNode].m_position; Vector3 endPos = NetManager.instance.m_nodes.m_buffer[segmentBuffer[ms.id.NetSegment].m_endNode].m_position; //Debug.Log($"Vector:{endPos.x - startPos.x},{endPos.z - startPos.z} Start:{startPos.x},{startPos.z} End:{endPos.x},{endPos.z}"); angle = (float)Math.Atan2(endPos.z - startPos.z, endPos.x - startPos.x); } else { //Debug.Log($"Wrong hover asset type <{___m_hoverInstance.GetType()}>"); return(MITE.DeactivateAlignTool()); } // Add action to queue, also enables Undo/Redo AlignRotationAction action; switch (MITE.AlignMode) { case MITE.AlignModes.Group: action = new AlignGroupAction(); break; default: action = new AlignIndividualAction(); break; } action.newAngle = angle; action.followTerrain = MoveItTool.followTerrain; ActionQueue.instance.Push(action); ___m_nextAction = MITE.Tool_Action_Do; //Debug.Log($"Angle:{angle}, from {___m_hoverInstance}"); return(MITE.DeactivateAlignTool(false)); } if (__instance.toolState == MoveItTool.ToolState.AligningHeights) { //Debug.Log($"toolState is AligningHeights, AlignMode:{MITE.AlignMode} hB:{___m_hoverInstance.id.Building} hN:{___m_hoverInstance.id.NetNode} hS:{___m_hoverInstance.id.NetSegment}"); if (MITE.AlignMode == MITE.AlignModes.Height) { MITE.AlignMode = MITE.AlignModes.Off; } UI.UpdateAlignTools(); } return(true); }