private void ApplyToAll() { if (m_leadVehicle != null) { // apply to engine m_acceleration.FloatFieldHandler(ref m_leadVehicle.m_acceleration); m_braking.FloatFieldHandler(ref m_leadVehicle.m_braking); m_nod.FloatFieldHandler(ref m_leadVehicle.m_nodMultiplier); m_lean.FloatFieldHandler(ref m_leadVehicle.m_leanMultiplier); m_dampers.FloatFieldHandler(ref m_leadVehicle.m_dampers); m_springs.FloatFieldHandler(ref m_leadVehicle.m_springs); m_turning.FloatFieldHandler(ref m_leadVehicle.m_turning); // apply to trailers if (m_leadVehicle.m_trailers != null) { foreach (var trailer in m_leadVehicle.m_trailers) { m_acceleration.FloatFieldHandler(ref trailer.m_info.m_acceleration); m_braking.FloatFieldHandler(ref trailer.m_info.m_braking); m_nod.FloatFieldHandler(ref trailer.m_info.m_nodMultiplier); m_lean.FloatFieldHandler(ref trailer.m_info.m_leanMultiplier); m_dampers.FloatFieldHandler(ref trailer.m_info.m_dampers); m_springs.FloatFieldHandler(ref trailer.m_info.m_springs); m_turning.FloatFieldHandler(ref trailer.m_info.m_turning); } } } }
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; }
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; }
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; }