Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 3
0
 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);
        }
Ejemplo n.º 5
0
        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();
 }