Пример #1
0
        public override void OnInspectorGUI()
        {
            serializedObject.Update();
            TrailPreset TrailSettingsScript = target as TrailPreset;


            EditorGUILayout.PropertyField(m_TrailColor);
            EditorGUILayout.PropertyField(m_UseOnlyAlpha);
            EditorGUILayout.PropertyField(m_SpecialMat);



            GUILayout.Space(15);
            EditorGUILayout.PropertyField(m_TrailElementDurationCondition);
            switch (TrailSettingsScript.m_TrailElementDurationCondition)
            {
            case TrailElementDurationCondition.Time:
                EditorGUILayout.PropertyField(m_TrailDuration);
                break;

            case TrailElementDurationCondition.ElementCount:
                EditorGUILayout.PropertyField(m_TrailMaxLength);
                EditorGUILayout.PropertyField(m_TrailDuration);
                break;
            }

            GUILayout.Space(15);
            EditorGUILayout.PropertyField(m_TrailElementSpawnCondition);
            switch (TrailSettingsScript.m_TrailElementSpawnCondition)
            {
            case TrailElementSpawnCondition.Time:
                EditorGUILayout.PropertyField(m_TimeBetweenSpawns);
                break;

            case TrailElementSpawnCondition.FrameCount:
                EditorGUILayout.PropertyField(m_FramesBetweenSpawns);
                break;

            case TrailElementSpawnCondition.Distance:
                EditorGUILayout.PropertyField(m_DistanceBetweenSpawns);
                EditorGUILayout.PropertyField(m_DistanceCorrection);
                break;
            }

            GUILayout.Space(15);
            EditorGUILayout.PropertyField(m_UseSizeModifier);
            if (TrailSettingsScript.m_UseSizeModifier)
            {
                EditorGUILayout.PropertyField(m_TrailSizeX);
                EditorGUILayout.PropertyField(m_TrailSizeY);
            }

            GUILayout.Space(15);
            EditorGUILayout.PropertyField(m_UsePositionModifier);
            if (TrailSettingsScript.m_UsePositionModifier)
            {
                EditorGUILayout.PropertyField(m_TrailPositionX);
                EditorGUILayout.PropertyField(m_TrailPositionY);
            }

            serializedObject.ApplyModifiedProperties();
        }
Пример #2
0
 /// <summary>
 /// Modify the trail effect
 /// </summary>
 /// /// <param name="preset">The trail preset you want to set</param>
 public void SetTrailPreset(TrailPreset preset)
 {
     m_PreviousTrailPreset = m_CurrentTrailPreset;
     m_CurrentTrailPreset  = preset;
 }
Пример #3
0
        void Update()
        {
            if (m_PreviousTrailPreset != m_CurrentTrailPreset)
            {
                if (m_HideTrailOnDisabled)
                {
                    HideTrail(false);
                }
                m_PreviousTrailPreset = m_CurrentTrailPreset;
            }
            if (m_TrailActivationCondition == TrailActivationCondition.VelocityMagnitude ||
                m_TrailDeactivationCondition == TrailDeactivationCondition.VelocityMagnitude)
            {
                CalculateCurrentVelocity();
            }

            if (m_EffectEnabled)
            {
                if (m_CurrentTrailPreset == null)
                {
                    return;
                }
                if (m_SpriteToDuplicate == null)
                {
                    return;
                }

                switch (m_TrailDeactivationCondition)
                {
                case TrailDeactivationCondition.Manual:
                    break;

                case TrailDeactivationCondition.Time:
                    if (m_TimeTrailStarted + m_TrailActivationDuration <= Time.time)
                    {
                        DisableTrailEffect();
                        return;
                    }

                    break;

                case TrailDeactivationCondition.VelocityMagnitude:
                    float _Velocity = 0;
                    if (m_VelocityStopIsLocalSpace)
                    {
                        _Velocity = m_VelocityLocal.magnitude;
                    }
                    else
                    {
                        _Velocity = m_VelocityWorld.magnitude;
                    }

                    if (!m_StopIfOverVelocity && _Velocity >= m_VelocityNeededToStop)
                    {
                        DisableTrailEffect();
                    }
                    else if (m_StopIfOverVelocity && _Velocity <= m_VelocityNeededToStop)
                    {
                        DisableTrailEffect();
                    }
                    break;
                }

                switch (m_CurrentTrailPreset.m_TrailElementSpawnCondition)
                {
                case TrailElementSpawnCondition.Time:
                    if (m_PreviousTimeSpawned + m_CurrentTrailPreset.m_TimeBetweenSpawns <= Time.time)
                    {
                        float _TimeError = Time.time - (m_PreviousTimeSpawned + m_CurrentTrailPreset.m_TimeBetweenSpawns);
                        if (m_CurrentTrailPreset.m_TimeBetweenSpawns > 0)
                        {
                            while (_TimeError >= m_CurrentTrailPreset.m_TimeBetweenSpawns)
                            {
                                _TimeError -= m_CurrentTrailPreset.m_TimeBetweenSpawns;
                            }
                        }

                        if (_TimeError > m_CurrentTrailPreset.m_TimeBetweenSpawns)
                        {
                            _TimeError = 0;
                        }
                        m_PreviousTimeSpawned = Time.time - _TimeError;

                        GenerateNewTrailElement();
                    }

                    break;

                case TrailElementSpawnCondition.FrameCount:
                    if (m_PreviousFrameSpawned + m_CurrentTrailPreset.m_FramesBetweenSpawns <= Time.frameCount)
                    {
                        m_PreviousFrameSpawned = Time.frameCount;
                        GenerateNewTrailElement();
                    }
                    break;

                case TrailElementSpawnCondition.Distance:
                    if (m_CurrentTrailPreset.m_DistanceCorrection && m_CurrentTrailPreset.m_DistanceBetweenSpawns > 0)
                    {
                        //TODO : if error corrected : generate a timer error ( 3 elements generated at the same frame == 3 elements that update the same)
                        while (Vector2.Distance(m_PreviousPosSpawned, m_SpriteToDuplicate.transform.position) >=
                               m_CurrentTrailPreset.m_DistanceBetweenSpawns)
                        {
                            Vector2 _dir    = (Vector2)m_SpriteToDuplicate.transform.position - m_PreviousPosSpawned;
                            Vector2 _tmpPos = m_PreviousPosSpawned + _dir.normalized * m_CurrentTrailPreset.m_DistanceBetweenSpawns;
                            GenerateNewTrailElement(new Vector3(_tmpPos.x, _tmpPos.y, m_SpriteToDuplicate.transform.position.z));
                            m_PreviousPosSpawned = _tmpPos;
                        }
                    }
                    else if (Vector2.Distance(m_PreviousPosSpawned, m_SpriteToDuplicate.transform.position) >=
                             m_CurrentTrailPreset.m_DistanceBetweenSpawns)
                    {
                        GenerateNewTrailElement();
                        m_PreviousPosSpawned = m_SpriteToDuplicate.transform.position;
                    }

                    break;
                }
            }
            else if (m_CanBeAutomaticallyActivated)  //check activation condition
            {
                switch (m_TrailActivationCondition)
                {
                case TrailActivationCondition.AlwaysEnabled:
                    EnableTrailEffect(false);
                    break;

                case TrailActivationCondition.Manual:
                    break;

                case TrailActivationCondition.VelocityMagnitude:
                    float _Velocity = 0;
                    if (m_VelocityStopIsLocalSpace)
                    {
                        _Velocity = m_VelocityLocal.magnitude;
                    }
                    else
                    {
                        _Velocity = m_VelocityWorld.magnitude;
                    }


                    if (!m_StartIfUnderVelocity && _Velocity >= m_VelocityNeededToStart)
                    {
                        EnableTrailEffect();
                    }
                    else if (m_StartIfUnderVelocity && _Velocity <= m_VelocityNeededToStart)
                    {
                        EnableTrailEffect();
                    }
                    break;
                }
            }
        }
Пример #4
0
        public void Initialise(SpriteTrail trail)
        {
            m_NeedDequeue       = false;
            m_TrailPos          = -1;
            m_NeedLateUpdate    = false;
            m_TimeSinceCreation = 0;
            m_MotherTrail       = trail;
            this.m_myGameObject.SetActive(true);
            m_TrailSettings = trail.m_CurrentTrailPreset;
            if (SpriteRenderer == null)
            {
                SpriteRenderer = GetComponent <SpriteRenderer>();
            }
            if (m_TrailSettings.m_SpecialMat != null)
            {
                SpriteRenderer.material = m_TrailSettings.m_SpecialMat;
            }
            else
            {
                SpriteRenderer.material = trail.m_SpriteToDuplicate.material;
            }
            SpriteRenderer.color          = trail.m_SpriteToDuplicate.color;
            SpriteRenderer.sortingLayerID = trail.m_SortingLayerID;
            SpriteRenderer.sortingOrder   = trail.m_OrderInSortingLayer;
            SpriteRenderer.sprite         = trail.m_SpriteToDuplicate.sprite;
            SpriteRenderer.flipX          = trail.m_SpriteToDuplicate.flipX;
            SpriteRenderer.flipY          = trail.m_SpriteToDuplicate.flipY;
            m_InitSize = m_Transform.localScale;
            m_InitPos  = m_Transform.localPosition;
            m_Init     = true;
            trail.m_ElementsInTrail.Enqueue(this);


            ApplyFrameEffect();

            if (m_TrailSettings.m_TrailElementDurationCondition == TrailElementDurationCondition.ElementCount)
            {
                if (m_TrailSettings.m_TrailMaxLength > 0)
                {
                    while (trail.m_ElementsInTrail.Count > m_TrailSettings.m_TrailMaxLength)
                    {
                        trail.m_ElementsInTrail.Dequeue().Hide();
                    }
                }
                else
                {
                    while (trail.m_ElementsInTrail.Count > 0)
                    {
                        trail.m_ElementsInTrail.Dequeue().Hide();
                    }
                }


                int _cnt = 0;
                foreach (TrailElement _elem in trail.m_ElementsInTrail)
                {
                    _elem.m_TrailPos       = trail.m_ElementsInTrail.Count - _cnt;
                    _elem.m_NeedLateUpdate = true;
                    _cnt++;
                }
            }
        }