コード例 #1
0
        public static UIFloatField CreateField(string label, UIComponent parent)
        {
            UIFloatField field = new UIFloatField();

            field.panel = parent.AddUIComponent <UIPanel>();

            field.label                  = field.panel.AddUIComponent <UILabel>();
            field.label.text             = label;
            field.label.relativePosition = new Vector3(0, 2);

            field.textField = UIUtils.CreateTextField(field.panel);
            field.textField.relativePosition = new Vector3(field.label.width + 10, 0);

            field.buttonDown                  = UIUtils.CreateButton(field.panel);
            field.buttonDown.text             = "-";
            field.buttonDown.height           = 20;
            field.buttonDown.width            = 30;
            field.buttonDown.relativePosition = field.textField.relativePosition + new Vector3(field.textField.width + 10, 0);

            field.buttonUp                  = UIUtils.CreateButton(field.panel);
            field.buttonUp.text             = "+";
            field.buttonUp.height           = 20;
            field.buttonUp.width            = 30;
            field.buttonUp.relativePosition = field.buttonDown.relativePosition + new Vector3(field.buttonDown.width + 10, 0);

            field.panel.width  = field.buttonUp.relativePosition.x + field.buttonUp.width;
            field.panel.height = field.buttonUp.relativePosition.y + field.buttonUp.height;

            return(field);
        }
コード例 #2
0
        private void CreateComponents()
        {
            int headerHeight = 40;
            int labelWidth   = 130;

            // Label
            UILabel label = AddUIComponent <UILabel>();

            label.text             = "Vehicle Settings";
            label.relativePosition = new Vector3(WIDTH / 2 - label.width / 2, 10);

            // Drag handle
            UIDragHandle handle = AddUIComponent <UIDragHandle>();

            handle.target            = this;
            handle.constrainToScreen = true;
            handle.width             = WIDTH;
            handle.height            = headerHeight;
            handle.relativePosition  = Vector3.zero;

            Vector3 nextFreeRelPos = new Vector3(10, headerHeight + 10);

            // Offset front
            m_offsetFront = UIFloatField.CreateField("Offset front:", labelWidth, this, false);
            m_offsetFront.panel.relativePosition = nextFreeRelPos;
            nextFreeRelPos.y += 30;
            m_offsetFront.textField.eventTextChanged += (c, text) =>
            {
                if (m_vehicle != null)
                {
                    m_offsetFront.FloatFieldHandler(ref m_vehicle.m_attachOffsetFront);
                }
            };

            // Offset back
            m_offsetBack = UIFloatField.CreateField("Offset back:", labelWidth, this, false);
            m_offsetBack.panel.relativePosition = nextFreeRelPos;
            nextFreeRelPos.y += 30;
            m_offsetBack.textField.eventTextChanged += (c, text) =>
            {
                if (m_vehicle != null)
                {
                    m_offsetBack.FloatFieldHandler(ref m_vehicle.m_attachOffsetBack);
                }
            };

            // Acceleration
            m_acceleration = UIFloatField.CreateField("Acceleration:", labelWidth, this, false);
            m_acceleration.panel.relativePosition = nextFreeRelPos;
            nextFreeRelPos.y += 30;
            m_acceleration.textField.eventTextChanged += (c, text) =>
            {
                if (m_vehicle != null)
                {
                    m_acceleration.FloatFieldHandler(ref m_vehicle.m_acceleration);
                }
            };

            // Braking
            m_braking = UIFloatField.CreateField("Braking:", labelWidth, this, false);
            m_braking.panel.relativePosition = nextFreeRelPos;
            nextFreeRelPos.y += 30;
            m_braking.textField.eventTextChanged += (c, text) =>
            {
                if (m_vehicle != null)
                {
                    m_braking.FloatFieldHandler(ref m_vehicle.m_braking);
                }
            };

            // Nod
            m_nod = UIFloatField.CreateField("Nod:", labelWidth, this, false);
            m_nod.panel.relativePosition      = nextFreeRelPos;
            nextFreeRelPos.y                 += 30;
            m_nod.textField.eventTextChanged += (c, text) =>
            {
                if (m_vehicle != null)
                {
                    m_nod.FloatFieldHandler(ref m_vehicle.m_nodMultiplier);
                }
            };

            // Lean
            m_lean = UIFloatField.CreateField("Lean:", labelWidth, this, false);
            m_lean.panel.relativePosition = nextFreeRelPos;
            nextFreeRelPos.y += 30;
            m_lean.textField.eventTextChanged += (c, text) =>
            {
                if (m_vehicle != null)
                {
                    m_lean.FloatFieldHandler(ref m_vehicle.m_leanMultiplier);
                }
            };

            // Dampers
            m_dampers = UIFloatField.CreateField("Dampers:", labelWidth, this, false);
            m_dampers.panel.relativePosition = nextFreeRelPos;
            nextFreeRelPos.y += 30;
            m_dampers.textField.eventTextChanged += (c, text) =>
            {
                if (m_vehicle != null)
                {
                    m_dampers.FloatFieldHandler(ref m_vehicle.m_dampers);
                }
            };

            // Springs
            m_springs = UIFloatField.CreateField("Springs:", labelWidth, this, false);
            m_springs.panel.relativePosition = nextFreeRelPos;
            nextFreeRelPos.y += 30;
            m_springs.textField.eventTextChanged += (c, text) =>
            {
                if (m_vehicle != null)
                {
                    m_springs.FloatFieldHandler(ref m_vehicle.m_springs);
                }
            };

            // Turning
            m_turning = UIFloatField.CreateField("Turning:", labelWidth, this, false);
            m_turning.panel.relativePosition = nextFreeRelPos;
            nextFreeRelPos.y += 30;
            m_turning.textField.eventTextChanged += (c, text) =>
            {
                if (m_vehicle != null)
                {
                    m_turning.FloatFieldHandler(ref m_vehicle.m_turning);
                }
            };

            // Button
            m_applyToAll               = UIUtils.CreateButton(this);
            m_applyToAll.text          = "Apply to all";
            m_applyToAll.tooltip       = "Applies the settings, excluding offsets, to all vehicles";
            m_applyToAll.eventClicked += (c, p) =>
            {
                if (m_vehicle != null)
                {
                    ApplyToAll();
                }
            };
            m_applyToAll.relativePosition = new Vector3((WIDTH - m_applyToAll.width) / 2, HEIGHT - 40);
            m_applyToAll.width           += 20;
        }
コード例 #3
0
        private void CreateComponents()
        {
            int          headerHeight = 40;
            UIHelperBase uiHelper     = new UIHelper(this);

            // Label
            UILabel label = AddUIComponent <UILabel>();

            label.text             = "Vehicles";
            label.relativePosition = new Vector3(WIDTH / 2 - label.width / 2, 10);

            // Drag handle
            UIDragHandle handle = AddUIComponent <UIDragHandle>();

            handle.target            = this;
            handle.constrainToScreen = true;
            handle.width             = WIDTH;
            handle.height            = headerHeight;
            handle.relativePosition  = Vector3.zero;

            // Dropdown
            m_vehicleDropdown                            = UIUtils.CreateDropDown(this);
            m_vehicleDropdown.width                      = WIDTH - 20;
            m_vehicleDropdown.relativePosition           = new Vector3(10, headerHeight + 10);
            m_vehicleDropdown.eventSelectedIndexChanged += DropdownSelctionChanged;

            // Trailer panel
            m_trailerPanel                  = AddUIComponent <UIPanel>();
            m_trailerPanel.size             = Vector2.zero;
            m_trailerPanel.relativePosition = new Vector3(0, headerHeight + 50);
            UIHelper uiTrailerHelper = new UIHelper(m_trailerPanel);

            m_trailerPanelStart = m_trailerPanel.relativePosition;

            // Checkbox invert
            m_invertCheckbox = (UICheckBox)uiTrailerHelper.AddCheckbox("Is inverted", false, (b) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                if (m_vehicleDropdown.items.Length > 1)
                {
                    m_mainVehicleInfo.m_trailers[m_vehicleDropdown.selectedIndex - 1].m_invertProbability = b ? 100 : 0;
                    m_doorTool.UpdateMarkerVisibility();
                }
            });
            m_invertCheckbox.width            = WIDTH - 20;
            m_invertCheckbox.relativePosition = new Vector3(10, 0);

            // Button engine
            m_engineButton = UIUtils.CreateButton(m_trailerPanel);
            m_engineButton.eventClicked += (c, b) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                if (m_vehicleDropdown.items.Length > 1)
                {
                    m_mainVehicleInfo.m_trailers[m_vehicleDropdown.selectedIndex - 1].m_info = m_mainVehicleInfo;
                }
            };
            m_engineButton.text             = "Set engine";
            m_engineButton.tooltip          = "Sets this trailer to the same vehicle as the engine. Recommened to be used for the last trailer only.";
            m_engineButton.relativePosition = new Vector3(10, 30);

            // Button engine (copy)
            m_engineCopyButton = UIUtils.CreateButton(m_trailerPanel);
            m_engineCopyButton.eventClicked += (c, b) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                if (m_vehicleDropdown.items.Length > 1)
                {
                    m_mainVehicleInfo.m_trailers[m_vehicleDropdown.selectedIndex - 1].m_info = GetEngineAsTrailerUnchecked();
                }
            };
            m_engineCopyButton.width            = 140;
            m_engineCopyButton.text             = "Set engine (copy)";
            m_engineCopyButton.tooltip          = "Sets this trailer to a copy of the engine. This means that you can edit this trailer's settings without it affecting the actual engine.";
            m_engineCopyButton.relativePosition = new Vector3(WIDTH - 10 - m_engineCopyButton.width, 30);

            // Button insert trailer
            m_insertTrailerButton = UIUtils.CreateButton(m_trailerPanel);
            m_insertTrailerButton.eventClicked += (c, b) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                InsertTrailer(m_selectedVehicleInfo, m_vehicleDropdown.selectedIndex);
            };
            m_insertTrailerButton.text             = "Duplicate";
            m_insertTrailerButton.tooltip          = "Insert another trailer of this type after the currently selected trailer.";
            m_insertTrailerButton.relativePosition = new Vector3(10, 70);

            // Button remove trailer
            m_removeTrailerButton = UIUtils.CreateButton(m_trailerPanel);
            m_removeTrailerButton.eventClicked += (c, b) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                RemoveTrailer(m_vehicleDropdown.selectedIndex - 1);
            };
            m_removeTrailerButton.text             = "Remove";
            m_removeTrailerButton.tooltip          = "Remove this trailer from the vehicle.";
            m_removeTrailerButton.relativePosition = new Vector3((WIDTH - m_removeTrailerButton.width) / 2, 70);

            // Button change trailer
            m_changeTrailerButton = UIUtils.CreateButton(m_trailerPanel);
            m_changeTrailerButton.eventClicked += (c, b) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                if (m_selectRef.isVisible)
                {
                    return;
                }

                m_changeTrailerIndex = m_vehicleDropdown.selectedIndex - 1;     // 0 is the engine, so we do -1 to get trailer index
                m_selectRefReason    = LoadPanelReason.Trailer;
                AssetImporterAssetTemplate assetImporterAssetTemplate = m_selectRef.GetComponent <AssetImporterAssetTemplate>();
                assetImporterAssetTemplate.ReferenceCallback = new AssetImporterAssetTemplate.ReferenceCallbackDelegate(OnConfirmLoad);
                assetImporterAssetTemplate.Reset();
                // Get correct filter
                if (m_mainVehicleInfo.m_vehicleAI as TramBaseAI != null)
                {
                    assetImporterAssetTemplate.RefreshWithFilter(AssetImporterAssetTemplate.Filter.TramTrailer);
                }
                else if (m_mainVehicleInfo.m_vehicleAI as TrainAI != null)
                {
                    assetImporterAssetTemplate.RefreshWithFilter(AssetImporterAssetTemplate.Filter.TrainCars);
                }
                else if (m_mainVehicleInfo.m_vehicleAI as CarAI != null)
                {
                    assetImporterAssetTemplate.RefreshWithFilter(AssetImporterAssetTemplate.Filter.CarTrailers);
                }
                else if (m_mainVehicleInfo.m_vehicleAI as HelicopterAI != null)
                {
                    assetImporterAssetTemplate.RefreshWithFilter(AssetImporterAssetTemplate.Filter.HelicopterTrailer);
                }
                else
                {
                    assetImporterAssetTemplate.RefreshWithFilter(AssetImporterAssetTemplate.Filter.Vehicles);
                }

                m_selectRef.isVisible = true;
            };
            m_changeTrailerButton.text             = "Change";
            m_changeTrailerButton.tooltip          = "Select a trailer asset to use for this trailer.";
            m_changeTrailerButton.relativePosition = new Vector3(WIDTH - 10 - m_changeTrailerButton.width, 70);

            // Light panel
            m_lightPanel = AddUIComponent <UIPanel>();
            m_lightPanel.relativePosition = new Vector3(0, headerHeight + 160);
            m_lightPanel.size             = Vector2.zero;
            UIHelper uiLightsHelper = new UIHelper(m_lightPanel);

            m_lightPanelStart = m_lightPanel.relativePosition;

            // Checkbox passenger light
            m_passengerLightCheckbox = (UICheckBox)uiLightsHelper.AddCheckbox("Has passenger light", false, (b) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                if (m_selectedVehicleInfo != null)
                {
                    int index = Util.GetEffectIndex(m_selectedVehicleInfo, "Train Light Passenger");
                    if (b && index < 0)
                    {
                        // Add effect
                        Util.AddEffect(m_selectedVehicleInfo, "Train Light Passenger");
                    }
                    else if (!b && index >= 0)
                    {
                        // Remove effect
                        Util.RemoveEffect(m_selectedVehicleInfo, index);
                    }
                }
            });
            m_passengerLightCheckbox.width            = WIDTH - 20;
            m_passengerLightCheckbox.relativePosition = new Vector3(10, 0);

            // Lights dropdown
            m_lightDropdown                            = UIUtils.CreateDropDown(m_lightPanel);
            m_lightDropdown.width                      = WIDTH - 20;
            m_lightDropdown.relativePosition           = new Vector3(10, 30);
            m_lightDropdown.eventSelectedIndexChanged += LightSelectionChanged;

            // Light add button
            m_lightAddButton                  = UIUtils.CreateButton(m_lightPanel);
            m_lightAddButton.text             = "Add";
            m_lightAddButton.tooltip          = "Adds another light to the vehicle, if possible. Recommened to only use lights on front and/or rear vehicle(s).";
            m_lightAddButton.relativePosition = new Vector3(10, 70);
            m_lightAddButton.eventClicked    += (c, b) => {
                AddLight();
            };

            // Light remove button
            m_lightRemoveButton                  = UIUtils.CreateButton(m_lightPanel);
            m_lightRemoveButton.text             = "Remove";
            m_lightRemoveButton.tooltip          = "Removes the light with the highest index from the vehicle.";
            m_lightRemoveButton.relativePosition = new Vector3(WIDTH - m_lightRemoveButton.width - 10, 70);
            m_lightRemoveButton.eventClicked    += (c, b) => {
                RemoveLight();
            };

            // Light pos x
            m_lightPosXField = UIFloatField.CreateField("Pos X:", m_lightPanel);
            m_lightPosXField.panel.relativePosition      = new Vector3(10, 110);
            m_lightPosXField.textField.eventTextChanged += (c, s) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                if (m_selectedVehicleInfo != null && m_selectedVehicleInfo.m_lightPositions?.Length > 0)
                {
                    UIFloatField.FloatFieldHandler(m_lightPosXField.textField, s, ref m_selectedVehicleInfo.m_lightPositions[m_lightDropdown.selectedIndex].x);
                }
            };
            m_lightPosXField.buttonUp.eventClicked += (c, b) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                m_lightPosXField.SetValue(m_selectedVehicleInfo.m_lightPositions[m_lightDropdown.selectedIndex].x + 0.1f);
            };
            m_lightPosXField.buttonDown.eventClicked += (c, b) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                m_lightPosXField.SetValue(m_selectedVehicleInfo.m_lightPositions[m_lightDropdown.selectedIndex].x - 0.1f);
            };

            // Light pos y
            m_lightPosYField = UIFloatField.CreateField("Pos Y:", m_lightPanel);
            m_lightPosYField.panel.relativePosition      = new Vector3(10, 140);
            m_lightPosYField.textField.eventTextChanged += (c, s) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                if (m_selectedVehicleInfo != null && m_selectedVehicleInfo.m_lightPositions?.Length > 0)
                {
                    UIFloatField.FloatFieldHandler(m_lightPosYField.textField, s, ref m_selectedVehicleInfo.m_lightPositions[m_lightDropdown.selectedIndex].y);
                }
            };
            m_lightPosYField.buttonUp.eventClicked += (c, b) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                m_lightPosYField.SetValue(m_selectedVehicleInfo.m_lightPositions[m_lightDropdown.selectedIndex].y + 0.1f);
            };
            m_lightPosYField.buttonDown.eventClicked += (c, b) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                m_lightPosYField.SetValue(m_selectedVehicleInfo.m_lightPositions[m_lightDropdown.selectedIndex].y - 0.1f);
            };

            // Light pos z
            m_lightPosZField = UIFloatField.CreateField("Pos Z:", m_lightPanel);
            m_lightPosZField.panel.relativePosition      = new Vector3(10, 170);
            m_lightPosZField.textField.eventTextChanged += (c, s) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                if (m_selectedVehicleInfo != null && m_selectedVehicleInfo.m_lightPositions?.Length > 0)
                {
                    UIFloatField.FloatFieldHandler(m_lightPosZField.textField, s, ref m_selectedVehicleInfo.m_lightPositions[m_lightDropdown.selectedIndex].z);
                }
            };
            m_lightPosZField.buttonUp.eventClicked += (c, b) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                m_lightPosZField.SetValue(m_selectedVehicleInfo.m_lightPositions[m_lightDropdown.selectedIndex].z + 0.1f);
            };
            m_lightPosZField.buttonDown.eventClicked += (c, b) => {
                if (!m_checkingEvents)
                {
                    return;
                }

                m_lightPosZField.SetValue(m_selectedVehicleInfo.m_lightPositions[m_lightDropdown.selectedIndex].z - 0.1f);
            };

            // Effect panel button
            m_effectButton                  = m_saveButton = UIUtils.CreateButton(this);
            m_effectButton.text             = "Effect Editor";
            m_effectButton.width            = (WIDTH - 20);
            m_effectButton.relativePosition = new Vector3(10, m_lightPanel.relativePosition.y + 200);
            m_effectButton.eventClicked    += (c, b) =>
            {
                if (m_mainVehicleInfo != null && m_effectPanel != null)
                {
                    m_effectPanel.Show();
                }
            };

            // Save button
            m_saveButton                  = UIUtils.CreateButton(this);
            m_saveButton.text             = "Save Asset";
            m_saveButton.width            = (WIDTH - 30) / 2;
            m_saveButton.relativePosition = new Vector3(10, m_effectButton.relativePosition.y + m_effectButton.height + 10);
            m_saveButton.eventClicked    += (c, b) => {
                if (m_mainVehicleInfo != null && m_savePanel != null)
                {
                    m_savePanel.ShowForAsset(m_mainVehicleInfo);
                }
            };

            // Load button
            m_loadButton                  = UIUtils.CreateButton(this);
            m_loadButton.text             = "Load Asset";
            m_loadButton.width            = (WIDTH - 30) / 2;
            m_loadButton.relativePosition = new Vector3(20 + m_saveButton.width, m_effectButton.relativePosition.y + m_effectButton.height + 10);
            m_loadButton.eventClicked    += (c, b) =>
            {
                if (m_selectRef.isVisible)
                {
                    return;
                }

                m_selectRefReason = LoadPanelReason.Full;
                AssetImporterAssetTemplate assetImporterAssetTemplate = m_selectRef.GetComponent <AssetImporterAssetTemplate>();
                assetImporterAssetTemplate.ReferenceCallback = new AssetImporterAssetTemplate.ReferenceCallbackDelegate(OnConfirmLoad);
                assetImporterAssetTemplate.Reset();
                assetImporterAssetTemplate.RefreshWithFilter(AssetImporterAssetTemplate.Filter.Vehicles);
                m_selectRef.isVisible = true;
            };

            m_checkingEvents = true;
        }
コード例 #4
0
        private void CreateComponents()
        {
            int headerHeight = 40;

            // Label
            UILabel label = AddUIComponent <UILabel>();

            label.text             = "Doors";
            label.relativePosition = new Vector3(WIDTH / 2 - label.width / 2, 10);

            // Drag handle
            UIDragHandle handle = AddUIComponent <UIDragHandle>();

            handle.target            = this;
            handle.constrainToScreen = true;
            handle.width             = WIDTH;
            handle.height            = headerHeight;
            handle.relativePosition  = Vector3.zero;

            // Door selection
            label                  = AddUIComponent <UILabel>();
            label.text             = "Door:";
            label.relativePosition = new Vector3(10, headerHeight + 15);

            m_doorDropdown                            = UIUtils.CreateDropDown(this);
            m_doorDropdown.width                      = WIDTH - 30 - label.width;
            m_doorDropdown.relativePosition           = new Vector3(label.relativePosition.x + label.width + 10, headerHeight + 10);
            m_doorDropdown.eventSelectedIndexChanged += OnDoorSelectionChanged;

            // Door pos fields
            m_posFieldX = UIFloatField.CreateField("Pos X:", this);
            m_posFieldX.panel.relativePosition      = new Vector3(10, headerHeight + 90);
            m_posFieldX.textField.eventTextChanged += (c, s) => {
                if (!m_checkEvents || m_selectedInfo == null || m_selectedInfo.m_doors == null || m_selectedInfo.m_doors.Length == 0)
                {
                    return;
                }

                UIFloatField.FloatFieldHandler(m_posFieldX.textField, s, ref m_selectedInfo.m_doors[m_doorDropdown.selectedIndex].m_location.x);
                UpdateMarkerVisibility();
            };
            m_posFieldX.buttonUp.eventClicked += (c, b) => {
                if (!m_checkEvents || m_selectedInfo == null || m_selectedInfo.m_doors == null || m_selectedInfo.m_doors.Length == 0)
                {
                    return;
                }

                m_posFieldX.SetValue(m_selectedInfo.m_doors[m_doorDropdown.selectedIndex].m_location.x + 0.1f);
            };
            m_posFieldX.buttonDown.eventClicked += (c, b) => {
                if (!m_checkEvents || m_selectedInfo == null || m_selectedInfo.m_doors == null || m_selectedInfo.m_doors.Length == 0)
                {
                    return;
                }

                m_posFieldX.SetValue(m_selectedInfo.m_doors[m_doorDropdown.selectedIndex].m_location.x - 0.1f);
            };


            m_posFieldY = UIFloatField.CreateField("Pos Y:", this);
            m_posFieldY.panel.relativePosition      = new Vector3(10, headerHeight + 120);
            m_posFieldY.textField.eventTextChanged += (c, s) => {
                if (!m_checkEvents || m_selectedInfo == null || m_selectedInfo.m_doors == null || m_selectedInfo.m_doors.Length == 0)
                {
                    return;
                }

                UIFloatField.FloatFieldHandler(m_posFieldY.textField, s, ref m_selectedInfo.m_doors[m_doorDropdown.selectedIndex].m_location.y);
                UpdateMarkerVisibility();
            };
            m_posFieldY.buttonUp.eventClicked += (c, b) => {
                if (!m_checkEvents || m_selectedInfo == null || m_selectedInfo.m_doors == null || m_selectedInfo.m_doors.Length == 0)
                {
                    return;
                }

                m_posFieldY.SetValue(m_selectedInfo.m_doors[m_doorDropdown.selectedIndex].m_location.y + 0.1f);
            };
            m_posFieldY.buttonDown.eventClicked += (c, b) => {
                if (!m_checkEvents || m_selectedInfo == null || m_selectedInfo.m_doors == null || m_selectedInfo.m_doors.Length == 0)
                {
                    return;
                }

                m_posFieldY.SetValue(m_selectedInfo.m_doors[m_doorDropdown.selectedIndex].m_location.y - 0.1f);
            };


            m_posFieldZ = UIFloatField.CreateField("Pos Z:", this);
            m_posFieldZ.panel.relativePosition      = new Vector3(10, headerHeight + 150);
            m_posFieldZ.textField.eventTextChanged += (c, s) => {
                if (!m_checkEvents || m_selectedInfo == null || m_selectedInfo.m_doors == null || m_selectedInfo.m_doors.Length == 0)
                {
                    return;
                }

                UIFloatField.FloatFieldHandler(m_posFieldZ.textField, s, ref m_selectedInfo.m_doors[m_doorDropdown.selectedIndex].m_location.z);
                UpdateMarkerVisibility();
            };
            m_posFieldZ.buttonUp.eventClicked += (c, b) => {
                if (!m_checkEvents || m_selectedInfo == null || m_selectedInfo.m_doors == null || m_selectedInfo.m_doors.Length == 0)
                {
                    return;
                }

                m_posFieldZ.SetValue(m_selectedInfo.m_doors[m_doorDropdown.selectedIndex].m_location.z + 0.1f);
            };
            m_posFieldZ.buttonDown.eventClicked += (c, b) => {
                if (!m_checkEvents || m_selectedInfo == null || m_selectedInfo.m_doors == null || m_selectedInfo.m_doors.Length == 0)
                {
                    return;
                }

                m_posFieldZ.SetValue(m_selectedInfo.m_doors[m_doorDropdown.selectedIndex].m_location.z - 0.1f);
            };

            // Add and remove buttons
            m_addButton                  = UIUtils.CreateButton(this);
            m_addButton.text             = "Add";
            m_addButton.relativePosition = new Vector3(WIDTH / 2 - m_addButton.width - 10, headerHeight + 50);
            m_addButton.eventClicked    += (c, b) => {
                if (!m_checkEvents || m_selectedInfo == null)
                {
                    return;
                }

                TryAddDoor();
            };

            m_removeButton                  = UIUtils.CreateButton(this);
            m_removeButton.text             = "Remove";
            m_removeButton.relativePosition = new Vector3(WIDTH / 2 + 10, headerHeight + 50);
            m_removeButton.eventClicked    += (c, b) => {
                if (!m_checkEvents || m_selectedInfo == null)
                {
                    return;
                }

                TryRemoveDoor();
            };

            //
            m_checkEvents = true;
        }