Example #1
0
        internal UIButton CreateSubButton(string name, string text, string fgSprite)
        {
            UIMoreTools.MoreSubButtons[this].Add(name, m_subpanel.AddUIComponent <UIButton>());
            UIButton subButton = UIMoreTools.MoreSubButtons[this][name];

            subButton.name            = name;
            subButton.atlas           = m_toolbar.GetIconsAtlas();
            subButton.playAudioEvents = true;
            //subButton.size = new Vector2(158, 30);
            subButton.autoSize = true;
            subButton.text     = text;
            subButton.textHorizontalAlignment = UIHorizontalAlignment.Left;
            subButton.textScale            = 0.8f;
            subButton.textPadding          = new RectOffset(29, 0, 5, 0);
            subButton.textColor            = new Color32(230, 230, 230, 255);
            subButton.hoveredTextColor     = new Color32(255, 255, 255, 255);
            subButton.normalFgSprite       = fgSprite;
            subButton.hoveredBgSprite      = "SubmenuBG";
            subButton.foregroundSpriteMode = UIForegroundSpriteMode.Scale;
            subButton.spritePadding        = new RectOffset(0, 64, 0, 0);
            subButton.eventClicked        += (UIComponent c, UIMouseEventParameter p) =>
            {
                UIMoreTools.MoreToolsClicked(subButton.name, Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt), Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift));
            };

            return(subButton);
        }
Example #2
0
        public static void SetToolState(ToolStates state = ToolStates.Default, MT_Tools tool = MT_Tools.Off, ushort toolPhase = 0)
        {
            ToolStates previousState = ToolState;

            if (ToolState != state)
            {
                if (state != ToolStates.ToolActive && state != ToolStates.Aligning)
                {
                    UIMoreTools.m_activeToolMenu = null;
                }

                if (ToolState == ToolStates.ToolActive)
                {
                    if (MT_Tool == MT_Tools.MoveTo)
                    {
                        m_moveToPanel.Visible(false);
                    }
                }
            }

            ToolState        = state;
            m_toolsMode      = tool;
            m_alignToolPhase = toolPhase;

            if (state == ToolStates.ToolActive || state == ToolStates.Aligning || previousState == ToolStates.ToolActive || previousState == ToolStates.Aligning)
            {
                UIMoreTools.UpdateMoreTools();
            }
            m_debugPanel?.UpdatePanel();
        }
Example #3
0
        public bool StartTool(ToolStates newToolState, MT_Tools mode)
        {
            if (ToolState == ToolStates.Cloning || ToolState == ToolStates.RightDraggingClone)
            {
                StopCloning();
            }

            if (ToolState != ToolStates.Default && ToolState != ToolStates.Aligning && ToolState != ToolStates.ToolActive)
            {
                return(false);
            }

            if (!Action.HasSelection())
            {
                return(false);
            }

            SetToolState(newToolState, mode, 1);
            UIMoreTools.CheckCloseMenu();
            return(true);
        }
Example #4
0
 internal void CreateSubPanel(string subName, float entries)
 {
     m_panel.atlas                  = UIUtils.GetAtlas("Ingame");
     m_panel.backgroundSprite       = "SubcategoriesPanel";
     m_panel.clipChildren           = true;
     m_panel.size                   = new Vector2(160, 12 + (entries * 32f)); // Width is changed at runtime
     m_panel.isVisible              = false;
     m_subpanel.name                = subName;
     m_subpanel.padding             = new RectOffset(1, 1, 6, 6);
     m_subpanel.size                = m_panel.size;
     m_subpanel.autoLayoutDirection = LayoutDirection.Vertical;
     m_subpanel.autoLayout          = true;
     m_subpanel.relativePosition    = new Vector3(0, 0, 0);
     m_subpanel.autoLayoutPadding   = new RectOffset(0, 0, 0, 2);
     m_panel.autoLayout             = false;
     m_panel.absolutePosition       = UIMoreTools.MoreToolsBtn.absolutePosition + new Vector3(-m_panel.width, -m_panel.height - 10);
     m_panel.eventMouseEnter       += (UIComponent c, UIMouseEventParameter p) =>
     {
         UIMoreTools.m_activeDisplayMenu = this;
         if (MoveItTool.marqueeSelection)
         {
             UIToolOptionPanel.instance.m_filtersPanel.isVisible = false;
         }
         c.isVisible = true;
         UIMoreTools.UpdateMoreTools();
     };
     m_panel.eventMouseLeave += (UIComponent c, UIMouseEventParameter p) =>
     {
         UIMoreTools.m_activeDisplayMenu = null;
         if (MoveItTool.marqueeSelection)
         {
             UIToolOptionPanel.instance.m_filtersPanel.isVisible = true;
         }
         c.isVisible = false;
         UIMoreTools.UpdateMoreTools();
     };
 }
Example #5
0
        public void OnSettingsUI(UIHelperBase helper)
        {
            try
            {
                UIHelperBase group = helper.AddGroup(Name);
                UIPanel      panel = ((UIPanel)((UIHelper)group).self) as UIPanel;

                UICheckBox checkBox = (UICheckBox)group.AddCheckbox("Auto-close Toolbox menu", MoveItTool.autoCloseAlignTools.value, (b) =>
                {
                    MoveItTool.autoCloseAlignTools.value = b;
                    if (UIMoreTools.MoreToolsPanel != null)
                    {
                        UIMoreTools.CloseMenu();
                    }
                });
                checkBox.tooltip = "Check this to close the Toolbox menu after choosing a tool.";

                group.AddSpace(10);

                checkBox = (UICheckBox)group.AddCheckbox("Prefer fast, low-detail moving (hold Shift to temporarily switch)", MoveItTool.fastMove.value, (b) =>
                {
                    MoveItTool.fastMove.value = b;
                });
                checkBox.tooltip = "Helps you position objects when your frame-rate is poor.";

                group.AddSpace(10);

                checkBox = (UICheckBox)group.AddCheckbox("Hide selectors/overlays when in low-sensitivity mode", MoveItTool.hideSelectorsOnLowSensitivity.value, (b) =>
                {
                    MoveItTool.hideSelectorsOnLowSensitivity.value = b;
                });
                checkBox.tooltip = "When holding control, the selection overlays are hidden";

                group.AddSpace(10);

                checkBox = (UICheckBox)group.AddCheckbox("Select pylons and pillars by holding Alt only", MoveItTool.altSelectNodeBuildings.value, (b) =>
                {
                    MoveItTool.altSelectNodeBuildings.value = b;
                });

                group.AddSpace(10);

                checkBox = (UICheckBox)group.AddCheckbox("Use cardinal movements", MoveItTool.useCardinalMoves.value, (b) =>
                {
                    MoveItTool.useCardinalMoves.value = b;
                });
                checkBox.tooltip = "If checked, Up will move in the North direction, Down is South, Left is West, Right is East.";

                group.AddSpace(10);

                checkBox = (UICheckBox)group.AddCheckbox("Right click cancels cloning", MoveItTool.rmbCancelsCloning.value, (b) =>
                {
                    MoveItTool.rmbCancelsCloning.value = b;
                });
                checkBox.tooltip = "If checked, Right click will cancel cloning instead of rotating 45°.";

                group.AddSpace(10);
                group = helper.AddGroup("General Shortcuts");
                panel = ((UIPanel)((UIHelper)group).self) as UIPanel;
                group.AddSpace(10);

                ((UIPanel)((UIHelper)group).self).gameObject.AddComponent <OptionsKeymappingMain>();

                group.AddSpace(10);
                group = helper.AddGroup("Toolbox Shortcuts");
                panel = ((UIPanel)((UIHelper)group).self) as UIPanel;
                group.AddSpace(10);

                ((UIPanel)((UIHelper)group).self).gameObject.AddComponent <OptionsKeymappingToolbox>();

                group.AddSpace(10);
                group = helper.AddGroup("Extra Options");
                panel = ((UIPanel)((UIHelper)group).self) as UIPanel;
                group.AddSpace(10);

                UIButton button = (UIButton)group.AddButton("Remove Ghost Nodes", MoveItTool.CleanGhostNodes);
                button.tooltip = "Use this button when in-game to remove ghost nodes (nodes with no segments attached). Note: this will clear Move It's undo history!";

                group.AddSpace(20);

                checkBox = (UICheckBox)group.AddCheckbox("Disable debug messages logging", DebugUtils.hideDebugMessages.value, (b) =>
                {
                    DebugUtils.hideDebugMessages.value = b;
                });
                checkBox.tooltip = "If checked, debug messages won't be logged.";

                checkBox = (UICheckBox)group.AddCheckbox("Show Move It debug panel\n", MoveItTool.showDebugPanel.value, (b) =>
                {
                    MoveItTool.showDebugPanel.value = b;
                    if (MoveItTool.m_debugPanel != null)
                    {
                        MoveItTool.m_debugPanel.Visible(b);
                    }
                });
                checkBox.name = "MoveIt_DebugPanel";

                UILabel debugLabel = panel.AddUIComponent <UILabel>();
                debugLabel.name = "debugLabel";
                debugLabel.text = "      Shows information about the last highlighted object. Slightly decreases\n" +
                                  "      performance, do not enable unless you have a specific reason.\n ";

                group.AddSpace(5);
                UILabel nsLabel = panel.AddUIComponent <UILabel>();
                nsLabel.name = "nsLabel";
                nsLabel.text = NS_Manager.getVersionText();

                UILabel ncLabel = panel.AddUIComponent <UILabel>();
                ncLabel.name = "ncLabel";
                ncLabel.text = NodeController_Manager.getVersionText();

                UILabel tmpeLabel = panel.AddUIComponent <UILabel>();
                tmpeLabel.name = "tmpeLabel";
                tmpeLabel.text = TMPE_Manager.getVersionText();

                group = helper.AddGroup("Procedural Objects");
                panel = ((UIPanel)((UIHelper)group).self) as UIPanel;

                UILabel poLabel = panel.AddUIComponent <UILabel>();
                poLabel.name = "poLabel";
                poLabel.text = PO_Manager.getVersionText();

                UILabel poWarning = panel.AddUIComponent <UILabel>();
                poWarning.name = "poWarning";
                poWarning.text = "      Please note: you can not undo Bulldozed PO. This means if you delete \n" +
                                 "      PO objects with Move It, they are immediately PERMANENTLY gone.\n ";

                checkBox = (UICheckBox)group.AddCheckbox("Hide the PO deletion warning", !MoveItTool.POShowDeleteWarning.value, (b) =>
                {
                    MoveItTool.POShowDeleteWarning.value = !b;
                });

                checkBox = (UICheckBox)group.AddCheckbox("Highlight unselected visible PO objects", MoveItTool.POHighlightUnselected.value, (b) =>
                {
                    MoveItTool.POHighlightUnselected.value = b;
                    if (MoveItTool.PO != null)
                    {
                        try
                        {
                            MoveItTool.PO.ToolEnabled();
                        }
                        catch (ArgumentException e)
                        {
                            Debug.Log($"PO Integration failed:\n{e}");
                        }
                    }
                });
                checkBox.tooltip = "Show a faded purple circle around PO objects that aren't selected.";

                group.AddSpace(15);

                panel.gameObject.AddComponent <OptionsKeymappingPO>();

                group.AddSpace(15);
            }
            catch (Exception e)
            {
                DebugUtils.Log("OnSettingsUI failed");
                DebugUtils.LogException(e);
            }
        }
Example #6
0
        public void OnSettingsUI(UIHelperBase helper)
        {
            try
            {
                LocaleManager.eventLocaleChanged -= MoveItLoader.LocaleChanged;
                MoveItLoader.LocaleChanged();
                LocaleManager.eventLocaleChanged += MoveItLoader.LocaleChanged;

                UIHelperBase group = helper.AddGroup(Name);
                UIPanel      panel = ((UIHelper)group).self as UIPanel;

                UICheckBox checkBox = (UICheckBox)group.AddCheckbox(Str.options_AutoCloseToolbox, MoveItTool.autoCloseAlignTools.value, (b) =>
                {
                    MoveItTool.autoCloseAlignTools.value = b;
                    if (UIMoreTools.MoreToolsPanel != null)
                    {
                        UIMoreTools.CloseMenu();
                    }
                });
                checkBox.tooltip = Str.options_AutoCloseToolbox_Tooltip;

                group.AddSpace(10);

                checkBox = (UICheckBox)group.AddCheckbox(Str.options_PreferFastmove, MoveItTool.fastMove.value, (b) =>
                {
                    MoveItTool.fastMove.value = b;
                });
                checkBox.tooltip = Str.options_PreferFastmove_Tooltip;

                group.AddSpace(10);

                checkBox = (UICheckBox)group.AddCheckbox(Str.options_UseCompass, MoveItTool.useCardinalMoves.value, (b) =>
                {
                    MoveItTool.useCardinalMoves.value = b;
                });
                checkBox.tooltip = Str.options_UseCompass_Tooltip;

                group.AddSpace(10);

                checkBox = (UICheckBox)group.AddCheckbox(Str.options_RightClickCancel, MoveItTool.rmbCancelsCloning.value, (b) =>
                {
                    MoveItTool.rmbCancelsCloning.value = b;
                });
                checkBox.tooltip = Str.options_RightClickCancel_Tooltip;

                group.AddSpace(10);

                checkBox = (UICheckBox)group.AddCheckbox(Str.options_AdvancedPillarControl, MoveItTool.advancedPillarControl.value, (b) =>
                {
                    MoveItTool.advancedPillarControl.value = b;
                });
                checkBox.tooltip = Str.options_AdvancedPillarControl_Tooltip;

                group.AddSpace(10);

                checkBox = (UICheckBox)group.AddCheckbox(Str.options_AltForPillars, MoveItTool.altSelectNodeBuildings.value, (b) =>
                {
                    MoveItTool.altSelectNodeBuildings.value = b;
                });

                group.AddSpace(10);
                group = helper.AddGroup(Str.options_ShortcutsGeneral);
                panel = ((UIHelper)group).self as UIPanel;
                group.AddSpace(10);

                ((UIPanel)((UIHelper)group).self).gameObject.AddComponent <OptionsKeymappingMain>();

                group.AddSpace(10);
                group = helper.AddGroup(Str.options_ShortcutsToolbox);
                panel = ((UIHelper)group).self as UIPanel;
                group.AddSpace(10);

                ((UIPanel)((UIHelper)group).self).gameObject.AddComponent <OptionsKeymappingToolbox>();

                group.AddSpace(10);
                group = helper.AddGroup(Str.options_ExtraOptions);
                panel = ((UIHelper)group).self as UIPanel;
                group.AddSpace(10);

                UIButton button = (UIButton)group.AddButton(Str.options_RemoveGhostNodes, MoveItTool.CleanGhostNodes);
                button.tooltip = Str.options_RemoveGhostNodes_Tooltip;

                group.AddSpace(10);

                button = (UIButton)group.AddButton(Str.options_ResetButtonPosition, () =>
                {
                    UIMoveItButton.savedX.value = -1000;
                    UIMoveItButton.savedY.value = -1000;
                    MoveItTool.instance?.m_button?.ResetPosition();
                });

                group.AddSpace(20);

                checkBox = (UICheckBox)group.AddCheckbox(Str.options_DisableDebugLogging, DebugUtils.hideDebugMessages.value, (b) =>
                {
                    DebugUtils.hideDebugMessages.value = b;
                });
                checkBox.tooltip = Str.options_DisableDebugLogging_Tooltip;

                checkBox = (UICheckBox)group.AddCheckbox(Str.options_ShowDebugPanel, MoveItTool.showDebugPanel.value, (b) =>
                {
                    MoveItTool.showDebugPanel.value = b;
                    if (MoveItTool.m_debugPanel != null)
                    {
                        MoveItTool.m_debugPanel.Visible(b);
                    }
                });
                checkBox.name = "MoveIt_DebugPanel";

                group.AddSpace(5);
                UILabel nsLabel = panel.AddUIComponent <UILabel>();
                nsLabel.name = "nsLabel";
                nsLabel.text = NS_Manager.getVersionText();

                group = helper.AddGroup(Str.options_ProceduralObjects);
                panel = ((UIHelper)group).self as UIPanel;

                UILabel poLabel = panel.AddUIComponent <UILabel>();
                poLabel.name = "poLabel";
                poLabel.text = PO_Manager.getVersionText();

                // TODO add users of MoveITIntegration.dll here by name/description

                UILabel poWarning = panel.AddUIComponent <UILabel>();
                poWarning.name    = "poWarning";
                poWarning.padding = new RectOffset(25, 0, 0, 15);
                poWarning.text    = Str.options_PODeleteWarning;

                checkBox = (UICheckBox)group.AddCheckbox(Str.options_HidePODeletionWarning, !MoveItTool.POShowDeleteWarning.value, (b) =>
                {
                    MoveItTool.POShowDeleteWarning.value = !b;
                });

                group.AddSpace(15);

                panel.gameObject.AddComponent <OptionsKeymappingPO>();

                group.AddSpace(15);
            }
            catch (Exception e)
            {
                DebugUtils.Log("OnSettingsUI failed");
                DebugUtils.LogException(e);
            }
        }
        public override void Do()
        {
            Vector3   PoR;
            Matrix4x4 matrix = default;
            Bounds    bounds = GetTotalBounds(true, true);
            float     angleDelta, firstValidAngle = 0;

            System.Random   random          = new System.Random();
            BuildingManager buildingManager = Singleton <BuildingManager> .instance;

            foreach (InstanceState state in m_states)
            {
                if (state.instance.isValid)
                {
                    if (state.instance is MoveableBuilding || state.instance is MoveableProp || state.instance is MoveableProc)
                    {
                        firstValidAngle = state.angle;
                        break;
                    }
                }
            }
            angleDelta = 0 - firstValidAngle + newAngle;
            PoR        = bounds.center;

            foreach (InstanceState state in m_states)
            {
                if (state.instance.isValid)
                {
                    if (state.instance is MoveableBuilding mb)
                    {
                        //BuildingState bs = (BuildingState)state;

                        if (Mathf.Abs(Singleton <TerrainManager> .instance.SampleOriginalRawHeightSmooth(mb.position) - mb.position.y) > 0.01f)
                        {
                            mb.AddFixedHeightFlag(mb.id.Building);
                        }
                        else
                        {
                            mb.RemoveFixedHeightFlag(mb.id.Building);
                        }

                        if (this is AlignIndividualAction)
                        {
                            angleDelta = 0 - mb.angle + newAngle;
                            PoR        = state.position;
                        }
                        else if (this is AlignRandomAction)
                        {
                            angleDelta = 0 - mb.angle + (float)(random.NextDouble() * Math.PI * 2);
                            PoR        = state.position;
                        }

                        matrix.SetTRS(PoR, Quaternion.AngleAxis(angleDelta * Mathf.Rad2Deg, Vector3.down), Vector3.one);
                        mb.Transform(state, ref matrix, 0f, angleDelta, PoR, followTerrain);

                        BuildingInfo prefab   = (BuildingInfo)state.Info.Prefab;
                        ushort       id       = mb.id.Building;
                        Building     building = buildingManager.m_buildings.m_buffer[id];

                        if (prefab.m_hasParkingSpaces != VehicleInfo.VehicleType.None)
                        {
                            buildingManager.UpdateParkingSpaces(id, ref building);
                        }

                        buildingManager.UpdateBuildingRenderer(id, true);
                    }
                    else if (state.instance is MoveableProp mp)
                    {
                        if (this is AlignIndividualAction)
                        {
                            angleDelta = 0 - mp.angle + newAngle;
                            PoR        = state.position;
                        }
                        else if (this is AlignRandomAction)
                        {
                            angleDelta = 0 - mp.angle + (float)(random.NextDouble() * Math.PI * 2);
                            PoR        = state.position;
                        }
                        matrix.SetTRS(PoR, Quaternion.AngleAxis(angleDelta * Mathf.Rad2Deg, Vector3.down), Vector3.one);
                        mp.Transform(state, ref matrix, 0f, angleDelta, PoR, followTerrain);
                    }
                    else if (state.instance is MoveableProc mpo)
                    {
                        if (this is AlignIndividualAction)
                        {
                            angleDelta = 0 - mpo.angle + newAngle;
                            PoR        = state.position;
                        }
                        else if (this is AlignRandomAction)
                        {
                            angleDelta = 0 - mpo.angle + (float)(random.NextDouble() * Math.PI * 2);
                            PoR        = state.position;
                        }
                        matrix.SetTRS(PoR, Quaternion.AngleAxis(angleDelta * Mathf.Rad2Deg, Vector3.down), Vector3.one);
                        mpo.Transform(state, ref matrix, 0f, angleDelta, PoR, followTerrain);
                    }
                    else if (state.instance is MoveableTree mt)
                    {
                        if (this is AlignIndividualAction || this is AlignRandomAction)
                        {
                            continue;
                        }
                        matrix.SetTRS(PoR, Quaternion.AngleAxis(angleDelta * Mathf.Rad2Deg, Vector3.down), Vector3.one);
                        mt.Transform(state, ref matrix, 0f, angleDelta, PoR, followTerrain);
                    }
                }
            }

            MoveItTool.instance.ToolState      = MoveItTool.ToolStates.Default;
            MoveItTool.instance.AlignMode      = MoveItTool.AlignModes.Off;
            MoveItTool.instance.AlignToolPhase = 0;
            UIMoreTools.UpdateMoreTools();
            UpdateArea(bounds);
            UpdateArea(GetTotalBounds(false));
        }
Example #8
0
        protected override void OnToolGUI(Event e)
        {
            if (UIView.HasModalInput() || UIView.HasInputFocus())
            {
                return;
            }

            lock (ActionQueue.instance)
            {
                if (ToolState == ToolStates.Default || ToolState == ToolStates.ToolActive)
                {
                    if (OptionsKeymapping.undo.IsPressed(e))
                    {
                        m_nextAction = ToolAction.Undo;
                    }
                    else if (OptionsKeymapping.redo.IsPressed(e))
                    {
                        m_nextAction = ToolAction.Redo;
                    }
                }

                if (OptionsKeymapping.clone.IsPressed(e))
                {
                    if (ToolState == ToolStates.Cloning || ToolState == ToolStates.RightDraggingClone)
                    {
                        StopCloning();
                    }
                    else
                    {
                        StartCloning();
                    }
                }
                else if (OptionsKeymapping.bulldoze.IsPressed(e))
                {
                    StartBulldoze();
                }
                else if (OptionsKeymapping.reset.IsPressed(e))
                {
                    StartReset();
                }
                else if (OptionsKeymapping.viewGrid.IsPressed(e))
                {
                    if (gridVisible)
                    {
                        gridVisible = false;
                        UIToolOptionPanel.instance.grid.activeStateIndex = 0;
                    }
                    else
                    {
                        gridVisible = true;
                        UIToolOptionPanel.instance.grid.activeStateIndex = 1;
                    }
                }
                else if (OptionsKeymapping.viewUnderground.IsPressed(e))
                {
                    if (tunnelVisible)
                    {
                        tunnelVisible = false;
                        UIToolOptionPanel.instance.underground.activeStateIndex = 0;
                    }
                    else
                    {
                        tunnelVisible = true;
                        UIToolOptionPanel.instance.underground.activeStateIndex = 1;
                    }
                }
                else if (OptionsKeymapping.viewDebug.IsPressed(e))
                {
                    showDebugPanel.value = !showDebugPanel;
                    if (m_debugPanel != null)
                    {
                        ClearDebugOverlays();
                        m_debugPanel.Visible(showDebugPanel);
                    }
                }
                else if (OptionsKeymapping.viewSelectors.IsPressed(e))
                {
                    m_showSelectors = !m_showSelectors;
                }
                else if (OptionsKeymapping.activatePO.IsPressed(e))
                {
                    PO.InitialiseTool();
                }
                else if (OptionsKeymapping.convertToPO.IsPressed(e))
                {
                    UIMoreTools.MoreToolsClicked("MoveIt_ConvertToPOBtn");
                }
                else if (OptionsKeymapping.deselectAll.IsPressed(e))
                {
                    if (ToolState == ToolStates.Cloning)
                    {
                        StopCloning();
                    }
                    else if (ToolState == ToolStates.Aligning || ToolState == ToolStates.ToolActive || ToolState == ToolStates.Picking || ToolState != ToolStates.MouseDragging)
                    {
                        if (ToolState == ToolStates.Picking)
                        {
                            UIFilters.UpdatePickerButton(1);
                        }
                        DeactivateTool();
                    }

                    if (!(ActionQueue.instance.current is SelectAction))
                    {
                        SelectAction action = new SelectAction();
                        ActionQueue.instance.Push(action);
                    }
                    else
                    {
                        Action.selection.Clear();
                        ActionQueue.instance.Invalidate();
                    }
                    m_debugPanel.UpdatePanel();
                }
                else if (OptionsKeymapping.alignHeights.IsPressed(e))
                {
                    UIMoreTools.MoreToolsClicked("MoveIt_AlignHeightBtn");
                }
                else if (OptionsKeymapping.alignTerrainHeight.IsPressed(e))
                {
                    UIMoreTools.MoreToolsClicked("MoveIt_AlignTerrainHeightBtn");
                }
                else if (OptionsKeymapping.alignMirror.IsPressed(e))
                {
                    UIMoreTools.MoreToolsClicked("MoveIt_AlignMirrorBtn");
                }
                else if (OptionsKeymapping.alignLine.IsPressed(e))
                {
                    UIMoreTools.MoreToolsClicked("MoveIt_AlignLineBtn");
                }
                else if (OptionsKeymapping.alignLineUnspaced.IsPressed(e))
                {
                    UIMoreTools.MoreToolsClicked("MoveIt_AlignLineBtn", false, true);
                }
                else if (OptionsKeymapping.alignSlope.IsPressed(e))
                {
                    UIMoreTools.MoreToolsClicked("MoveIt_AlignSlopeBtn");
                }
                else if (OptionsKeymapping.alignSlopeQuick.IsPressed(e))
                {
                    UIMoreTools.MoreToolsClicked("MoveIt_AlignSlopeBtn", true);
                }
                else if (OptionsKeymapping.alignSlopeFull.IsPressed(e))
                {
                    UIMoreTools.MoreToolsClicked("MoveIt_AlignSlopeBtn", false, true);
                }
                else if (OptionsKeymapping.alignInplace.IsPressed(e))
                {
                    UIMoreTools.MoreToolsClicked("MoveIt_AlignIndividualBtn");
                }
                else if (OptionsKeymapping.alignGroup.IsPressed(e))
                {
                    UIMoreTools.MoreToolsClicked("MoveIt_AlignGroupBtn");
                }
                else if (OptionsKeymapping.alignRandom.IsPressed(e))
                {
                    UIMoreTools.MoreToolsClicked("MoveIt_AlignRandomBtn");
                }
                else if (OptionsKeymapping.alignMoveTo.IsPressed(e))
                {
                    UIMoreTools.MoreToolsClicked("MoveIt_MoveToBtn");
                }

                if (ToolState == ToolStates.Cloning)
                {
                    if (ProcessMoveKeys(e, out Vector3 direction, out float angle))
                    {
                        CloneAction action = ActionQueue.instance.current as CloneAction;

                        action.moveDelta.y += direction.y * YFACTOR;
                        action.angleDelta  += angle;
                    }
                }
                else if (ToolState == ToolStates.Default && Action.HasSelection())
                {
                    if (ProcessMoveKeys(e, out Vector3 direction, out float angle))
                    {
                        if (!(ActionQueue.instance.current is TransformAction action))
                        {
                            action = new TransformAction();
                            ActionQueue.instance.Push(action);
                        }

                        if (direction != Vector3.zero)
                        {
                            direction.x *= XFACTOR;
                            direction.y *= YFACTOR;
                            direction.z *= ZFACTOR;

                            if (!useCardinalMoves)
                            {
                                Matrix4x4 matrix4x = default;
                                matrix4x.SetTRS(Vector3.zero, Quaternion.AngleAxis(Camera.main.transform.localEulerAngles.y, Vector3.up), Vector3.one);

                                direction = matrix4x.MultiplyVector(direction);
                            }
                        }

                        action.moveDelta    += direction;
                        action.angleDelta   += angle;
                        action.followTerrain = followTerrain;

                        m_nextAction = ToolAction.Do;
                    }
                    else if (ProcessScaleKeys(e, out float magnitude))
                    {
                        if (!(ActionQueue.instance.current is ScaleAction action))
                        {
                            action = new ScaleAction();
                            ActionQueue.instance.Push(action);
                        }

                        action.magnitude    += magnitude;
                        action.followTerrain = followTerrain;

                        m_nextAction = ToolAction.Do;
                    }
                }
            }
Example #9
0
        public override void Start()
        {
            UIMoreTools.Initialise();

            instance = this;

            UICheckBox checkBox = null;

            atlas            = UIUtils.GetAtlas("Ingame");
            size             = new Vector2(41, 41);
            relativePosition = new Vector2(GetUIView().GetScreenResolution().x - 340, -41);
            name             = "MoveIt_ToolOptionPanel";

            DebugUtils.Log("ToolOptionPanel position: " + absolutePosition);

            #region Follow Terrain
            m_followTerrain                 = AddUIComponent <UIMultiStateButton>();
            m_followTerrain.atlas           = GetFollowTerrainAtlas();
            m_followTerrain.name            = "MoveIt_FollowTerrain";
            m_followTerrain.tooltip         = Str.baseUI_FollowTerrain_Tooltip;
            m_followTerrain.playAudioEvents = true;

            m_followTerrain.size          = new Vector2(36, 36);
            m_followTerrain.spritePadding = new RectOffset();

            m_followTerrain.backgroundSprites[0].disabled = "ToggleBaseDisabled";
            m_followTerrain.backgroundSprites[0].hovered  = "ToggleBaseHovered";
            m_followTerrain.backgroundSprites[0].normal   = "ToggleBase";
            m_followTerrain.backgroundSprites[0].pressed  = "ToggleBasePressed";

            m_followTerrain.backgroundSprites.AddState();
            m_followTerrain.backgroundSprites[1].disabled = "ToggleBaseDisabled";
            m_followTerrain.backgroundSprites[1].hovered  = "";
            m_followTerrain.backgroundSprites[1].normal   = "ToggleBaseFocused";
            m_followTerrain.backgroundSprites[1].pressed  = "ToggleBasePressed";

            m_followTerrain.foregroundSprites[0].normal = "FollowTerrain_disabled";

            m_followTerrain.foregroundSprites.AddState();
            m_followTerrain.foregroundSprites[1].normal = "FollowTerrain";

            m_followTerrain.relativePosition = Vector2.zero;

            m_followTerrain.activeStateIndex = MoveItTool.followTerrain ? 1 : 0;

            m_followTerrain.eventClicked += (c, p) =>
            {
                MoveItTool.followTerrain = (m_followTerrain.activeStateIndex == 1);
                MoveItTool.followTerrainModeEnabled.value = (m_followTerrain.activeStateIndex == 1);
            };
            #endregion

            #region Snapping
            m_snapping                 = AddUIComponent <UIMultiStateButton>();
            m_snapping.atlas           = UIUtils.GetAtlas("Ingame");
            m_snapping.name            = "MoveIt_Snapping";
            m_snapping.tooltip         = Str.baseUI_ToggleSnapping_Tooltip;
            m_snapping.playAudioEvents = true;

            m_snapping.size          = new Vector2(36, 36);
            m_snapping.spritePadding = new RectOffset();

            m_snapping.backgroundSprites[0].disabled = "ToggleBaseDisabled";
            m_snapping.backgroundSprites[0].hovered  = "ToggleBaseHovered";
            m_snapping.backgroundSprites[0].normal   = "ToggleBase";
            m_snapping.backgroundSprites[0].pressed  = "ToggleBasePressed";

            m_snapping.backgroundSprites.AddState();
            m_snapping.backgroundSprites[1].disabled = "ToggleBaseDisabled";
            m_snapping.backgroundSprites[1].hovered  = "";
            m_snapping.backgroundSprites[1].normal   = "ToggleBaseFocused";
            m_snapping.backgroundSprites[1].pressed  = "ToggleBasePressed";

            m_snapping.foregroundSprites[0].disabled = "SnappingDisabled";
            m_snapping.foregroundSprites[0].hovered  = "SnappingHovered";
            m_snapping.foregroundSprites[0].normal   = "Snapping";
            m_snapping.foregroundSprites[0].pressed  = "SnappingPressed";

            m_snapping.foregroundSprites.AddState();
            m_snapping.foregroundSprites[1].disabled = "SnappingDisabled";
            m_snapping.foregroundSprites[1].hovered  = "";
            m_snapping.foregroundSprites[1].normal   = "SnappingFocused";
            m_snapping.foregroundSprites[1].pressed  = "SnappingPressed";

            m_snapping.relativePosition = m_followTerrain.relativePosition + new Vector3(m_followTerrain.width, 0);

            m_snapping.activeStateIndex = (MoveItTool.instance != null && MoveItTool.instance.snapping) ? 1 : 0;

            m_snapping.eventClicked += (c, p) =>
            {
                if (MoveItTool.instance != null)
                {
                    MoveItTool.instance.snapping = (m_snapping.activeStateIndex == 1);
                }
            };
            #endregion

            m_tabStrip      = AddUIComponent <UITabstrip>();
            m_tabStrip.size = new Vector2(36, 72);

            m_tabStrip.relativePosition = m_snapping.relativePosition + new Vector3(m_snapping.width, 0);

            #region Single Select
            m_single                 = m_tabStrip.AddTab("MoveIt_Single", null, false);
            m_single.group           = m_tabStrip;
            m_single.atlas           = UIUtils.GetAtlas("Ingame");
            m_single.tooltip         = Str.baseUI_Single_Tooltip;
            m_single.playAudioEvents = true;

            m_single.size = new Vector2(36, 36);

            m_single.normalBgSprite    = "OptionBase";
            m_single.focusedBgSprite   = "OptionBaseFocused";
            m_single.hoveredBgSprite   = "OptionBaseHovered";
            m_single.pressedBgSprite   = "OptionBasePressed";
            m_single.disabledBgSprite  = "OptionBaseDisabled";
            m_single.text              = "•";
            m_single.textScale         = 1.5f;
            m_single.textPadding       = new RectOffset(0, 1, 4, 0);
            m_single.textColor         = new Color32(119, 124, 126, 255);
            m_single.hoveredTextColor  = new Color32(110, 113, 114, 255);
            m_single.pressedTextColor  = new Color32(172, 175, 176, 255);
            m_single.focusedTextColor  = new Color32(187, 224, 235, 255);
            m_single.disabledTextColor = new Color32(66, 69, 70, 255);
            #endregion

            #region Marquee Select
            m_marquee                 = m_tabStrip.AddTab("MoveIt_Marquee", null, false);
            m_marquee.group           = m_tabStrip;
            m_marquee.atlas           = UIUtils.GetAtlas("Ingame");
            m_marquee.tooltip         = Str.baseUI_Marquee_Tooltip;
            m_marquee.playAudioEvents = true;

            m_marquee.size = new Vector2(36, 36);

            m_marquee.normalBgSprite   = "OptionBase";
            m_marquee.focusedBgSprite  = "OptionBaseFocused";
            m_marquee.hoveredBgSprite  = "OptionBaseHovered";
            m_marquee.pressedBgSprite  = "OptionBasePressed";
            m_marquee.disabledBgSprite = "OptionBaseDisabled";

            m_marquee.normalFgSprite   = "ZoningOptionMarquee";
            m_marquee.relativePosition = m_single.relativePosition + new Vector3(m_single.width, 0);

            #region filtersPanel
            m_filtersPanel                  = AddUIComponent(typeof(UIPanel)) as UIPanel;
            m_filtersPanel.atlas            = UIUtils.GetAtlas("Ingame");
            m_filtersPanel.backgroundSprite = "SubcategoriesPanel";
            m_filtersPanel.clipChildren     = true;
            m_filtersPanel.size             = new Vector2(150, 235);
            m_filtersPanel.isVisible        = false;
            UIFilters.FilterPanel           = m_filtersPanel;

            void OnDoubleClick(UIComponent c, UIMouseEventParameter p)
            {
                foreach (UICheckBox cb in UIFilters.FilterCBs)
                {
                    cb.isChecked = false;
                    Filters.SetFilter(cb.name, false);
                }
                ((UICheckBox)c).isChecked = true;
                Filters.SetFilter(c.name, true);

                UIFilters.RefreshFilters();
            }

            void OnPickerClick(UIComponent c, UIMouseEventParameter p)
            {
                MoveItTool.SetToolState(MoveItTool.ToolStates.Picking);
                UIFilters.UpdatePickerButton(2);
            }

            void OnPickerDoubleClick(UIComponent c, UIMouseEventParameter p)
            {
                Filters.Picker = new PickerFilter();

                Filters.SetFilter("Picker", false);
                MoveItTool.SetToolState();
                UIFilters.UpdatePickerButton(1);
            }

            #region Standard Filters
            m_filtersPanelList      = m_filtersPanel.AddUIComponent(typeof(UIPanel)) as UIPanel;
            m_filtersPanelList.name = "m_filtersPanelList";

            m_picker = UIUtils.CreateButton(m_filtersPanel);
            m_picker.relativePosition  = new Vector3(122, 9);
            m_picker.size              = new Vector2(20, 20);
            m_picker.atlas             = GetIconsAtlas();
            m_picker.normalFgSprite    = "EyeDropper";
            m_picker.normalBgSprite    = "OptionsDropboxListbox";
            m_picker.hoveredBgSprite   = "OptionsDropboxListboxFocused";
            m_picker.pressedBgSprite   = "OptionsDropboxListboxHovered";
            m_picker.eventClick       += OnPickerClick;
            m_picker.eventDoubleClick += OnPickerDoubleClick;
            m_picker.name              = "mit_pickerButton";

            checkBox        = UIFilters.CreateFilterCB(m_filtersPanelList, "Picker", Str.filter_Picker, false);
            checkBox.width -= 21;
            UIFilters.UpdatePickerLabel(Str.filter_Picker, Str.filter_Picker_Tooltip, UIFilters.InactiveLabelColor, false);
            checkBox.eventDoubleClick += OnDoubleClick;

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Buildings", Str.filter_Buildings);
            checkBox.eventDoubleClick += OnDoubleClick;

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Props", Str.filter_Props);
            checkBox.eventDoubleClick += OnDoubleClick;

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Decals", Str.filter_Decals);
            checkBox.eventDoubleClick += OnDoubleClick;

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Surfaces", Str.filter_Surfaces);
            checkBox.eventDoubleClick += OnDoubleClick;

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Trees", Str.filter_Trees);
            checkBox.eventDoubleClick += OnDoubleClick;

            if (MoveItTool.PO.Enabled)
            {
                if (MoveItTool.PO.Active)
                {
                    m_filtersPanel.height += 20f;
                }
                checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "PO", Str.filter_PO);
                checkBox.eventDoubleClick += OnDoubleClick;
                checkBox.isVisible         = MoveItTool.PO.Active;
            }

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Nodes", Str.filter_Nodes);
            checkBox.eventDoubleClick += OnDoubleClick;

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Segments", Str.filter_Segments);
            checkBox.eventDoubleClick += OnDoubleClick;
            #endregion

            #region Network Filters
            UIButton btnNetworks = UIFilters.CreateToggleNFBtn();
            void OnDoubleClickNetworkFilter(UIComponent c, UIMouseEventParameter p)
            {
                foreach (UICheckBox cb in UIFilters.NetworkCBs)
                {
                    cb.isChecked = false;
                    Filters.SetNetworkFilter(cb.name, false);
                }
                ((UICheckBox)c).isChecked = true;
                Filters.SetNetworkFilter(c.name, true);

                UIFilters.RefreshFilters();
            }

            checkBox = UIFilters.CreateNetworkFilterCB(m_filtersPanelList, "Roads", Str.filter_Roads);
            checkBox.eventDoubleClick += OnDoubleClickNetworkFilter;

            checkBox = UIFilters.CreateNetworkFilterCB(m_filtersPanelList, "Tracks", Str.filter_Tracks);
            checkBox.eventDoubleClick += OnDoubleClickNetworkFilter;

            checkBox = UIFilters.CreateNetworkFilterCB(m_filtersPanelList, "Paths", Str.filter_Paths);
            checkBox.eventDoubleClick += OnDoubleClickNetworkFilter;

            checkBox = UIFilters.CreateNetworkFilterCB(m_filtersPanelList, "Fences", Str.filter_Fences);
            checkBox.eventDoubleClick += OnDoubleClickNetworkFilter;

            checkBox = UIFilters.CreateNetworkFilterCB(m_filtersPanelList, "Powerlines", Str.filter_Powerlines);
            checkBox.eventDoubleClick += OnDoubleClickNetworkFilter;

            checkBox = UIFilters.CreateNetworkFilterCB(m_filtersPanelList, "Others", Str.filter_Others);
            checkBox.eventDoubleClick += OnDoubleClickNetworkFilter;

            UIFilters.RefreshFilters();
            #endregion

            m_filtersPanelList.padding             = new RectOffset(10, 10, 10, 10);
            m_filtersPanelList.autoLayoutDirection = LayoutDirection.Vertical;
            m_filtersPanelList.autoLayoutPadding   = new RectOffset(0, 0, 0, 5);
            m_filtersPanelList.autoLayout          = true;
            m_filtersPanelList.relativePosition    = new Vector3(0, 0, 0);
            m_filtersPanel.autoLayout       = false;
            m_filtersPanel.absolutePosition = m_marquee.absolutePosition + new Vector3(-47, -5 - m_filtersPanel.height);
            #endregion

            m_marquee.eventButtonStateChanged += (c, p) =>
            {
                MoveItTool.marqueeSelection = p == UIButton.ButtonState.Focused;
                m_filtersPanel.isVisible    = MoveItTool.marqueeSelection;

                if (UIChangesWindow.instance != null)
                {
                    UIChangesWindow.instance.RefreshPosition();
                }
            };
            m_marquee.eventDoubleClick += (UIComponent c, UIMouseEventParameter p) =>
            {
                bool newChecked = false;
                foreach (UICheckBox cb in m_filtersPanel.GetComponentsInChildren <UICheckBox>())
                {
                    if (cb.name == "Picker")
                    {
                        continue;
                    }
                    if (!cb.isChecked)
                    {
                        newChecked = true;
                        break;
                    }
                }

                foreach (UICheckBox cb in m_filtersPanel.GetComponentsInChildren <UICheckBox>())
                {
                    if (cb.name == "Picker")
                    {
                        cb.isChecked = false;
                        Filters.SetAnyFilter(cb.name, false);
                    }
                    else
                    {
                        cb.isChecked = newChecked;
                        Filters.SetAnyFilter(cb.name, newChecked);
                    }
                }

                UIFilters.RefreshFilters();
            };
            #endregion

            #region Copy
            m_copy                 = AddUIComponent <UIButton>();
            m_copy.name            = "MoveIt_Copy";
            m_copy.group           = m_tabStrip;
            m_copy.atlas           = GetIconsAtlas();
            m_copy.tooltip         = Str.baseUI_Clone_Tooltip;;
            m_copy.playAudioEvents = true;

            m_copy.size = new Vector2(36, 36);

            m_copy.normalBgSprite   = "OptionBase";
            m_copy.hoveredBgSprite  = "OptionBaseHovered";
            m_copy.pressedBgSprite  = "OptionBasePressed";
            m_copy.disabledBgSprite = "OptionBaseDisabled";

            m_copy.normalFgSprite = "Copy";

            m_copy.relativePosition = m_tabStrip.relativePosition + new Vector3(m_single.width + m_marquee.width, 0);

            m_copy.eventClicked += (c, p) =>
            {
                if (MoveItTool.instance != null)
                {
                    if (MoveItTool.ToolState == MoveItTool.ToolStates.Cloning)
                    {
                        MoveItTool.instance.StopCloning();
                    }
                    else
                    {
                        if (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))
                        {
                            if (Action.HasSelection())
                            {
                                DuplicateAction action = new DuplicateAction();
                                if (action.Count > 0)
                                {
                                    ActionQueue.instance.Push(action);
                                    ActionQueue.instance.Do();
                                }
                            }
                        }
                        else
                        {
                            MoveItTool.instance.StartCloning();
                        }
                    }
                }
            };
            #endregion

            #region Bulldoze
            m_bulldoze                 = AddUIComponent <UIButton>();
            m_bulldoze.name            = "MoveIt_Bulldoze";
            m_bulldoze.group           = m_tabStrip;
            m_bulldoze.atlas           = GetIconsAtlas();
            m_bulldoze.tooltip         = Str.baseUI_Bulldoze_Tooltip;
            m_bulldoze.playAudioEvents = true;

            m_bulldoze.size = new Vector2(36, 36);

            m_bulldoze.normalBgSprite   = "OptionBase";
            m_bulldoze.hoveredBgSprite  = "OptionBaseHovered";
            m_bulldoze.pressedBgSprite  = "OptionBasePressed";
            m_bulldoze.disabledBgSprite = "OptionBaseDisabled";

            m_bulldoze.normalFgSprite = "Bulldoze";

            m_bulldoze.relativePosition = m_copy.relativePosition + new Vector3(m_copy.width, 0);

            m_bulldoze.eventClicked += (c, p) =>
            {
                if (MoveItTool.instance != null)
                {
                    MoveItTool.instance.StartBulldoze();
                }
            };
            #endregion

            #region More Tools
            #region More Tools Container
            m_moreTools = AddUIComponent <UIButton>();
            UIMoreTools.MoreToolsBtn     = m_moreTools;
            m_moreTools.name             = "MoveIt_MoreToolsBtn";
            m_moreTools.group            = m_tabStrip;
            m_moreTools.atlas            = GetIconsAtlas();
            m_moreTools.tooltip          = Str.baseUI_Toolbox_Tooltip;
            m_moreTools.playAudioEvents  = true;
            m_moreTools.size             = new Vector2(36, 36);
            m_moreTools.normalBgSprite   = "OptionBase";
            m_moreTools.hoveredBgSprite  = "OptionBaseHovered";
            m_moreTools.pressedBgSprite  = "OptionBasePressed";
            m_moreTools.disabledBgSprite = "OptionBaseDisabled";
            m_moreTools.normalFgSprite   = "MoreTools";
            m_moreTools.relativePosition = m_bulldoze.relativePosition + new Vector3(m_bulldoze.width, 0);
            m_moreTools.eventClicked    += (UIComponent c, UIMouseEventParameter p) =>
            {
                UIMoreTools.MoreToolsClicked(m_moreTools.name);
            };

            m_moreToolsPanel                  = AddUIComponent <UIPanel>();
            UIMoreTools.MoreToolsPanel        = m_moreToolsPanel;
            m_moreToolsPanel.name             = "mtPanel";
            m_moreToolsPanel.autoLayout       = false;
            m_moreToolsPanel.clipChildren     = true;
            m_moreToolsPanel.size             = new Vector2(36, 132);
            m_moreToolsPanel.isVisible        = false;
            m_moreToolsPanel.absolutePosition = m_moreTools.absolutePosition + new Vector3(0, 10 - m_moreToolsPanel.height);
            m_moreTools.zOrder                = m_moreToolsPanel.zOrder + 10;

            // The vertical shade
            UIPanel mtpBackground = m_moreToolsPanel.AddUIComponent <UIPanel>();
            mtpBackground.name             = "mtpBackground";
            mtpBackground.clipChildren     = true;
            mtpBackground.relativePosition = new Vector3(5, 10);
            mtpBackground.atlas            = UIUtils.GetAtlas("Ingame");
            mtpBackground.backgroundSprite = "InfoPanelBack";
            mtpBackground.size             = m_moreToolsPanel.size - new Vector2(10, 10);

            UIPanel mtpContainer = m_moreToolsPanel.AddUIComponent <UIPanel>();
            mtpContainer.name = "mtpContainer";
            mtpContainer.autoLayoutDirection = LayoutDirection.Vertical;
            mtpContainer.autoLayoutPadding   = new RectOffset(0, 0, 0, 4);
            mtpContainer.autoLayout          = true;
            mtpContainer.relativePosition    = Vector3.zero;
            mtpContainer.size             = m_moreToolsPanel.size;
            mtpContainer.eventMouseEnter += (UIComponent c, UIMouseEventParameter p) => { if (MoveItTool.marqueeSelection)
                                                                                          {
                                                                                              m_filtersPanel.isVisible = false;
                                                                                          }
            };
            mtpContainer.eventMouseLeave += (UIComponent c, UIMouseEventParameter p) => { if (MoveItTool.marqueeSelection)
                                                                                          {
                                                                                              m_filtersPanel.isVisible = true;
                                                                                          }
            };

            UIMoreTools.MoreButtons.Clear();
            UIMoreTools.MoreSubButtons.Clear();
            #endregion

            try
            {
                AddMoreButtonCallback?.Invoke(this, m_moreTools, mtpBackground, mtpContainer);
            }
            catch (Exception e)
            {
                Log.Error(e);
            }

            #region More Tools / Toolbox buttons
            UIMoreToolsBtn othersBtn = new UIMoreToolsBtn(this, "MoveIt_OthersBtn", Str.toolbox_OtherTools_Tooltip, "MenuOthers", mtpContainer, "m_mtOthersList", (MoveItTool.PO.Enabled ? 7.25f : 6.25f));
            if (MoveItTool.PO.Enabled)
            {
                othersBtn.CreateSubButton("MoveIt_ConvertToPOBtn", Str.toolbox_ConvertToPO, "ConvertToPO");
            }
            othersBtn.CreateSubButton("MoveIt_AlignLineBtn", Str.toolbox_LineUpObjects, "AlignLine");
            othersBtn.CreateSubButton("MoveIt_AlignMirrorBtn", Str.toolbox_MirrorObjects, "AlignMirror");
            othersBtn.CreateSubButton("MoveIt_ResetObjectBtn", Str.toolbox_ResetObjects, "ResetObject");
            othersBtn.CreateSubButton("MoveIt_MoveToBtn", Str.toolbox_SetPosition, "MoveTo");
            othersBtn.CreateSubSeparator("MoveIt_FileSeparator");
            othersBtn.CreateSubButton("MoveIt_LoadBtn", Str.toolbox_ImportSelection, "Load");
            othersBtn.CreateSubButton("MoveIt_SaveBtn", Str.toolbox_ExportSelection, "Save");
            othersBtn.UpdateWidth();

            UIMoreToolsBtn rotateBtn = new UIMoreToolsBtn(this, "MoveIt_RotateBtn", Str.toolbox_RotationTools_Tooltip, "MenuRotate", mtpContainer, "m_mtRotateList", 3f);
            rotateBtn.CreateSubButton("MoveIt_AlignRandomBtn", Str.toolbox_RotateRandomly, "AlignRandom");
            rotateBtn.CreateSubButton("MoveIt_AlignGroupBtn", Str.toolbox_RotateAtCentre, "AlignGroup");
            rotateBtn.CreateSubButton("MoveIt_AlignIndividualBtn", Str.toolbox_RotateInPlace, "AlignIndividual");
            rotateBtn.UpdateWidth();

            UIMoreToolsBtn heightBtn = new UIMoreToolsBtn(this, "MoveIt_HeightBtn", Str.toolbox_HeightTools_Tooltip, "MenuHeight", mtpContainer, "m_mtHeightList", 3f);
            heightBtn.CreateSubButton("MoveIt_AlignSlopeBtn", Str.toolbox_SlopeObjects, "AlignSlope");
            heightBtn.CreateSubButton("MoveIt_AlignTerrainHeightBtn", Str.toolbox_ToTerrainHeight, "AlignTerrainHeight");
            heightBtn.CreateSubButton("MoveIt_AlignHeightBtn", Str.toolbox_ToObjectHeight, "AlignHeight");
            heightBtn.UpdateWidth();
            #endregion
            #endregion

            #region View Options
            m_viewOptions                  = AddUIComponent <UIPanel>();
            m_viewOptions.atlas            = UIUtils.GetAtlas("Ingame");
            m_viewOptions.backgroundSprite = "InfoPanelBack";
            m_viewOptions.size             = new Vector2(44f, 80f);

            m_viewOptions.absolutePosition = new Vector3(GetUIView().GetScreenResolution().x - m_viewOptions.width, absolutePosition.y - m_viewOptions.height - 8f);


            grid                 = m_viewOptions.AddUIComponent <UIMultiStateButton>();
            grid.atlas           = GetIconsAtlas();
            grid.name            = "MoveIt_GridView";
            grid.tooltip         = Str.baseUI_ToggleGrid_Tooltip;
            grid.playAudioEvents = true;

            grid.size          = new Vector2(36, 36);
            grid.spritePadding = new RectOffset();

            grid.backgroundSprites[0].disabled = "OptionBaseDisabled";
            grid.backgroundSprites[0].hovered  = "OptionBaseHovered";
            grid.backgroundSprites[0].normal   = "OptionBase";
            grid.backgroundSprites[0].pressed  = "OptionBasePressed";

            grid.backgroundSprites.AddState();
            grid.backgroundSprites[1].disabled = "OptionBaseDisabled";
            grid.backgroundSprites[1].hovered  = "";
            grid.backgroundSprites[1].normal   = "OptionBaseFocused";
            grid.backgroundSprites[1].pressed  = "OptionBasePressed";

            grid.foregroundSprites[0].normal = "Grid";

            grid.foregroundSprites.AddState();
            grid.foregroundSprites[1].normal = "GridFocused";

            grid.relativePosition = new Vector3(4f, 4f);

            grid.activeStateIndex = 0;

            grid.eventClicked += (c, p) =>
            {
                MoveItTool.gridVisible = (grid.activeStateIndex == 1);
            };


            underground                 = m_viewOptions.AddUIComponent <UIMultiStateButton>();
            underground.atlas           = UIUtils.GetAtlas("Ingame");
            underground.name            = "MoveIt_UndergroundView";
            underground.tooltip         = Str.baseUI_ToggleUnderground_Tooltip;
            underground.playAudioEvents = true;

            underground.size          = new Vector2(36, 36);
            underground.spritePadding = new RectOffset();

            underground.backgroundSprites[0].disabled = "OptionBaseDisabled";
            underground.backgroundSprites[0].hovered  = "OptionBaseHovered";
            underground.backgroundSprites[0].normal   = "OptionBase";
            underground.backgroundSprites[0].pressed  = "OptionBasePressed";

            underground.backgroundSprites.AddState();
            underground.backgroundSprites[1].disabled = "OptionBaseDisabled";
            underground.backgroundSprites[1].hovered  = "";
            underground.backgroundSprites[1].normal   = "OptionBaseFocused";
            underground.backgroundSprites[1].pressed  = "OptionBasePressed";

            underground.foregroundSprites[0].normal = "BulldozerOptionPipes";

            underground.foregroundSprites.AddState();
            underground.foregroundSprites[1].normal = "BulldozerOptionPipesFocused";

            underground.relativePosition = new Vector3(4f, 40f);

            underground.activeStateIndex = 0;

            underground.eventClicked += (c, p) =>
            {
                MoveItTool.tunnelVisible = (underground.activeStateIndex == 1);
            };


            if (MoveItTool.PO.Enabled)
            {
                PO_button                 = m_viewOptions.AddUIComponent <UIMultiStateButton>();
                PO_button.atlas           = GetIconsAtlas();
                PO_button.name            = "MoveIt_PO_button";
                PO_button.tooltip         = Str.baseUI_TogglePO_Tooltip;
                PO_button.playAudioEvents = true;

                PO_button.size          = new Vector2(36, 36);
                PO_button.spritePadding = new RectOffset();

                PO_button.backgroundSprites[0].disabled = "OptionBaseDisabled";
                PO_button.backgroundSprites[0].hovered  = "OptionBaseHovered";
                PO_button.backgroundSprites[0].normal   = "OptionBase";
                PO_button.backgroundSprites[0].pressed  = "OptionBasePressed";

                PO_button.backgroundSprites.AddState();
                PO_button.backgroundSprites[1].disabled = "OptionBaseDisabled";
                PO_button.backgroundSprites[1].hovered  = "";
                PO_button.backgroundSprites[1].normal   = "OptionBaseFocused";
                PO_button.backgroundSprites[1].pressed  = "OptionBasePressed";

                PO_button.foregroundSprites[0].normal = "PO";

                PO_button.foregroundSprites.AddState();
                PO_button.foregroundSprites[1].normal = "POFocused";

                PO_button.relativePosition = new Vector3(4f, 76f);

                PO_button.activeStateIndex = 0;

                PO_button.eventClicked += (c, p) =>
                {
                    MoveItTool.PO.InitialiseTool();
                };

                m_viewOptions.height           += 36;
                m_viewOptions.absolutePosition += new Vector3(0, -36);
            }

            #endregion
        }
Example #10
0
        public override void Start()
        {
            UIMoreTools.Initialise();

            instance = this;

            UICheckBox checkBox = null;

            atlas            = UIUtils.GetAtlas("Ingame");
            size             = new Vector2(41, 41);
            relativePosition = new Vector2(GetUIView().GetScreenResolution().x - 448, -41);
            name             = "MoveIt_ToolOptionPanel";

            DebugUtils.Log("ToolOptionPanel position: " + absolutePosition);

            #region Group
            // Group
            m_group                 = AddUIComponent <UIButton>();
            m_group.name            = "MoveIt_Group";
            m_group.group           = m_tabStrip;
            m_group.atlas           = GetIconsAtlas();
            m_group.tooltip         = "Group";
            m_group.playAudioEvents = true;

            m_group.size = new Vector2(36, 36);

            m_group.normalBgSprite   = "OptionBase";
            m_group.hoveredBgSprite  = "OptionBaseHovered";
            m_group.pressedBgSprite  = "OptionBasePressed";
            m_group.disabledBgSprite = "OptionBaseDisabled";

            m_group.normalFgSprite = "Group";

            m_group.relativePosition = Vector2.zero;
            m_group.isVisible        = false; //TODO: temporary
            #endregion

            #region Save
            m_save                 = AddUIComponent <UIButton>();
            m_save.name            = "MoveIt_Save";
            m_save.group           = m_tabStrip;
            m_save.atlas           = GetIconsAtlas();
            m_save.tooltip         = "Export";
            m_save.playAudioEvents = true;

            m_save.size = new Vector2(36, 36);

            m_save.normalBgSprite   = "OptionBase";
            m_save.hoveredBgSprite  = "OptionBaseHovered";
            m_save.pressedBgSprite  = "OptionBasePressed";
            m_save.disabledBgSprite = "OptionBaseDisabled";

            m_save.normalFgSprite   = "Save";
            m_save.disabledFgSprite = "Save_disabled";

            m_save.relativePosition = m_group.relativePosition + new Vector3(m_group.width, 0);

            m_save.eventClicked += (c, p) =>
            {
                if (MoveItTool.IsExportSelectionValid())
                {
                    UISaveWindow.Open();
                }
                else
                {
                    UIView.library.ShowModal <ExceptionPanel>("ExceptionPanel").SetMessage("Selection invalid", "The selection is empty or invalid.", false);
                }
            };
            #endregion

            #region Load
            m_load                 = AddUIComponent <UIButton>();
            m_load.name            = "MoveIt_Load";
            m_load.group           = m_tabStrip;
            m_load.atlas           = GetIconsAtlas();
            m_load.tooltip         = "Import";
            m_load.playAudioEvents = true;

            m_load.size = new Vector2(36, 36);

            m_load.normalBgSprite   = "OptionBase";
            m_load.hoveredBgSprite  = "OptionBaseHovered";
            m_load.pressedBgSprite  = "OptionBasePressed";
            m_load.disabledBgSprite = "OptionBaseDisabled";

            m_load.normalFgSprite = "Load";

            m_load.relativePosition = m_save.relativePosition + new Vector3(m_save.width, 0);

            m_load.eventClicked += (c, p) =>
            {
                UILoadWindow.Open();
            };
            #endregion

            #region Follow Terrain
            m_followTerrain                 = AddUIComponent <UIMultiStateButton>();
            m_followTerrain.atlas           = GetFollowTerrainAtlas();
            m_followTerrain.name            = "MoveIt_FollowTerrain";
            m_followTerrain.tooltip         = "Follow Terrain";
            m_followTerrain.playAudioEvents = true;

            m_followTerrain.size          = new Vector2(36, 36);
            m_followTerrain.spritePadding = new RectOffset();

            m_followTerrain.backgroundSprites[0].disabled = "ToggleBaseDisabled";
            m_followTerrain.backgroundSprites[0].hovered  = "ToggleBaseHovered";
            m_followTerrain.backgroundSprites[0].normal   = "ToggleBase";
            m_followTerrain.backgroundSprites[0].pressed  = "ToggleBasePressed";

            m_followTerrain.backgroundSprites.AddState();
            m_followTerrain.backgroundSprites[1].disabled = "ToggleBaseDisabled";
            m_followTerrain.backgroundSprites[1].hovered  = "";
            m_followTerrain.backgroundSprites[1].normal   = "ToggleBaseFocused";
            m_followTerrain.backgroundSprites[1].pressed  = "ToggleBasePressed";

            m_followTerrain.foregroundSprites[0].normal = "FollowTerrain_disabled";

            m_followTerrain.foregroundSprites.AddState();
            m_followTerrain.foregroundSprites[1].normal = "FollowTerrain";

            m_followTerrain.relativePosition = m_load.relativePosition + new Vector3(m_load.width + m_load.width / 2, 0);

            m_followTerrain.activeStateIndex = MoveItTool.followTerrain ? 1 : 0;

            m_followTerrain.eventClicked += (c, p) =>
            {
                MoveItTool.followTerrain = (m_followTerrain.activeStateIndex == 1);
                MoveItTool.followTerrainModeEnabled.value = (m_followTerrain.activeStateIndex == 1);
            };
            #endregion

            #region Snapping
            m_snapping                 = AddUIComponent <UIMultiStateButton>();
            m_snapping.atlas           = UIUtils.GetAtlas("Ingame");
            m_snapping.name            = "MoveIt_Snapping";
            m_snapping.tooltip         = "Toggle Snapping";
            m_snapping.playAudioEvents = true;

            m_snapping.size          = new Vector2(36, 36);
            m_snapping.spritePadding = new RectOffset();

            m_snapping.backgroundSprites[0].disabled = "ToggleBaseDisabled";
            m_snapping.backgroundSprites[0].hovered  = "ToggleBaseHovered";
            m_snapping.backgroundSprites[0].normal   = "ToggleBase";
            m_snapping.backgroundSprites[0].pressed  = "ToggleBasePressed";

            m_snapping.backgroundSprites.AddState();
            m_snapping.backgroundSprites[1].disabled = "ToggleBaseDisabled";
            m_snapping.backgroundSprites[1].hovered  = "";
            m_snapping.backgroundSprites[1].normal   = "ToggleBaseFocused";
            m_snapping.backgroundSprites[1].pressed  = "ToggleBasePressed";

            m_snapping.foregroundSprites[0].disabled = "SnappingDisabled";
            m_snapping.foregroundSprites[0].hovered  = "SnappingHovered";
            m_snapping.foregroundSprites[0].normal   = "Snapping";
            m_snapping.foregroundSprites[0].pressed  = "SnappingPressed";

            m_snapping.foregroundSprites.AddState();
            m_snapping.foregroundSprites[1].disabled = "SnappingDisabled";
            m_snapping.foregroundSprites[1].hovered  = "";
            m_snapping.foregroundSprites[1].normal   = "SnappingFocused";
            m_snapping.foregroundSprites[1].pressed  = "SnappingPressed";

            m_snapping.relativePosition = m_followTerrain.relativePosition + new Vector3(m_followTerrain.width, 0);

            m_snapping.activeStateIndex = (MoveItTool.instance != null && MoveItTool.instance.snapping) ? 1 : 0;

            m_snapping.eventClicked += (c, p) =>
            {
                if (MoveItTool.instance != null)
                {
                    MoveItTool.instance.snapping = (m_snapping.activeStateIndex == 1);
                }
            };
            #endregion

            m_tabStrip      = AddUIComponent <UITabstrip>();
            m_tabStrip.size = new Vector2(36, 72);

            m_tabStrip.relativePosition = m_snapping.relativePosition + new Vector3(m_snapping.width, 0);

            #region Single Select
            m_single                 = m_tabStrip.AddTab("MoveIt_Single", null, false);
            m_single.group           = m_tabStrip;
            m_single.atlas           = UIUtils.GetAtlas("Ingame");
            m_single.tooltip         = "Single Selection";
            m_single.playAudioEvents = true;

            m_single.size = new Vector2(36, 36);

            m_single.normalBgSprite    = "OptionBase";
            m_single.focusedBgSprite   = "OptionBaseFocused";
            m_single.hoveredBgSprite   = "OptionBaseHovered";
            m_single.pressedBgSprite   = "OptionBasePressed";
            m_single.disabledBgSprite  = "OptionBaseDisabled";
            m_single.text              = "•";
            m_single.textScale         = 1.5f;
            m_single.textPadding       = new RectOffset(0, 1, 4, 0);
            m_single.textColor         = new Color32(119, 124, 126, 255);
            m_single.hoveredTextColor  = new Color32(110, 113, 114, 255);
            m_single.pressedTextColor  = new Color32(172, 175, 176, 255);
            m_single.focusedTextColor  = new Color32(187, 224, 235, 255);
            m_single.disabledTextColor = new Color32(66, 69, 70, 255);
            #endregion

            #region Marquee Select
            m_marquee                 = m_tabStrip.AddTab("MoveIt_Marquee", null, false);
            m_marquee.group           = m_tabStrip;
            m_marquee.atlas           = UIUtils.GetAtlas("Ingame");
            m_marquee.tooltip         = "Marquee Selection";
            m_marquee.playAudioEvents = true;

            m_marquee.size = new Vector2(36, 36);

            m_marquee.normalBgSprite   = "OptionBase";
            m_marquee.focusedBgSprite  = "OptionBaseFocused";
            m_marquee.hoveredBgSprite  = "OptionBaseHovered";
            m_marquee.pressedBgSprite  = "OptionBasePressed";
            m_marquee.disabledBgSprite = "OptionBaseDisabled";

            m_marquee.normalFgSprite   = "ZoningOptionMarquee";
            m_marquee.relativePosition = m_single.relativePosition + new Vector3(m_single.width, 0);
            #endregion

            #region filtersPanel

            m_filtersPanel                  = AddUIComponent(typeof(UIPanel)) as UIPanel;
            m_filtersPanel.atlas            = UIUtils.GetAtlas("Ingame");
            m_filtersPanel.backgroundSprite = "SubcategoriesPanel";
            m_filtersPanel.clipChildren     = true;
            m_filtersPanel.size             = new Vector2(150, 235);
            m_filtersPanel.isVisible        = false;
            UIFilters.FilterPanel           = m_filtersPanel;

            void OnDoubleClick(UIComponent c, UIMouseEventParameter p)
            {
                foreach (UICheckBox cb in UIFilters.FilterCBs)
                {
                    cb.isChecked = false;
                    Filters.SetFilter(cb.name, false);
                }
                ((UICheckBox)c).isChecked = true;
                Filters.SetFilter(c.name, true);

                UIFilters.RefreshFilters();
            }

            void OnPickerClick(UIComponent c, UIMouseEventParameter p)
            {
                MoveItTool.instance.ToolState = MoveItTool.ToolStates.Picking;
                UIFilters.UpdatePickerButton(2);
            }

            void OnPickerDoubleClick(UIComponent c, UIMouseEventParameter p)
            {
                Filters.Picker = new PickerFilter();

                Filters.SetFilter("Picker", false);
                MoveItTool.instance.ToolState = MoveItTool.ToolStates.Default;
                UIFilters.UpdatePickerButton(1);
            }

            #region Standard Filters
            m_filtersPanelList      = m_filtersPanel.AddUIComponent(typeof(UIPanel)) as UIPanel;
            m_filtersPanelList.name = "m_filtersPanelList";

            m_picker = UIUtils.CreateButton(m_filtersPanel);
            m_picker.relativePosition  = new Vector3(122, 9);
            m_picker.size              = new Vector2(20, 20);
            m_picker.atlas             = GetIconsAtlas();
            m_picker.normalFgSprite    = "EyeDropper";
            m_picker.normalBgSprite    = "OptionsDropboxListbox";
            m_picker.hoveredBgSprite   = "OptionsDropboxListboxFocused";
            m_picker.pressedBgSprite   = "OptionsDropboxListboxHovered";
            m_picker.eventClick       += OnPickerClick;
            m_picker.eventDoubleClick += OnPickerDoubleClick;
            m_picker.name              = "mit_pickerButton";

            checkBox        = UIFilters.CreateFilterCB(m_filtersPanelList, "Picker", null, false);
            checkBox.width -= 21;
            UIFilters.UpdatePickerLabel("Picker", "Pick an object to filter for objects of the same type", UIFilters.InactiveLabelColor, false);
            checkBox.eventDoubleClick += OnDoubleClick;

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Buildings");
            checkBox.eventDoubleClick += OnDoubleClick;

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Props");
            checkBox.eventDoubleClick += OnDoubleClick;

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Decals");
            checkBox.eventDoubleClick += OnDoubleClick;

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Surfaces");
            checkBox.eventDoubleClick += OnDoubleClick;

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Trees");
            checkBox.eventDoubleClick += OnDoubleClick;

            if (MoveItTool.PO.Enabled)
            {
                if (MoveItTool.PO.Active)
                {
                    m_filtersPanel.height += 20f;
                }
                checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "PO");
                checkBox.eventDoubleClick += OnDoubleClick;
                checkBox.isVisible         = MoveItTool.PO.Active;
            }

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Nodes");
            checkBox.eventDoubleClick += OnDoubleClick;

            checkBox = UIFilters.CreateFilterCB(m_filtersPanelList, "Segments");
            checkBox.eventDoubleClick += OnDoubleClick;
            #endregion

            #region Network Filters
            UIButton btnNetworks = UIFilters.CreateToggleNFBtn();
            void OnDoubleClickNetworkFilter(UIComponent c, UIMouseEventParameter p)
            {
                foreach (UICheckBox cb in UIFilters.NetworkCBs)
                {
                    cb.isChecked = false;
                    Filters.SetNetworkFilter(cb.name, false);
                }
                ((UICheckBox)c).isChecked = true;
                Filters.SetNetworkFilter(c.name, true);

                UIFilters.RefreshFilters();
            }

            checkBox = UIFilters.CreateNetworkFilterCB(m_filtersPanelList, "Roads");
            checkBox.eventDoubleClick += OnDoubleClickNetworkFilter;

            checkBox = UIFilters.CreateNetworkFilterCB(m_filtersPanelList, "Tracks");
            checkBox.eventDoubleClick += OnDoubleClickNetworkFilter;

            checkBox = UIFilters.CreateNetworkFilterCB(m_filtersPanelList, "Paths");
            checkBox.eventDoubleClick += OnDoubleClickNetworkFilter;

            checkBox = UIFilters.CreateNetworkFilterCB(m_filtersPanelList, "Fences");
            checkBox.eventDoubleClick += OnDoubleClickNetworkFilter;

            checkBox = UIFilters.CreateNetworkFilterCB(m_filtersPanelList, "Powerlines");
            checkBox.eventDoubleClick += OnDoubleClickNetworkFilter;

            checkBox = UIFilters.CreateNetworkFilterCB(m_filtersPanelList, "Others");
            checkBox.eventDoubleClick += OnDoubleClickNetworkFilter;

            UIFilters.RefreshFilters();
            #endregion

            m_filtersPanelList.padding             = new RectOffset(10, 10, 10, 10);
            m_filtersPanelList.autoLayoutDirection = LayoutDirection.Vertical;
            m_filtersPanelList.autoLayoutPadding   = new RectOffset(0, 0, 0, 5);
            m_filtersPanelList.autoLayout          = true;
            m_filtersPanelList.relativePosition    = new Vector3(0, 0, 0);
            m_filtersPanel.autoLayout       = false;
            m_filtersPanel.absolutePosition = m_marquee.absolutePosition + new Vector3(-47, -5 - m_filtersPanel.height);
            #endregion

            m_marquee.eventButtonStateChanged += (c, p) =>
            {
                MoveItTool.marqueeSelection = p == UIButton.ButtonState.Focused;
                m_filtersPanel.isVisible    = MoveItTool.marqueeSelection;

                if (UIChangesWindow.instance != null)
                {
                    UIChangesWindow.instance.RefreshPosition();
                }
            };
            m_marquee.eventDoubleClick += (UIComponent c, UIMouseEventParameter p) =>
            {
                bool newChecked = false;
                foreach (UICheckBox cb in m_filtersPanel.GetComponentsInChildren <UICheckBox>())
                {
                    if (cb.name == "Picker")
                    {
                        continue;
                    }
                    if (!cb.isChecked)
                    {
                        newChecked = true;
                        break;
                    }
                }

                foreach (UICheckBox cb in m_filtersPanel.GetComponentsInChildren <UICheckBox>())
                {
                    if (cb.name == "Picker")
                    {
                        cb.isChecked = false;
                        Filters.SetAnyFilter(cb.name, false);
                    }
                    else
                    {
                        cb.isChecked = newChecked;
                        Filters.SetAnyFilter(cb.name, newChecked);
                    }
                }

                UIFilters.RefreshFilters();
            };

            #region Copy
            m_copy                 = AddUIComponent <UIButton>();
            m_copy.name            = "MoveIt_Copy";
            m_copy.group           = m_tabStrip;
            m_copy.atlas           = GetIconsAtlas();
            m_copy.tooltip         = "Copy (Alt+Click to duplicate in-place)";
            m_copy.playAudioEvents = true;

            m_copy.size = new Vector2(36, 36);

            m_copy.normalBgSprite   = "OptionBase";
            m_copy.hoveredBgSprite  = "OptionBaseHovered";
            m_copy.pressedBgSprite  = "OptionBasePressed";
            m_copy.disabledBgSprite = "OptionBaseDisabled";

            m_copy.normalFgSprite = "Copy";

            m_copy.relativePosition = m_tabStrip.relativePosition + new Vector3(m_single.width + m_marquee.width, 0);

            m_copy.eventClicked += (c, p) =>
            {
                if (MoveItTool.instance != null)
                {
                    if (MoveItTool.instance.ToolState == MoveItTool.ToolStates.Cloning)
                    {
                        MoveItTool.instance.StopCloning();
                    }
                    else
                    {
                        if (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))
                        {
                            if (Action.selection.Count > 0)
                            {
                                DuplicateAction action = new DuplicateAction();
                                if (action.Count > 0)
                                {
                                    ActionQueue.instance.Push(action);
                                    ActionQueue.instance.Do();
                                }
                            }
                        }
                        else
                        {
                            MoveItTool.instance.StartCloning();
                        }
                    }
                }
            };
            #endregion

            #region Bulldoze
            m_bulldoze                 = AddUIComponent <UIButton>();
            m_bulldoze.name            = "MoveIt_Bulldoze";
            m_bulldoze.group           = m_tabStrip;
            m_bulldoze.atlas           = GetIconsAtlas();
            m_bulldoze.tooltip         = "Bulldoze";
            m_bulldoze.playAudioEvents = true;

            m_bulldoze.size = new Vector2(36, 36);

            m_bulldoze.normalBgSprite   = "OptionBase";
            m_bulldoze.hoveredBgSprite  = "OptionBaseHovered";
            m_bulldoze.pressedBgSprite  = "OptionBasePressed";
            m_bulldoze.disabledBgSprite = "OptionBaseDisabled";

            m_bulldoze.normalFgSprite = "Bulldoze";

            m_bulldoze.relativePosition = m_copy.relativePosition + new Vector3(m_copy.width, 0);

            m_bulldoze.eventClicked += (c, p) =>
            {
                if (MoveItTool.instance != null)
                {
                    if (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))
                    {
                        MoveItTool.instance.StartReset();
                    }
                    else
                    {
                        MoveItTool.instance.StartBulldoze();
                    }
                }
            };
            #endregion

            #region More Tools
            m_moreTools = AddUIComponent <UIButton>();
            UIMoreTools.MoreToolsBtn     = m_moreTools;
            m_moreTools.name             = "MoveIt_MoreToolsBtn";
            m_moreTools.group            = m_tabStrip;
            m_moreTools.atlas            = GetIconsAtlas();
            m_moreTools.tooltip          = "More Tools";
            m_moreTools.playAudioEvents  = true;
            m_moreTools.size             = new Vector2(36, 36);
            m_moreTools.normalBgSprite   = "OptionBase";
            m_moreTools.hoveredBgSprite  = "OptionBaseHovered";
            m_moreTools.pressedBgSprite  = "OptionBasePressed";
            m_moreTools.disabledBgSprite = "OptionBaseDisabled";
            m_moreTools.normalFgSprite   = "MoreTools";
            m_moreTools.relativePosition = m_bulldoze.relativePosition + new Vector3(m_bulldoze.width, 0);
            m_moreTools.eventClicked    += UIMoreTools.MoreToolsClicked;

            m_moreToolsPanel                  = AddUIComponent <UIPanel>();
            UIMoreTools.MoreToolsPanel        = m_moreToolsPanel;
            m_moreToolsPanel.name             = "mtPanel";
            m_moreToolsPanel.autoLayout       = false;
            m_moreToolsPanel.clipChildren     = true;
            m_moreToolsPanel.size             = new Vector2(36, 322 + (MoveItTool.PO.Enabled ? 40 : 0));
            m_moreToolsPanel.isVisible        = false;
            m_moreToolsPanel.absolutePosition = m_moreTools.absolutePosition + new Vector3(0, 10 - m_moreToolsPanel.height);
            m_moreTools.zOrder                = m_moreToolsPanel.zOrder + 10;

            // The vertical shade
            UIPanel mtpBackground = m_moreToolsPanel.AddUIComponent <UIPanel>();
            mtpBackground.name             = "mtpBackground";
            mtpBackground.clipChildren     = true;
            mtpBackground.relativePosition = new Vector3(5, 10);
            mtpBackground.atlas            = UIUtils.GetAtlas("Ingame");
            mtpBackground.backgroundSprite = "InfoPanelBack";
            mtpBackground.size             = m_moreToolsPanel.size - new Vector2(10, 10);

            UIPanel mtpContainer = m_moreToolsPanel.AddUIComponent <UIPanel>();
            mtpContainer.name = "mtpContainer";
            mtpContainer.autoLayoutDirection = LayoutDirection.Vertical;
            mtpContainer.autoLayoutPadding   = new RectOffset(0, 0, 0, 3);
            mtpContainer.autoLayout          = true;
            mtpContainer.relativePosition    = Vector3.zero;
            mtpContainer.size = m_moreToolsPanel.size;

            UIMoreTools.MoreButtons.Clear();

            if (MoveItTool.PO.Enabled)
            {
                UIMoreTools.MoreButtons.Add("MoveIt_ConvertToPOBtn", mtpContainer.AddUIComponent <UIButton>());
                UIButton convertToPO = UIMoreTools.MoreButtons["MoveIt_ConvertToPOBtn"];
                convertToPO.name             = "MoveIt_ConvertToPOBtn";
                convertToPO.atlas            = GetIconsAtlas();
                convertToPO.tooltip          = "Convert To PO - tries to convert all selected\nbuildings and props into Procedural Objects.";
                convertToPO.playAudioEvents  = true;
                convertToPO.size             = new Vector2(36, 36);
                convertToPO.normalBgSprite   = "OptionBase";
                convertToPO.hoveredBgSprite  = "OptionBaseHovered";
                convertToPO.pressedBgSprite  = "OptionBasePressed";
                convertToPO.disabledBgSprite = "OptionBaseDisabled";
                convertToPO.normalFgSprite   = "ConvertToPO";
                convertToPO.eventClicked    += UIMoreTools.MoreToolsClicked;
            }

            UIMoreTools.MoreButtons.Add("MoveIt_ResetObjectBtn", mtpContainer.AddUIComponent <UIButton>());
            UIButton resetObject = UIMoreTools.MoreButtons["MoveIt_ResetObjectBtn"];
            resetObject.name             = "MoveIt_ResetObjectBtn";
            resetObject.atlas            = GetIconsAtlas();
            resetObject.tooltip          = "Reset - Rebuild selected objects, repairing them and changing size/color variations.";
            resetObject.playAudioEvents  = true;
            resetObject.size             = new Vector2(36, 36);
            resetObject.normalBgSprite   = "OptionBase";
            resetObject.hoveredBgSprite  = "OptionBaseHovered";
            resetObject.pressedBgSprite  = "OptionBasePressed";
            resetObject.disabledBgSprite = "OptionBaseDisabled";
            resetObject.normalFgSprite   = "ResetObject";
            resetObject.eventClicked    += UIMoreTools.MoreToolsClicked;

            UIMoreTools.MoreButtons.Add("MoveIt_AlignMirrorBtn", mtpContainer.AddUIComponent <UIButton>());
            UIButton alignMirror = UIMoreTools.MoreButtons["MoveIt_AlignMirrorBtn"];
            alignMirror.name             = "MoveIt_AlignMirrorBtn";
            alignMirror.atlas            = GetIconsAtlas();
            alignMirror.tooltip          = "Align Mirror - Click on a network segment to set the\nmirror axis to create a mirrored copy of selection";
            alignMirror.playAudioEvents  = true;
            alignMirror.size             = new Vector2(36, 36);
            alignMirror.normalBgSprite   = "OptionBase";
            alignMirror.hoveredBgSprite  = "OptionBaseHovered";
            alignMirror.pressedBgSprite  = "OptionBasePressed";
            alignMirror.disabledBgSprite = "OptionBaseDisabled";
            alignMirror.normalFgSprite   = "AlignMirror";
            alignMirror.eventClicked    += UIMoreTools.MoreToolsClicked;

            UIMoreTools.MoreButtons.Add("MoveIt_AlignRandomBtn", mtpContainer.AddUIComponent <UIButton>());
            UIButton alignRandom = UIMoreTools.MoreButtons["MoveIt_AlignRandomBtn"];
            alignRandom.name             = "MoveIt_AlignRandomBtn";
            alignRandom.atlas            = GetIconsAtlas();
            alignRandom.tooltip          = "Random - Immediately rotate valid objects randomly";
            alignRandom.playAudioEvents  = true;
            alignRandom.size             = new Vector2(36, 36);
            alignRandom.normalBgSprite   = "OptionBase";
            alignRandom.hoveredBgSprite  = "OptionBaseHovered";
            alignRandom.pressedBgSprite  = "OptionBasePressed";
            alignRandom.disabledBgSprite = "OptionBaseDisabled";
            alignRandom.normalFgSprite   = "AlignRandom";
            alignRandom.eventClicked    += UIMoreTools.MoreToolsClicked;

            UIMoreTools.MoreButtons.Add("MoveIt_AlignGroupBtn", mtpContainer.AddUIComponent <UIButton>());
            UIButton alignGroup = UIMoreTools.MoreButtons["MoveIt_AlignGroupBtn"];
            alignGroup.name             = "MoveIt_AlignGroupBtn";
            alignGroup.atlas            = GetIconsAtlas();
            alignGroup.tooltip          = "Align as Group - click on an object to rotate\nselection around a central point to face\nobject's direction";
            alignGroup.playAudioEvents  = true;
            alignGroup.size             = new Vector2(36, 36);
            alignGroup.normalBgSprite   = "OptionBase";
            alignGroup.hoveredBgSprite  = "OptionBaseHovered";
            alignGroup.pressedBgSprite  = "OptionBasePressed";
            alignGroup.disabledBgSprite = "OptionBaseDisabled";
            alignGroup.normalFgSprite   = "AlignGroup";
            alignGroup.eventClicked    += UIMoreTools.MoreToolsClicked;

            UIMoreTools.MoreButtons.Add("MoveIt_AlignIndividualBtn", mtpContainer.AddUIComponent <UIButton>());
            UIButton alignIndividual = UIMoreTools.MoreButtons["MoveIt_AlignIndividualBtn"];
            alignIndividual.name             = "MoveIt_AlignIndividualBtn";
            alignIndividual.atlas            = GetIconsAtlas();
            alignIndividual.tooltip          = "Align In-Place - click on an object to\nrotate selected items to face that direction";
            alignIndividual.playAudioEvents  = true;
            alignIndividual.size             = new Vector2(36, 36);
            alignIndividual.normalBgSprite   = "OptionBase";
            alignIndividual.hoveredBgSprite  = "OptionBaseHovered";
            alignIndividual.pressedBgSprite  = "OptionBasePressed";
            alignIndividual.disabledBgSprite = "OptionBaseDisabled";
            alignIndividual.normalFgSprite   = "AlignIndividual";
            alignIndividual.eventClicked    += UIMoreTools.MoreToolsClicked;

            UIMoreTools.MoreButtons.Add("MoveIt_AlignSlopeBtn", mtpContainer.AddUIComponent <UIButton>());
            UIButton alignSlope = UIMoreTools.MoreButtons["MoveIt_AlignSlopeBtn"];
            alignSlope.name             = "MoveIt_AlignSlopeBtn";
            alignSlope.atlas            = GetIconsAtlas();
            alignSlope.tooltip          = "Align Slope - click on 2 objects to define\nthe slope axis to move selected objects\nup/down to that height";
            alignSlope.playAudioEvents  = true;
            alignSlope.size             = new Vector2(36, 36);
            alignSlope.normalBgSprite   = "OptionBase";
            alignSlope.hoveredBgSprite  = "OptionBaseHovered";
            alignSlope.pressedBgSprite  = "OptionBasePressed";
            alignSlope.disabledBgSprite = "OptionBaseDisabled";
            alignSlope.normalFgSprite   = "AlignSlope";
            alignSlope.eventClicked    += UIMoreTools.MoreToolsClicked;

            UIMoreTools.MoreButtons.Add("MoveIt_AlignTerrainHeightBtn", mtpContainer.AddUIComponent <UIButton>());
            UIButton alignTerrainHeight = UIMoreTools.MoreButtons["MoveIt_AlignTerrainHeightBtn"];
            alignTerrainHeight.name             = "MoveIt_AlignTerrainHeightBtn";
            alignTerrainHeight.atlas            = GetIconsAtlas();
            alignTerrainHeight.tooltip          = "Immediately Align objects to Terrain Height";
            alignTerrainHeight.playAudioEvents  = true;
            alignTerrainHeight.size             = new Vector2(36, 36);
            alignTerrainHeight.normalBgSprite   = "OptionBase";
            alignTerrainHeight.hoveredBgSprite  = "OptionBaseHovered";
            alignTerrainHeight.pressedBgSprite  = "OptionBasePressed";
            alignTerrainHeight.disabledBgSprite = "OptionBaseDisabled";
            alignTerrainHeight.normalFgSprite   = "AlignTerrainHeight";
            alignTerrainHeight.eventClicked    += UIMoreTools.MoreToolsClicked;

            UIMoreTools.MoreButtons.Add("MoveIt_AlignHeightBtn", mtpContainer.AddUIComponent <UIButton>());
            UIButton alignHeight = UIMoreTools.MoreButtons["MoveIt_AlignHeightBtn"];
            alignHeight.name             = "MoveIt_AlignHeightBtn";
            alignHeight.atlas            = GetIconsAtlas();
            alignHeight.tooltip          = "Align Height - click on an object to move\nselected objects up/down to that height";
            alignHeight.playAudioEvents  = true;
            alignHeight.size             = new Vector2(36, 36);
            alignHeight.normalBgSprite   = "OptionBase";
            alignHeight.hoveredBgSprite  = "OptionBaseHovered";
            alignHeight.pressedBgSprite  = "OptionBasePressed";
            alignHeight.disabledBgSprite = "OptionBaseDisabled";
            alignHeight.normalFgSprite   = "AlignHeight";
            alignHeight.eventClicked    += UIMoreTools.MoreToolsClicked;
            #endregion

            #region View Options
            m_viewOptions                  = AddUIComponent <UIPanel>();
            m_viewOptions.atlas            = UIUtils.GetAtlas("Ingame");
            m_viewOptions.backgroundSprite = "InfoPanelBack";
            m_viewOptions.size             = new Vector2(44f, 80f);

            m_viewOptions.absolutePosition = new Vector3(GetUIView().GetScreenResolution().x - m_viewOptions.width, absolutePosition.y - m_viewOptions.height - 8f);


            grid                 = m_viewOptions.AddUIComponent <UIMultiStateButton>();
            grid.atlas           = GetIconsAtlas();
            grid.name            = "MoveIt_GridView";
            grid.tooltip         = "Toggle Grid";
            grid.playAudioEvents = true;

            grid.size          = new Vector2(36, 36);
            grid.spritePadding = new RectOffset();

            grid.backgroundSprites[0].disabled = "OptionBaseDisabled";
            grid.backgroundSprites[0].hovered  = "OptionBaseHovered";
            grid.backgroundSprites[0].normal   = "OptionBase";
            grid.backgroundSprites[0].pressed  = "OptionBasePressed";

            grid.backgroundSprites.AddState();
            grid.backgroundSprites[1].disabled = "OptionBaseDisabled";
            grid.backgroundSprites[1].hovered  = "";
            grid.backgroundSprites[1].normal   = "OptionBaseFocused";
            grid.backgroundSprites[1].pressed  = "OptionBasePressed";

            grid.foregroundSprites[0].normal = "Grid";

            grid.foregroundSprites.AddState();
            grid.foregroundSprites[1].normal = "GridFocused";

            grid.relativePosition = new Vector3(4f, 4f);

            grid.activeStateIndex = 0;

            grid.eventClicked += (c, p) =>
            {
                MoveItTool.gridVisible = (grid.activeStateIndex == 1);
            };


            underground                 = m_viewOptions.AddUIComponent <UIMultiStateButton>();
            underground.atlas           = UIUtils.GetAtlas("Ingame");
            underground.name            = "MoveIt_UndergroundView";
            underground.tooltip         = "Toogle Underground View";
            underground.playAudioEvents = true;

            underground.size          = new Vector2(36, 36);
            underground.spritePadding = new RectOffset();

            underground.backgroundSprites[0].disabled = "OptionBaseDisabled";
            underground.backgroundSprites[0].hovered  = "OptionBaseHovered";
            underground.backgroundSprites[0].normal   = "OptionBase";
            underground.backgroundSprites[0].pressed  = "OptionBasePressed";

            underground.backgroundSprites.AddState();
            underground.backgroundSprites[1].disabled = "OptionBaseDisabled";
            underground.backgroundSprites[1].hovered  = "";
            underground.backgroundSprites[1].normal   = "OptionBaseFocused";
            underground.backgroundSprites[1].pressed  = "OptionBasePressed";

            underground.foregroundSprites[0].normal = "BulldozerOptionPipes";

            underground.foregroundSprites.AddState();
            underground.foregroundSprites[1].normal = "BulldozerOptionPipesFocused";

            underground.relativePosition = new Vector3(4f, 40f);

            underground.activeStateIndex = 0;

            underground.eventClicked += (c, p) =>
            {
                MoveItTool.tunnelVisible = (underground.activeStateIndex == 1);
            };


            if (MoveItTool.PO.Enabled)
            {
                PO_button                 = m_viewOptions.AddUIComponent <UIMultiStateButton>();
                PO_button.atlas           = GetIconsAtlas();
                PO_button.name            = "MoveIt_PO_button";
                PO_button.tooltip         = "Toggle Procedural Objects";
                PO_button.playAudioEvents = true;

                PO_button.size          = new Vector2(36, 36);
                PO_button.spritePadding = new RectOffset();

                PO_button.backgroundSprites[0].disabled = "OptionBaseDisabled";
                PO_button.backgroundSprites[0].hovered  = "OptionBaseHovered";
                PO_button.backgroundSprites[0].normal   = "OptionBase";
                PO_button.backgroundSprites[0].pressed  = "OptionBasePressed";

                PO_button.backgroundSprites.AddState();
                PO_button.backgroundSprites[1].disabled = "OptionBaseDisabled";
                PO_button.backgroundSprites[1].hovered  = "";
                PO_button.backgroundSprites[1].normal   = "OptionBaseFocused";
                PO_button.backgroundSprites[1].pressed  = "OptionBasePressed";

                PO_button.foregroundSprites[0].normal = "PO";

                PO_button.foregroundSprites.AddState();
                PO_button.foregroundSprites[1].normal = "POFocused";

                PO_button.relativePosition = new Vector3(4f, 76f);

                PO_button.activeStateIndex = 0;

                PO_button.eventClicked += (c, p) =>
                {
                    MoveItTool.PO.Active = (PO_button.activeStateIndex == 1);
                    if (MoveItTool.PO.Active)
                    {
                        if (MoveItTool.instance.ToolState == MoveItTool.ToolStates.Cloning)
                        {
                            MoveItTool.instance.StopCloning();
                        }

                        MoveItTool.PO.ToolEnabled();
                        ActionQueue.instance.Push(new TransformAction());
                    }
                    else
                    {
                        Action.ClearPOFromSelection();
                    }
                    UIFilters.POToggled();
                };

                m_viewOptions.height           += 36;
                m_viewOptions.absolutePosition += new Vector3(0, -36);
            }

            #endregion
        }