Example #1
0
        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}");
        }
Example #2
0
        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);
        }