Example #1
0
        public void Reset()
        {
            Position    = Vector3.up * 9999;
            Velocity    = Vector3.zero;
            ElapsedTime = 0f;


            CurWorldPos = Owner.transform.position;

            LastWorldPos = CurWorldPos;

            IsCollisionEventSended = false;

            //foreach (Affector aft in AffectorList)
            //{
            //    aft.Reset();
            //}

            //do not use foreach in your script!
            for (int i = 0; i < AffectorList.Count; i++)
            {
                Affector aft = (Affector)AffectorList[i];
                aft.Reset();
            }

            if (Type == 1)
            {
                Sprite.SetRotation(OriRotateAngle);
                Sprite.SetPosition(Position);
                Sprite.SetColor(Color.clear);
                Sprite.Update(true, 0f);
                //TODO:should reset in ScaleAffector.
                Scale = Vector2.one;
            }
            else if (Type == 2)
            {
                Vector3 headpos;
                if (Owner.AlwaysSyncRotation)
                {
                    headpos = ClientTrans.rotation * (GetRealClientPos() + Owner.EmitPoint);
                }
                else
                {
                    headpos = GetRealClientPos() + Owner.EmitPoint;
                }
                Ribbon.SetHeadPosition(headpos /*+ OriDirection.normalized * Owner.TailDistance*/);
                Ribbon.Reset();
                Ribbon.SetColor(Color.clear);
                Ribbon.UpdateVertices(Vector3.zero);
            }
            else if (Type == 3)
            {
                Cone.SetRotation(OriRotateAngle);
                Cone.SetColor(Color.clear);
                Cone.SetPosition(Position);
                Scale = Vector2.one;
                Cone.ResetAngle();
                Cone.Update(true, 0f);
            }
        }
Example #2
0
        public void Update(float deltaTime)
        {
            ElapsedTime += deltaTime;


            //foreach (Affector aft in AffectorList)
            //{
            //    aft.Update(deltaTime);
            //}

            for (int i = 0; i < AffectorList.Count; i++)
            {
                Affector aft = AffectorList[i];
                aft.Update(deltaTime);
            }

            Position += Velocity * deltaTime;

            CollisionDetection();

            //if (Mathf.Abs(Acceleration) > 1e-04)
            //{
            //Velocity += Velocity.normalized * Acceleration * deltaTime;
            //}

            if (SyncClient)
            {
                //NOTICE: only sync position.
                //and the node direction is synced to client rotation by default. may add a option to choose?.
                CurWorldPos = Position + GetRealClientPos();
            }
            else
            {
                CurWorldPos = Position;
            }
            if (Type == 1)
            {
                UpdateSprite(deltaTime);
            }
            else if (Type == 2)
            {
                UpdateRibbonTrail(deltaTime);
            }
            else if (Type == 3)
            {
                UpdateCone(deltaTime);
            }
            else if (Type == 4)
            {
                UpdateCustomMesh(deltaTime);
            }

            LastWorldPos = CurWorldPos;

            if (ElapsedTime > LifeTime && LifeTime > 0)
            {
                Reset();
                Remove();
            }
        }
Example #3
0
        public void Update(float deltaTime)
        {
            ElapsedTime += deltaTime;

            for (int i = 0; i < AffectorList.Count; i++)
            {
                Affector aft = AffectorList[i];
                aft.Update(deltaTime);
            }

            Position += Velocity * deltaTime;



            //if (Mathf.Abs(Acceleration) > 1e-04)
            //{
            //Velocity += Velocity.normalized * Acceleration * deltaTime;
            //}

            if (SyncClient)
            {
                //NOTICE: only sync position.
                CurWorldPos = Position + GetRealClientPos();
            }
            else
            {
                CurWorldPos = Position;
            }


            CollisionDetection();

            //sync subemitters position.
            if (Owner.UseSubEmitters && SubEmitter != null && XffectComponent.IsActive(SubEmitter.gameObject))
            {
                SubEmitter.transform.position = CurWorldPos;
            }


            RenderObj.Update(deltaTime);

            if (Owner.UseShaderCurve2 || Owner.UseShaderCurve1)
            {
                float x = Owner.UseShaderCurve1 ? Owner.ShaderCurveX1.Evaluate(GetElapsedTime(), this) : 1f;

                float y = Owner.UseShaderCurve2 ? Owner.ShaderCurveX2.Evaluate(GetElapsedTime(), this) : 0f;

                RenderObj.ApplyShaderParam(x, y);
            }


            LastWorldPos = CurWorldPos;

            if (ElapsedTime > LifeTime && LifeTime > 0)
            {
                Reset();
                Remove();
            }
        }
Example #4
0
        public void Reset()
        {
            //activate on death subemitter.
            if (Owner.UseSubEmitters && !string.IsNullOrEmpty(Owner.DeathSubEmitter))
            {
                XffectComponent sub = Owner.SpawnCache.GetEffect(Owner.DeathSubEmitter);
                if (sub == null)
                {
                    return;
                }

                sub.transform.position = CurWorldPos;
                sub.Active();
            }

            //Position = Vector3.up * -9999;
            Position    = Owner.ClientTransform.position;
            Velocity    = Vector3.zero;
            ElapsedTime = 0f;


            CurWorldPos = Owner.transform.position;

            LastWorldPos = CurWorldPos;

            IsCollisionEventSended = false;

            if (Owner.IsRandomStartColor)
            {
                //StartColor = Owner.RandomColorParam.GetGradientColor(UnityEngine.Random.Range(0f, 1f));
                StartColor = Owner.RandomColorGradient.Evaluate(UnityEngine.Random.Range(0f, 1f));
            }

            //do not use foreach in script!
            for (int i = 0; i < AffectorList.Count; i++)
            {
                Affector aft = AffectorList[i];
                aft.Reset();
            }

            Scale = Vector3.one;


            mIsFade = false;


            RenderObj.Reset();

            if (Owner.UseSubEmitters &&
                SubEmitter != null && XffectComponent.IsActive(SubEmitter.gameObject) &&
                Owner.SubEmitterAutoStop)
            {
                SubEmitter.StopEmit();
            }
        }
Example #5
0
        public void Update(float deltaTime)
        {
            ElapsedTime += deltaTime;
            for (int i = 0; i < AffectorList.Count; i++)
            {
                Affector aft = AffectorList[i];
                aft.Update(deltaTime);
            }

            Position += Velocity * deltaTime;
            if (SyncClient)
            {
                CurWorldPos = Position + GetRealClientPos();
            }
            else
            {
                CurWorldPos = Position;
            }

            RenderObj.Update(deltaTime);
            if (Owner.UseShaderCurve2 || Owner.UseShaderCurve1)
            {
                float x = Owner.UseShaderCurve1 ? Owner.ShaderCurveX1.Evaluate(GetElapsedTime(), this) : 1f;
                float y = Owner.UseShaderCurve2 ? Owner.ShaderCurveX2.Evaluate(GetElapsedTime(), this) : 0f;
                RenderObj.ApplyShaderParam(x, y);
            }
            else if (Owner.UseFlowControl)
            {
                float x = Owner.FlowSpeed * GetElapsedTime();
                float y = Owner.FlowStretchLength;
                RenderObj.ApplyShaderParam(x, y);
            }

            LastWorldPos = CurWorldPos;

            if (ElapsedTime > LifeTime && LifeTime > 0)
            {
                Reset();
                Remove();
            }
        }
Example #6
0
        public void Update(float deltaTime)
        {
            ElapsedTime += deltaTime;

            if (isCollision && isBounce)
            {
                //Update color only not velocity and position
                for (int i = 0; i < AffectorList.Count; i++)
                {
                    Affector aft = AffectorList[i];
                    aft.Update(deltaTime);
                }
                UpdateBounce(deltaTime);
                //Position += Velocity * deltaTime;
                if (SyncClient)
                {
                    //NOTICE: only sync position.
                    CurWorldPos = Position + GetRealClientPos();
                }
                else
                {
                    CurWorldPos = Position;
                }
            }
            else
            {
                for (int i = 0; i < AffectorList.Count; i++)
                {
                    Affector aft = AffectorList[i];
                    aft.Update(deltaTime);
                }

                Position += Velocity * deltaTime;

                if (SyncClient)
                {
                    //NOTICE: only sync position.
                    CurWorldPos = Position + GetRealClientPos();
                }
                else
                {
                    CurWorldPos = Position;
                }

                CollisionDetection();
            }

            //sync subemitters position.
            if (Owner.UseSubEmitters && SubEmitter != null && XffectComponent.IsActive(SubEmitter.gameObject))
            {
                SubEmitter.transform.position = CurWorldPos;
            }


            if (Type == 1)
            {
                UpdateSprite(deltaTime);
            }
            else if (Type == 2)
            {
                UpdateRibbonTrail(deltaTime);
            }
            else if (Type == 3)
            {
                UpdateCone(deltaTime);
            }
            else if (Type == 4)
            {
                UpdateCustomMesh(deltaTime);
            }

            LastWorldPos = CurWorldPos;

            if (ElapsedTime > LifeTime && LifeTime > 0)
            {
                Reset();
                Remove();
            }
        }
Example #7
0
        public void Reset()
        {
            isCollision = false;
            isBounce    = false;

            //activate on death subemitter.
            if (Owner.UseSubEmitters && !string.IsNullOrEmpty(Owner.DeathSubEmitter))
            {
                XffectComponent sub = Owner.SpawnCache.GetEffect(Owner.DeathSubEmitter);
                if (sub == null)
                {
                    return;
                }
                sub.Active();
                sub.transform.position = CurWorldPos;
            }

            //Position = Vector3.up * -9999;
            //if (Owner.SpriteType == (int)STYPE.BILLBOARD_UP) {
            //	Position = Quaternion.Euler (new Vector3 (0, Owner.transform.rotation.eulerAngles.y, 0)) * Owner.EmitPoint + Owner.transform.position;
            //} else {
            Position = Owner.EmitPoint + Owner.transform.position;
            //}

            Velocity    = Vector3.zero;
            ElapsedTime = 0f;


            CurWorldPos = Owner.transform.position;

            LastWorldPos = CurWorldPos;

            IsCollisionEventSended = false;

            //foreach (Affector aft in AffectorList)
            //{
            //    aft.Reset();
            //}V

            //do not use foreach in your script!
            for (int i = 0; i < AffectorList.Count; i++)
            {
                Affector aft = AffectorList[i];
                aft.Reset();
            }

            Scale = Vector3.one;

            if (Type == 1)
            {
                Sprite.SetRotation(OriRotateAngle);
                Sprite.SetPosition(Position);
                Sprite.SetColor(Color.clear);
                Sprite.Update(true, 0f);
                //TODO:should reset in ScaleAffector.
                Scale = Vector3.one;
            }
            else if (Type == 2)
            {
                Vector3 headpos;
                if (Owner.AlwaysSyncRotation)
                {
                    headpos = ClientTrans.rotation * (GetRealClientPos() + Owner.EmitPoint);
                }
                else
                {
                    headpos = GetRealClientPos() + Owner.EmitPoint;
                }
                Ribbon.SetHeadPosition(headpos /*+ OriDirection.normalized * Owner.TailDistance*/);
                Ribbon.Reset();
                Ribbon.SetColor(Color.clear);
                Ribbon.UpdateVertices(Vector3.zero);
            }
            else if (Type == 3)
            {
                Cone.SetRotation(OriRotateAngle);
                Cone.SetColor(Color.clear);
                Cone.SetPosition(Position);
                Scale = Vector3.one;
                Cone.ResetAngle();
                Cone.Update(true, 0f);
            }
            else if (Type == 4)
            {
                CusMesh.SetColor(Color.clear);
                CusMesh.SetRotation(OriRotateAngle);
                CusMesh.Update(true, 0f);
            }


            if (Owner.UseSubEmitters && SubEmitter != null && XffectComponent.IsActive(SubEmitter.gameObject))
            {
                SubEmitter.StopEmit();
            }
        }
Example #8
0
        public void Update(float deltaTime)
        {
            ElapsedTime += deltaTime;


            //foreach (Affector aft in AffectorList)
            //{
            //    aft.Update(deltaTime);
            //}

            for (int i = 0; i < AffectorList.Count; i++)
            {
                Affector aft = AffectorList[i];
                aft.Update(deltaTime);
            }

            Position += Velocity * deltaTime;

            CollisionDetection();

            //if (Mathf.Abs(Acceleration) > 1e-04)
            //{
            //Velocity += Velocity.normalized * Acceleration * deltaTime;
            //}

            if (SyncClient)
            {
                //NOTICE: only sync position.
                CurWorldPos = Position + GetRealClientPos();
            }
            else
            {
                CurWorldPos = Position;
            }

            //sync subemitters position.
            if (Owner.UseSubEmitters && SubEmitter != null && XffectComponent.IsActive(SubEmitter.gameObject))
            {
                SubEmitter.transform.position = CurWorldPos;
            }


            if (Type == 1)
            {
                UpdateSprite(deltaTime);
            }
            else if (Type == 2)
            {
                UpdateRibbonTrail(deltaTime);
            }
            else if (Type == 3)
            {
                UpdateCone(deltaTime);
            }
            else if (Type == 4)
            {
                UpdateCustomMesh(deltaTime);
            }

            LastWorldPos = CurWorldPos;

            if (ElapsedTime > LifeTime && LifeTime > 0 && Owner.NotExpired == false)
            {
                Reset();
                Remove();
            }
        }
Example #9
0
        public void Update(float deltaTime)
        {
            ElapsedTime += deltaTime;
            for (int i = 0; i < AffectorList.Count; i++)
            {
                Affector aft = AffectorList[i];
                aft.Update(deltaTime);
            }


            if (Owner.EmitType == (int)EMITTYPE.Spline && Owner.DirType == DIRECTION_TYPE.Spline)
            {
                XSpline spline = Owner.EmitSpline.Spline;

                if (Owner.SplineEaseType == XEase.Easing.Linear)
                {
                    mSplineIterator.Iterate(mOriSpeed * deltaTime);
                }
                else
                {
                    mSplineOffset += mOriSpeed * deltaTime;
                    float t = mSplineOffset / spline.Length;
                    t = Mathf.Clamp(t, 0, 1);
                    mSplineIterator.SetOffset(XEase.EaseByType(Owner.SplineEaseType, 0, spline.Length, t));
                }

                Position = mSplineIterator.GetPosition();
            }
            else
            {
                Position += Velocity * deltaTime;
            }



            //if (Mathf.Abs(Acceleration) > 1e-04)
            //{
            //Velocity += Velocity.normalized * Acceleration * deltaTime;
            //}

            if (SyncClient)
            {
                //NOTICE: only sync position.
                CurWorldPos = Position + GetRealClientPos();
            }
            else
            {
                CurWorldPos = Position;
            }


            CollisionDetection();

            //sync subemitters position.
            if (Owner.UseSubEmitters && SubEmitter != null && XffectComponent.IsActive(SubEmitter.gameObject))
            {
                SubEmitter.transform.position = CurWorldPos;
            }


            RenderObj.Update(deltaTime);

            if (Owner.UseShaderCurve2 || Owner.UseShaderCurve1)
            {
                float x = Owner.UseShaderCurve1 ? Owner.ShaderCurveX1.Evaluate(GetElapsedTime(), this) : 1f;

                float y = Owner.UseShaderCurve2 ? Owner.ShaderCurveX2.Evaluate(GetElapsedTime(), this) : 0f;

                RenderObj.ApplyShaderParam(x, y);
            }
            else if (Owner.UseFlowControl)
            {
                float x = Owner.FlowSpeed * GetElapsedTime();
                float y = Owner.FlowStretchLength;

                //float d = x % y;

                //float p = x / y;

                //float px = x;

                //if (Mathf.FloorToInt(p) % 2 == 0)
                //{
                //    //first circle.
                //    px = d;
                //}
                //else
                //{
                //    px = y - d;
                //}


                RenderObj.ApplyShaderParam(x, y);
            }


            LastWorldPos = CurWorldPos;

            if (ElapsedTime > LifeTime && LifeTime > 0)
            {
                Reset();
                Remove();
            }
        }