/// <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; } }