public static EffectInfo CreateEffect(VehicleEffectsDefinition.Effect effectDef, EffectInfo baseEffect) { if (gameObject == null) { Logging.LogError("Tried to create EffectInfo for " + effectName + " but GameObject was not created!"); return(null); } VehicleEffectWrapper effectWrapper = null; var effectParameters = new VehicleEffectWrapper.VehicleEffectParams(); effectParameters.m_name = ((effectDef.Replacment == null) ? effectDef.Name : effectDef.Replacment) + ((effectDef.Base != null) ? " - " + effectDef.Base : ""); effectParameters.m_position = effectDef.Position?.ToUnityVector() ?? Vector3.zero; effectParameters.m_direction = effectDef.Direction?.ToUnityVector() ?? Vector3.zero; effectParameters.m_maxSpeed = Util.SpeedKmHToEffect(effectDef.MaxSpeed); effectParameters.m_minSpeed = Util.SpeedKmHToEffect(effectDef.MinSpeed); createdEffects.TryGetValue(effectParameters, out effectWrapper); if (effectWrapper == null) { effectWrapper = gameObject.AddComponent <VehicleEffectWrapper>(); if (baseEffect is LightEffect) { var lightEffect = baseEffect as LightEffect; // There are some cases in which the effect won't render, so we need a copy that can be rendered the way we need it if (lightEffect.m_batchedLight || lightEffect.m_positionIndex >= 0) { var effect2 = GetModifiedEffect(lightEffect.name) as LightEffect; if (effect2 == null) { GameObject lightObject = new GameObject(lightEffect.name + " - Modified"); lightObject.transform.parent = gameObject.transform; var templateLight = lightEffect.GetComponent <Light>(); var light = lightObject.AddComponent <Light>(); Util.CopyLight(templateLight, light); effect2 = Util.CopyLightEffect(lightEffect, lightObject.AddComponent <LightEffect>()); effect2.m_batchedLight = false; effect2.m_positionIndex = -1; effect2.m_position = Vector3.zero; modifiedEffects.Add(lightEffect.name, effect2); } baseEffect = effect2; } } effectWrapper.m_wrappedEffect = baseEffect; effectWrapper.m_params = effectParameters; createdEffects.Add(effectParameters, effectWrapper); } return(effectWrapper); }
public void Display(VehicleEffectsDefinition.Effect effect) { if (m_buttonFlagsForbidden == null) { return; } m_effect = effect; m_buttonFlagsRequired.tooltip = m_effect.RequiredFlags.ToString(); m_buttonFlagsForbidden.tooltip = m_effect.ForbiddenFlags.ToString(); string effectName = m_effect.Base ?? m_effect.Replacment ?? m_effect.Name; bool usesWrapper = m_effect.Base != null; m_wrapperCheckbox.isChecked = usesWrapper; // Update fields if (usesWrapper) { m_minSpeed.SetValue(m_effect.MinSpeed); m_maxSpeed.SetValue(m_effect.MaxSpeed); m_posX.SetValue(m_effect.Position.X); m_posY.SetValue(m_effect.Position.Y); m_posZ.SetValue(m_effect.Position.Z); m_dirX.SetValue(m_effect.Direction.X); m_dirY.SetValue(m_effect.Direction.Y); m_dirZ.SetValue(m_effect.Direction.Z); } m_posPanel.isVisible = usesWrapper; m_dirPanel.isVisible = usesWrapper; if (m_effect.Replacment != null) { m_replacementField.text = m_effect.Name; } else { m_replacementField.text = ""; } if (m_effect.Fallback != null) { m_fallbackField.text = m_effect.Fallback; } else { m_fallbackField.text = ""; } m_nameLabel.text = effectName; }
public void AddEffect(VehicleEffectsDefinition.Effect effectDef) { if (m_vehicle != null) { VehicleEffectsDefinition.Vehicle vehicle = FindVehicleDefinition(m_vehicle); if (vehicle != null) { vehicle.Effects.Add(effectDef); PopulateVEList(); } } }
public static EffectInfo CreateEffect(VehicleEffectsDefinition.Effect effectDef, MultiEffect.SubEffect[] subEffects, float duration, bool useSimulationTime) { if (gameObject == null) { Logging.LogError("Tried to create EffectInfo for " + effectName + " but GameObject was not created!"); return(null); } var effectParameters = new VehicleEffectWrapper.VehicleEffectParams(); effectParameters.m_name = ((effectDef.Replacment == null) ? effectDef.Name : effectDef.Replacment) + ((effectDef.Base != null) ? " - " + effectDef.Base : ""); effectParameters.m_position = effectDef.Position?.ToUnityVector() ?? Vector3.zero; effectParameters.m_direction = effectDef.Direction?.ToUnityVector() ?? Vector3.zero; effectParameters.m_maxSpeed = Util.SpeedKmHToEffect(effectDef.MaxSpeed); effectParameters.m_minSpeed = Util.SpeedKmHToEffect(effectDef.MinSpeed); CustomMultiEffect effect = null; var i = 0; while (effect == null && i < createdEffects.Count) { if (createdEffects[i].m_params.Equals(effectParameters)) { if (createdEffects[i].m_duration == duration && createdEffects[i].m_useSimulationTime == useSimulationTime) { if (createdEffects[i].m_effects.SequenceEqual(subEffects)) { effect = createdEffects[i]; } } } i++; } if (effect == null) { effect = gameObject.AddComponent <CustomMultiEffect>(); effect.m_params = effectParameters; effect.m_duration = duration; effect.m_useSimulationTime = useSimulationTime; effect.m_effects = subEffects; createdEffects.Add(effect); } return(effect); }
private void CreateComponents() { int headerHeight = 40; // Label UILabel label = AddUIComponent <UILabel>(); label.text = "Effects"; 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; // close button UIButton closeButton = UIUtils.CreateButton(this); closeButton.size = new Vector2(30, 30); closeButton.normalBgSprite = "buttonclose"; closeButton.hoveredBgSprite = "buttonclosehover"; closeButton.pressedBgSprite = "buttonclosepressed"; closeButton.relativePosition = new Vector3(WIDTH - 35, 5); closeButton.eventClicked += (c, p) => { isVisible = false; }; // Dropdown m_vehicleDropdown = UIUtils.CreateDropDown(this); m_vehicleDropdown.width = 400; m_vehicleDropdown.relativePosition = new Vector3(10, headerHeight + 10); m_vehicleDropdown.eventSelectedIndexChanged += OnDropdownIndexChanged; m_vehicleDropdown.selectedIndex = -1; float listHeight = HEIGHT - headerHeight - m_vehicleDropdown.height - 30 - 50; float listWidth = 300; float padding = 10; float optionsWidth = WIDTH - (listWidth - 3 * padding); float listTop = headerHeight + 20 + m_vehicleDropdown.height; // Fastlist for Vehicle Effects definitions m_veEffectList = UIFastList.Create <UIEffectDefinitionRow>(this); m_veEffectList.backgroundSprite = "UnlockingPanel"; m_veEffectList.width = listWidth; m_veEffectList.height = listHeight; m_veEffectList.relativePosition = new Vector3(padding, listTop); m_veEffectList.canSelect = true; m_veEffectList.eventSelectedIndexChanged += OnVEEffectSelectionChanged; // Create options panel m_optionsPanel = AddUIComponent <UIEffectOptionsPanel>(); m_optionsPanel.width = optionsWidth; m_optionsPanel.height = listHeight; m_optionsPanel.relativePosition = new Vector3(listWidth + padding * 2, listTop); m_optionsPanel.m_mainPanel = this; m_optionsPanel.CreateComponents(); float footerX = 10; // Button to add effects (footer) m_addEffectButton = UIUtils.CreateButton(this); m_addEffectButton.text = "Add effect"; m_addEffectButton.width = 120; m_addEffectButton.relativePosition = new Vector3(footerX, HEIGHT - 40); m_addEffectButton.eventClicked += (c, b) => { if (!m_effectListPanel.isVisible) { m_effectListPanel.Show((info) => { VehicleEffectsDefinition.Effect effect = new VehicleEffectsDefinition.Effect(); effect.Name = info.name; AddEffect(effect); }); } }; footerX += m_addEffectButton.width + 10; // Button to save definition (footer) m_saveDefinitionButton = UIUtils.CreateButton(this); m_saveDefinitionButton.text = "Save XML"; m_saveDefinitionButton.width = 120; m_saveDefinitionButton.relativePosition = new Vector3(footerX, HEIGHT - 40); m_saveDefinitionButton.eventClicked += (c, b) => { if (!m_savePanel.isVisible) { m_savePanel.Show(Util.GetPackageName(m_vehicles[0]), GetCleanedDefinition()); } }; footerX += m_saveDefinitionButton.width + 10; // Button to load definition (footer) m_loadDefinitionButton = UIUtils.CreateButton(this); m_loadDefinitionButton.text = "Load XML"; m_loadDefinitionButton.width = 120; m_loadDefinitionButton.relativePosition = new Vector3(footerX, HEIGHT - 40); m_loadDefinitionButton.eventClicked += (c, b) => { if (!m_loadPanel.isVisible) { m_loadPanel.Show((definition) => { if (definition != null) { m_definition = definition; AddMissingSceneVehicles(); PopulateVEList(); } }); } }; footerX += m_loadDefinitionButton.width + 10; // Button to preview definition (footer) m_previewButton = UIUtils.CreateButton(this); m_previewButton.text = "Enable Preview"; m_previewButton.width = 180; m_previewButton.relativePosition = new Vector3(WIDTH - 10 - m_previewButton.width, HEIGHT - 40); m_previewButton.eventClicked += (c, b) => { if (m_previewer.IsPreviewing) { m_previewButton.text = "Enable Preview"; m_previewer.RevertPreview(); } else { if (m_previewer.ApplyPreview(GetCleanedDefinition(), "Vehicle Effects Previewer")) { m_previewButton.text = "Disable Preview"; } } }; }
public new void Hide() { m_effect = null; base.Hide(); }