Esempio n. 1
0
    /// <summary>
    /// Runs specific behaviors based on the given action and its param.
    /// </summary>
    private void CallSequenceFunction(AnimationSequenceAction.Action a, string param)
    {
        switch (a)
        {
        case AnimationSequenceAction.Action.ChangeUserAnimation:
            ChangeUserAnimation(param);
            break;

        case AnimationSequenceAction.Action.ChangeTargetAnimation:
            ChangeTargetAnimation(param);
            break;

        case AnimationSequenceAction.Action.GenerateEffect:
            // Split the param
            string[] effectVals = param.Split(',');

            if (effectVals.Length != 12)
            {
                Debug.LogError("Invalid param count for Effect Generation!");
            }

            // Generate an effect with the given values
            GenerateEffect(effectVals[0], effectVals[1],
                           float.Parse(effectVals[2].Trim()), float.Parse(effectVals[3].Trim()), float.Parse(effectVals[4].Trim()),
                           float.Parse(effectVals[5].Trim()), float.Parse(effectVals[6].Trim()), float.Parse(effectVals[7].Trim()),
                           bool.Parse(effectVals[8].Trim()), float.Parse(effectVals[9].Trim()), float.Parse(effectVals[10].Trim()),
                           float.Parse(effectVals[11].Trim()));
            break;

        case AnimationSequenceAction.Action.TerminateEffect:
            int id = int.Parse(param);
            TerminateEffect(id);
            break;

        case AnimationSequenceAction.Action.Move:
            // Split the param
            string[] moveVals = param.Split(',');

            if (moveVals.Length > 6 && moveVals.Length < 5)
            {
                Debug.LogError("Invalid param count for Movement!");
            }

            Transform tM;
            string    sM = moveVals[0].Trim();

            if (sM.Equals("User"))
            {
                tM = user.transform;
            }
            else if (sM.Equals("Target"))
            {
                tM = target.transform;
            }
            else
            {
                tM = effects[int.Parse(moveVals[5].Trim())].transform;
            }

            float durationM = ((float.Parse(moveVals[1].Trim())) / 60.0f);

            float xM = (float.Parse(moveVals[2].Trim()) * directionX) + tM.position.x;
            float yM = (float.Parse(moveVals[3].Trim()) * directionY) + tM.position.y;
            float zM = float.Parse(moveVals[4].Trim()) + tM.position.z;

            // Move the target
            TweenPosition(tM, xM, yM, zM, durationM);
            break;

        case AnimationSequenceAction.Action.Rotate:
            // Split the param
            string[] rotateVals = param.Split(',');

            if (rotateVals.Length > 6 && rotateVals.Length < 5)
            {
                Debug.LogError("Invalid param count for Movement!");
            }

            Transform tR;
            string    sR = rotateVals[0].Trim();

            if (sR.Equals("User"))
            {
                tR = user.transform;
            }
            else if (sR.Equals("Target"))
            {
                tR = target.transform;
            }
            else
            {
                tR = effects[int.Parse(rotateVals[5].Trim())].transform;
            }

            float durationR = ((float.Parse(rotateVals[1].Trim())) / 60.0f);

            float xR = float.Parse(rotateVals[2].Trim());
            float yR = float.Parse(rotateVals[3].Trim());
            float zR = (float.Parse(rotateVals[4].Trim()) * directionX);

            // Rotate the target
            TweenRotation(tR, xR, yR, zR, durationR);
            break;

        case AnimationSequenceAction.Action.Scale:
            // Split the param
            string[] scaleVals = param.Split(',');

            if (scaleVals.Length > 6 && scaleVals.Length < 5)
            {
                Debug.LogError("Invalid param count for Movement!");
            }

            Transform tS;
            string    sS = scaleVals[0].Trim();

            if (sS.Equals("User"))
            {
                tS = user.transform;
            }
            else if (sS.Equals("Target"))
            {
                tS = target.transform;
            }
            else
            {
                tS = effects[int.Parse(scaleVals[5].Trim())].transform;
            }

            float durationS = ((float.Parse(scaleVals[1].Trim())) / 60.0f);;

            // Increase the target scale
            float xS = !(sS.Equals("User") || sS.Equals("Target")) ? (float.Parse(scaleVals[2].Trim())) :
                       (float.Parse(scaleVals[2].Trim()) * directionX) * Mathf.Abs(tS.localScale.x);
            float yS = !(sS.Equals("User") || sS.Equals("Target")) ? (float.Parse(scaleVals[3].Trim())) :
                       (float.Parse(scaleVals[3].Trim()) * directionY) * Mathf.Abs(tS.localScale.y);
            float zS = float.Parse(scaleVals[4].Trim()) + tS.position.z;

            TweenScale(tS, xS, yS, zS, durationS);
            break;

        case AnimationSequenceAction.Action.Color:
            // Split the param
            string[] colorVals = param.Split(',');

            if (colorVals.Length > 7 && colorVals.Length < 6)
            {
                Debug.LogError("Invalid param count for Color!");
            }

            EntityController eC;
            string           sC = colorVals[0].Trim();

            if (sC.Equals("User"))
            {
                eC = user;
            }
            else if (sC.Equals("Target"))
            {
                eC = target;
            }
            else
            {
                eC = effects[int.Parse(colorVals[6].Trim())];
            }

            float durationC = ((float.Parse(colorVals[1].Trim())) / 60.0f);

            float xC = float.Parse(colorVals[2].Trim());
            float yC = float.Parse(colorVals[3].Trim());
            float zC = float.Parse(colorVals[4].Trim());
            float wC = float.Parse(colorVals[5].Trim());

            // Change the target's color
            TweenColor(eC, new Color(xC, yC, zC, wC), durationC);
            break;

        case AnimationSequenceAction.Action.Vibrate:
            // Split the param
            string[] vibrateVals = param.Split(',');

            if (vibrateVals.Length > 6 && vibrateVals.Length < 5)
            {
                Debug.LogError("Invalid param count for Vibration!");
            }

            Transform tV;
            string    sV = vibrateVals[0].Trim();

            if (sV.Equals("User"))
            {
                tV = user.transform;
            }
            else if (sV.Equals("Target"))
            {
                tV = target.transform;
            }
            else
            {
                tV = effects[int.Parse(vibrateVals[5].Trim())].transform;
            }

            float durationV = ((float.Parse(vibrateVals[1].Trim())) / 60.0f);
            Debug.Log(durationV);
            Vector3 strengthV = new Vector3(float.Parse(vibrateVals[2]), float.Parse(vibrateVals[3]), 0.0f);
            int     vibratoV  = int.Parse(vibrateVals[4]);

            // Vibrae the target
            Vibrate(tV, durationV, strengthV, vibratoV);
            break;

        case AnimationSequenceAction.Action.ChangeAnimationSpeed:
            // Split the param
            string[] speedVals = param.Split(',');

            if (speedVals.Length > 3 && speedVals.Length < 2)
            {
                Debug.LogError("Invalid param count for Speed!");
            }

            string sSp    = speedVals[0].Trim();
            float  sSpeed = float.Parse(speedVals[1].Trim());

            // Modifies the speed of the target animator

            if (sSp.Equals("User"))
            {
                user.FrameSpeedModify(sSpeed);
            }
            else if (sSp.Equals("Target"))
            {
                target.FrameSpeedModify(sSpeed);
            }
            else
            {
                effects[int.Parse(speedVals[2].Trim())].FrameSpeedModify(sSpeed);
            }
            break;

        case AnimationSequenceAction.Action.ChangeAnimationState:
            // Split the param
            string[] stateVals = param.Split(',');

            if (stateVals.Length > 4 && stateVals.Length < 3)
            {
                Debug.LogError("Invalid param count for State Change!");
            }

            EntityController eAS;
            string           sAS = stateVals[0].Trim();

            if (sAS.Equals("User"))
            {
                eAS = user;
            }
            else if (sAS.Equals("Target"))
            {
                eAS = target;
            }
            else
            {
                eAS = effects[int.Parse(stateVals[3].Trim())];
            }

            eAS.SetAnimationState(stateVals[1].Trim(), bool.Parse(stateVals[2].Trim()));
            break;

        case AnimationSequenceAction.Action.BeginLoop:
            // Begins a loop
            int numLoops = int.Parse(param);

            if (numLoops < 0)
            {
                numLoops = loop;
            }

            loops.Add(new AnimationSequenceLoop(currentFrame, numLoops));
            looping = true;
            break;

        case AnimationSequenceAction.Action.EndLoop:
            // Checks if the loop should repeat or terminate
            AnimationSequenceLoop currLoop = loops[loops.Count - 1];
            currLoop.numIterations++;

            if (currLoop.numIterations < currLoop.numLoops)
            {
                currentFrame = currLoop.startFrame;
            }
            else
            {
                loops.Remove(currLoop);
            }

            looping = loops.Count <= 0;
            break;

        case AnimationSequenceAction.Action.ApplyDamage:
            // Applies damage
            target.ApplyDamage(spell.GetDamageOfCurrentHit());
            break;

        case AnimationSequenceAction.Action.PlaySound:
            // Plays a sound effect
            PlaySound(param);
            break;

        case AnimationSequenceAction.Action.TerminateAnimation:
            // End the animation
            running = false;
            break;
        }
    }