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); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }
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(); } }