public Projectile SetChaser(float p_Duration, Vector3 p_ChaseTarget, Action <CommomActionArgs, ProjectileAnimationEventArgs> p_InitAction = null, Action <CommomActionArgs, ProjectileAnimationEventArgs> p_ExpiredAction = null , Func <float, float, float, float, float> p_LerpFunction = null) { p_ExpiredAction += (customArgs, projectileAnimationEventArgs) => { var proj = (Projectile)customArgs.MorphObject; var cnt = projectileAnimationEventArgs.NumberToReadQueue; while (cnt > 0) { proj._moveActionSequenceValueSet.RemoveAt(0); cnt--; } }; SetEnqueuePoint(p_ChaseTarget) .SetUpdateAction((customArgs, projectileAnimationEventArgs, lerpFunction) => { var proj = (Projectile)customArgs.MorphObject; var elapsed = proj._currentMoveActionCumulativeTime - ElapsedTime; var reversedDuration = 1f / proj._currentMoveAction.AnimationDuration; if (p_LerpFunction == null) { return(K514MathManager.LinearLerp(proj.Transform.position, proj._moveActionSequenceValueSet[0], elapsed, reversedDuration)); } else { var p_From = proj.Transform.position; var p_To = proj._moveActionSequenceValueSet[0]; var distance = p_To - p_From; return(new Vector3( p_LerpFunction(p_From.x, distance.x, elapsed, reversedDuration), p_LerpFunction(p_From.y, distance.y, elapsed, reversedDuration), p_LerpFunction(p_From.z, distance.z, elapsed, reversedDuration) )); } } , p_Duration , 1 , false , p_InitAction , p_ExpiredAction , p_LerpFunction); return(this); }
public Projectile SetChaser(float p_Duration, Transform p_ChaseTarget, Action <CommomActionArgs, ProjectileAnimationEventArgs> p_InitAction = null, Action <CommomActionArgs, ProjectileAnimationEventArgs> p_ExpiredAction = null , Func <float, float, float, float, float> p_LerpFunction = null) { SetChaseTarget(p_ChaseTarget). SetUpdateAction((customArgs, projectileAnimationEventArgs, lerpFunction) => { var proj = (Projectile)customArgs.MorphObject; var elapsed = proj._currentMoveActionCumulativeTime - ElapsedTime; var reversedDuration = 1f / proj._currentMoveAction.AnimationDuration; if (p_LerpFunction == null) { return(K514MathManager.LinearLerp(proj.Transform.position, proj._chasingTarget.position, elapsed, reversedDuration)); } else { var p_From = proj.Transform.position; var p_To = proj._chasingTarget.position; var distance = p_To - p_From; return(new Vector3( p_LerpFunction(p_From.x, distance.x, elapsed, reversedDuration), p_LerpFunction(p_From.y, distance.y, elapsed, reversedDuration), p_LerpFunction(p_From.z, distance.z, elapsed, reversedDuration) )); } } , p_Duration , 0 , false , p_InitAction , p_ExpiredAction , p_LerpFunction); return(this); }