Exemple #1
0
    public string FindAttatchPoint()
    {
        var childrenTransformGroup = GetComponentsInChildren <Transform>();
        var lFlags        = K514MathManager.PowByte(2, (uint)AttachPointType.Count) - 1;
        var lAttatchPoint = new Transform[(int)AttachPointType.Count];

        foreach (var i in childrenTransformGroup)
        {
            if (lFlags == 0)
            {
                break;
            }
            for (var j = 0; j < lAttatchPoint.Length; j++)
            {
                var lShift = 1 << j;
                if ((lFlags & lShift) == lShift && i.name.Contains(((AttachPointType)j).ToString()))
                {
                    lAttatchPoint[j] = i;
                    lFlags          ^= lShift;
                }
            }
        }
        AttachPoint = lAttatchPoint;
        return(lFlags == 0 ? "Find Complete Successfully" : "Find End Incompletely, Move mouse");
    }
    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);
    }
    public Projectile SetBezierChaseEnemy(int pPointNumber, Transform p_Target, float p_Duration, 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--;
            }
        };

        SetChaseTarget(p_Target).
        SetUpdateAction((customArgs, projectileAnimationEventArgs, lerpFunction) =>
        {
            var proj             = (Projectile)customArgs.MorphObject;
            var elapsed          = proj._currentMoveActionCumulativeTime - ElapsedTime;
            var reversedDuration = 1f / proj._currentMoveAction.AnimationDuration;
            var stepSize         = projectileAnimationEventArgs.NumberToReadQueue;
            for (var i = 0; i < stepSize; i++)
            {
                proj.CopiedBezierPointSet[i] = proj._moveActionSequenceValueSet[i];
            }

            if (lerpFunction == null)
            {
                for (int j = stepSize; j > 0; j--)
                {
                    for (int i = 0; i < j; i++)
                    {
                        if (i != j - 1)
                        {
                            proj.CopiedBezierPointSet[i].x = K514MathManager.ReverseLinearLerp(
                                proj.CopiedBezierPointSet[i].x,
                                proj.CopiedBezierPointSet[i + 1].x - proj.CopiedBezierPointSet[i].x, elapsed,
                                reversedDuration);
                            proj.CopiedBezierPointSet[i].y = K514MathManager.ReverseLinearLerp(
                                proj.CopiedBezierPointSet[i].y,
                                proj.CopiedBezierPointSet[i + 1].y - proj.CopiedBezierPointSet[i].y, elapsed,
                                reversedDuration);
                            proj.CopiedBezierPointSet[i].z = K514MathManager.ReverseLinearLerp(
                                proj.CopiedBezierPointSet[i].z,
                                proj.CopiedBezierPointSet[i + 1].z - proj.CopiedBezierPointSet[i].z, elapsed,
                                reversedDuration);
                        }
                        else
                        {
                            proj.CopiedBezierPointSet[i].x = K514MathManager.ReverseLinearLerp(
                                proj.CopiedBezierPointSet[i].x,
                                proj._chasingTarget.position.x - proj.CopiedBezierPointSet[i].x, elapsed,
                                reversedDuration);
                            proj.CopiedBezierPointSet[i].y = K514MathManager.ReverseLinearLerp(
                                proj.CopiedBezierPointSet[i].y,
                                proj._chasingTarget.position.y - proj.CopiedBezierPointSet[i].y, elapsed,
                                reversedDuration);
                            proj.CopiedBezierPointSet[i].z = K514MathManager.ReverseLinearLerp(
                                proj.CopiedBezierPointSet[i].z,
                                proj._chasingTarget.position.z - proj.CopiedBezierPointSet[i].z, elapsed,
                                reversedDuration);
                        }
                    }
                }
            }
            else
            {
                for (int j = stepSize; j > 0; j--)
                {
                    for (int i = 0; i < j; i++)
                    {
                        if (i != j - 1)
                        {
                            proj.CopiedBezierPointSet[i].x = lerpFunction(
                                proj.CopiedBezierPointSet[i].x,
                                proj.CopiedBezierPointSet[i + 1].x - proj.CopiedBezierPointSet[i].x, elapsed,
                                reversedDuration);
                            proj.CopiedBezierPointSet[i].y = lerpFunction(
                                proj.CopiedBezierPointSet[i].y,
                                proj.CopiedBezierPointSet[i + 1].y - proj.CopiedBezierPointSet[i].y, elapsed,
                                reversedDuration);
                            proj.CopiedBezierPointSet[i].z = lerpFunction(
                                proj.CopiedBezierPointSet[i].z,
                                proj.CopiedBezierPointSet[i + 1].z - proj.CopiedBezierPointSet[i].z, elapsed,
                                reversedDuration);
                        }
                        else
                        {
                            proj.CopiedBezierPointSet[i].x = lerpFunction(
                                proj.CopiedBezierPointSet[i].x,
                                proj._chasingTarget.position.x - proj.CopiedBezierPointSet[i].x, elapsed,
                                reversedDuration);
                            proj.CopiedBezierPointSet[i].y = lerpFunction(
                                proj.CopiedBezierPointSet[i].y,
                                proj._chasingTarget.position.y - proj.CopiedBezierPointSet[i].y, elapsed,
                                reversedDuration);
                            proj.CopiedBezierPointSet[i].z = lerpFunction(
                                proj.CopiedBezierPointSet[i].z,
                                proj._chasingTarget.position.z - proj.CopiedBezierPointSet[i].z, elapsed,
                                reversedDuration);
                        }
                    }
                }
            }

            return(proj.CopiedBezierPointSet[0]);
        }
                        , p_Duration
                        , pPointNumber
                        , false
                        , p_InitAction
                        , p_ExpiredAction
                        , p_LerpFunction
                        );

        return(this);
    }