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); }
public void CreateComponents() { m_nameLabel = AddUIComponent <UILabel>(); m_nameLabel.relativePosition = new Vector3(0, 0); float nextFreeY = 25f; float yPadding = 5f; float xPaddingStart = 0f; float xPadding = 10f; // Wrapper m_wrapperCheckbox = UIUtils.CreateCheckBox(this); m_wrapperCheckbox.relativePosition = new Vector3(xPaddingStart, nextFreeY); m_wrapperCheckbox.text = "Use Wrapper"; m_wrapperCheckbox.tooltip = "Wrappers are required for non-vehicle lights and positioning"; m_wrapperCheckbox.eventCheckChanged += (c, b) => { OnWrapperCheck(b); }; nextFreeY += m_wrapperCheckbox.height + yPadding; // Direction m_posPanel = AddUIComponent <UIPanel>(); m_posPanel.relativePosition = new Vector3(xPaddingStart, nextFreeY); // min speed m_minSpeed = UIFloatField.CreateField("Min Speed:", m_posPanel); m_minSpeed.panel.relativePosition = new Vector3(0, 0); m_minSpeed.textField.eventTextChanged += (c, s) => { if (!m_allowEditing) { return; } float x = m_effect.MinSpeed; m_effect.MinSpeed = UIFloatField.FloatFieldHandler(m_minSpeed.textField, s, ref x); }; m_minSpeed.buttonUp.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_minSpeed.SetValue(m_effect.MinSpeed + 5f); }; m_minSpeed.buttonDown.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_minSpeed.SetValue(m_effect.MinSpeed - 5f); }; m_minSpeed.textField.tooltip = "Minimum speed the vehicle has to go for this effect to show (km/h)"; // pos x m_posX = UIFloatField.CreateField("Pos X:", m_posPanel); m_posX.panel.relativePosition = new Vector3(0, 30); m_posX.textField.eventTextChanged += (c, s) => { if (!m_allowEditing) { return; } float x = m_effect.Position.X; m_effect.Position.X = UIFloatField.FloatFieldHandler(m_posX.textField, s, ref x); }; m_posX.buttonUp.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_posX.SetValue(m_effect.Position.X + 0.1f); }; m_posX.buttonDown.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_posX.SetValue(m_effect.Position.X - 0.1f); }; // pos y m_posY = UIFloatField.CreateField("Pos Y:", m_posPanel); m_posY.panel.relativePosition = new Vector3(0, 60); m_posY.textField.eventTextChanged += (c, s) => { if (!m_allowEditing) { return; } float x = m_effect.Position.Y; m_effect.Position.Y = UIFloatField.FloatFieldHandler(m_posY.textField, s, ref x); }; m_posY.buttonUp.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_posY.SetValue(m_effect.Position.Y + 0.1f); }; m_posY.buttonDown.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_posY.SetValue(m_effect.Position.Y - 0.1f); }; // pos z m_posZ = UIFloatField.CreateField("Pos Z:", m_posPanel); m_posZ.panel.relativePosition = new Vector3(0, 90); m_posZ.textField.eventTextChanged += (c, s) => { if (!m_allowEditing) { return; } float x = m_effect.Position.Z; m_effect.Position.Z = UIFloatField.FloatFieldHandler(m_posZ.textField, s, ref x); }; m_posZ.buttonUp.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_posZ.SetValue(m_effect.Position.Z + 0.1f); }; m_posZ.buttonDown.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_posZ.SetValue(m_effect.Position.Z - 0.1f); }; m_posPanel.size = new Vector2(m_minSpeed.panel.width, m_posZ.panel.relativePosition.y + m_posZ.panel.height); // Direction m_dirPanel = AddUIComponent <UIPanel>(); m_dirPanel.relativePosition = new Vector3(xPaddingStart + m_posPanel.size.x + xPadding, nextFreeY); // max speed m_maxSpeed = UIFloatField.CreateField("Max Speed:", m_dirPanel); m_maxSpeed.panel.relativePosition = new Vector3(0, 0); m_maxSpeed.textField.eventTextChanged += (c, s) => { if (!m_allowEditing) { return; } float x = m_effect.MaxSpeed; m_effect.MaxSpeed = UIFloatField.FloatFieldHandler(m_maxSpeed.textField, s, ref x); }; m_maxSpeed.buttonUp.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_maxSpeed.SetValue(m_effect.MaxSpeed + 5f); }; m_maxSpeed.buttonDown.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_maxSpeed.SetValue(m_effect.MaxSpeed - 5f); }; m_maxSpeed.textField.tooltip = "Maximum speed the vehicle is allowed to go for this effect to show (km/h)"; // pos x m_dirX = UIFloatField.CreateField("Dir X:", m_dirPanel); m_dirX.panel.relativePosition = new Vector3(0, 30); m_dirX.textField.eventTextChanged += (c, s) => { if (!m_allowEditing) { return; } float x = m_effect.Direction.X; m_effect.Direction.X = UIFloatField.FloatFieldHandler(m_dirX.textField, s, ref x); }; m_dirX.buttonUp.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_dirX.SetValue(m_effect.Direction.X + 0.1f); }; m_dirX.buttonDown.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_dirX.SetValue(m_effect.Direction.X - 0.1f); }; // dir y m_dirY = UIFloatField.CreateField("Dir Y:", m_dirPanel); m_dirY.panel.relativePosition = new Vector3(0, 60); m_dirY.textField.eventTextChanged += (c, s) => { if (!m_allowEditing) { return; } float x = m_effect.Direction.Y; m_effect.Direction.Y = UIFloatField.FloatFieldHandler(m_dirY.textField, s, ref x); }; m_dirY.buttonUp.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_dirY.SetValue(m_effect.Direction.Y + 0.1f); }; m_dirY.buttonDown.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_dirY.SetValue(m_effect.Direction.Y - 0.1f); }; // dir z m_dirZ = UIFloatField.CreateField("Dir Z:", m_dirPanel); m_dirZ.panel.relativePosition = new Vector3(0, 90); m_dirZ.textField.eventTextChanged += (c, s) => { if (!m_allowEditing) { return; } float x = m_effect.Direction.Z; m_effect.Direction.Z = UIFloatField.FloatFieldHandler(m_dirZ.textField, s, ref x); }; m_dirZ.buttonUp.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_dirZ.SetValue(m_effect.Direction.Z + 0.1f); }; m_dirZ.buttonDown.eventClicked += (c, b) => { if (!m_allowEditing) { return; } m_dirZ.SetValue(m_effect.Direction.Z - 0.1f); }; m_dirPanel.size = new Vector2(m_maxSpeed.panel.width, m_dirZ.panel.relativePosition.y + m_dirZ.panel.height); nextFreeY += m_dirPanel.height + yPadding; // Replacment UILabel label = AddUIComponent <UILabel>(); label.text = "Replaces"; label.relativePosition = new Vector3(0, nextFreeY); nextFreeY += label.height + yPadding; m_replacementField = UIUtils.CreateTextField(this); m_replacementField.width = 250; m_replacementField.relativePosition = new Vector3(xPaddingStart, nextFreeY); m_replacementField.eventTextChanged += (c, t) => { OnReplacmentTextChanged(t); }; m_replacementField.tooltip = "Effect this effect will replace"; m_replacementButton = UIUtils.CreateButton(this); m_replacementButton.text = "Search"; m_replacementButton.relativePosition = new Vector3(xPaddingStart + m_replacementField.width + xPadding, nextFreeY); m_replacementButton.eventClicked += (c, b) => { if (!UIEffectListPanel.main.isVisible) { UIEffectListPanel.main.Show((info) => { m_replacementField.text = info.name; }); } }; nextFreeY += Mathf.Max(m_replacementButton.height, m_replacementField.height) + yPadding; // Fallback label = AddUIComponent <UILabel>(); label.text = "Fallback"; label.relativePosition = new Vector3(0, nextFreeY); nextFreeY += label.height + yPadding; m_fallbackField = UIUtils.CreateTextField(this); m_fallbackField.width = 250; m_fallbackField.relativePosition = new Vector3(xPaddingStart, nextFreeY); m_fallbackField.eventTextChanged += (c, t) => { OnFallbackTextChanged(t); }; m_fallbackField.tooltip = "Effect that is used if this effect can't be found."; m_fallbackButton = UIUtils.CreateButton(this); m_fallbackButton.text = "Search"; m_fallbackButton.relativePosition = new Vector3(xPaddingStart + m_fallbackField.width + xPadding, nextFreeY); m_fallbackButton.eventClicked += (c, b) => { if (!UIEffectListPanel.main.isVisible) { UIEffectListPanel.main.Show((info) => { m_fallbackField.text = info.name; }); } }; nextFreeY += Mathf.Max(m_fallbackButton.height, m_fallbackField.height) + yPadding; // Fags label = AddUIComponent <UILabel>(); label.text = "Vehicle Flags"; label.relativePosition = new Vector3(0, nextFreeY); nextFreeY += label.height + yPadding; m_buttonFlagsRequired = UIUtils.CreateButton(this); m_buttonFlagsRequired.text = "Required Flags"; m_buttonFlagsRequired.width = 150; m_buttonFlagsRequired.relativePosition = new Vector3(xPaddingStart, nextFreeY); m_buttonFlagsRequired.eventClicked += (c, b) => { if (m_mainPanel.m_flagsPanel != null && !m_mainPanel.m_flagsPanel.isVisible) { m_mainPanel.m_flagsPanel.Show("Required Flags", (Vehicle.Flags)m_effect.RequiredFlags, (flags) => { if (!m_allowEditing) { return; } m_effect.RequiredFlags = (VehicleEffectsDefinition.Effect.Flags)flags; Display(m_effect); }, m_allowEditing); } }; m_buttonFlagsForbidden = UIUtils.CreateButton(this); m_buttonFlagsForbidden.text = "Forbidden Flags"; m_buttonFlagsForbidden.width = 150; m_buttonFlagsForbidden.relativePosition = new Vector3(xPaddingStart + xPadding + m_buttonFlagsRequired.width, nextFreeY); m_buttonFlagsForbidden.eventClicked += (c, b) => { if (m_mainPanel.m_flagsPanel != null && !m_mainPanel.m_flagsPanel.isVisible) { m_mainPanel.m_flagsPanel.Show("Forbidden Flags", (Vehicle.Flags)m_effect.ForbiddenFlags, (flags) => { if (!m_allowEditing) { return; } m_effect.ForbiddenFlags = (VehicleEffectsDefinition.Effect.Flags)flags; Display(m_effect); }, m_allowEditing); } }; nextFreeY += m_buttonFlagsForbidden.height + yPadding; }