void ProcessDanceAction(DanceActionData data) { switch (data.m_AnimationType) { case DanceActionData.AnimationType.Attack: StartCoroutine(PlayAttack(data)); break; case DanceActionData.AnimationType.Beaten: StartCoroutine(PlayBeaten(data)); break; case DanceActionData.AnimationType.Dance: if (data.MoveToTarget) { transform.DOLocalJump(data.TargetPos, data.JumpPower, data.NumberOfJumps, m_BPM); } if (!string.Equals(data.AnimationName, "null")) { PlayAnimation(data.AnimationName, data.FlipXAxis, data.Loop, data.AnimationBeatCount); } break; } }
IEnumerator PlayAttack(DanceActionData data) { Vector3 targetPos = Vector3.one; switch (data.m_AttackDir) { case DanceActionData.AttackDir.FromLeftToMiddle: targetPos = new Vector3((StageManager.Instance.m_LeftOriginPoint.transform.position.x + StageManager.Instance.m_MiddleOriginPoint.transform.position.x) / 2 - 1, (StageManager.Instance.m_LeftOriginPoint.transform.position.y + StageManager.Instance.m_MiddleOriginPoint.transform.position.y) / 2 + 1, 0); break; case DanceActionData.AttackDir.FromLeftToRight: targetPos = new Vector3((StageManager.Instance.m_RightOriginPoint.transform.position.x + StageManager.Instance.m_LeftOriginPoint.transform.position.x) / 2 - 1, CrashHeight, 0); break; case DanceActionData.AttackDir.FromRightToLeft: targetPos = new Vector3((StageManager.Instance.m_RightOriginPoint.transform.position.x + StageManager.Instance.m_LeftOriginPoint.transform.position.x) / 2 + 1, CrashHeight, 0); break; case DanceActionData.AttackDir.FromMiddleToLeft: targetPos = new Vector3((StageManager.Instance.m_LeftOriginPoint.transform.position.x + StageManager.Instance.m_MiddleOriginPoint.transform.position.x) / 2 + 1, (StageManager.Instance.m_LeftOriginPoint.transform.position.y + StageManager.Instance.m_MiddleOriginPoint.transform.position.y) / 2 - 1, 0); break; case DanceActionData.AttackDir.FromMiddleToRight: targetPos = new Vector3((StageManager.Instance.m_RightOriginPoint.transform.position.x + StageManager.Instance.m_MiddleOriginPoint.transform.position.x) / 2 - 1, (StageManager.Instance.m_RightOriginPoint.transform.position.y + StageManager.Instance.m_MiddleOriginPoint.transform.position.y) / 2 - 1, 0); break; case DanceActionData.AttackDir.FromRightToMiddle: targetPos = new Vector3((StageManager.Instance.m_RightOriginPoint.transform.position.x + StageManager.Instance.m_MiddleOriginPoint.transform.position.x) / 2 + 1, (StageManager.Instance.m_RightOriginPoint.transform.position.y + StageManager.Instance.m_MiddleOriginPoint.transform.position.y) / 2 + 1, 0); break; } transform.DOJump(targetPos, data.JumpPower, data.NumberOfJumps, m_BPM); Spine.TrackEntry moveEntry; switch (data.m_AttackDir) { case DanceActionData.AttackDir.FromMiddleToLeft: case DanceActionData.AttackDir.FromMiddleToRight: case DanceActionData.AttackDir.FromLeftToMiddle: case DanceActionData.AttackDir.FromRightToMiddle: moveEntry = m_SkeletonAnimation.AnimationState.SetAnimation(0, "jump_lv2_01", true); break; default: moveEntry = m_SkeletonAnimation.AnimationState.SetAnimation(0, "jump_lv3_01", true); break; } switch (data.m_AttackDir) { case DanceActionData.AttackDir.FromLeftToMiddle: case DanceActionData.AttackDir.FromLeftToRight: case DanceActionData.AttackDir.FromMiddleToRight: transform.eulerAngles = new Vector3(0, 180, 0); break; default: transform.eulerAngles = Vector3.zero; break; } float animationLength = moveEntry.Animation.Duration; float speed = animationLength / m_BPM; moveEntry.timeScale = speed; yield return(new WaitForSeconds(m_BPM)); Spine.TrackEntry readyToAttack = m_SkeletonAnimation.AnimationState.SetAnimation(0, "pose_1", false);; animationLength = readyToAttack.Animation.Duration; speed = animationLength / m_BPM; readyToAttack.timeScale = speed; yield return(new WaitForSeconds(m_BPM * 2 - 0.3f)); Spine.TrackEntry attackEntry = null; switch (data.m_AttackDir) { case DanceActionData.AttackDir.FromMiddleToLeft: case DanceActionData.AttackDir.FromMiddleToRight: attackEntry = m_SkeletonAnimation.AnimationState.SetAnimation(0, "attack_01", false); break; case DanceActionData.AttackDir.FromLeftToMiddle: case DanceActionData.AttackDir.FromRightToMiddle: attackEntry = m_SkeletonAnimation.AnimationState.SetAnimation(0, "jump_lv3_03", false); break; default: attackEntry = m_SkeletonAnimation.AnimationState.SetAnimation(0, "attack_02", false); break; } animationLength = attackEntry.Animation.Duration; attackEntry.timeScale = 1; yield return(new WaitForSeconds(animationLength)); Vector3 originPos; switch (data.m_AttackDir) { case DanceActionData.AttackDir.FromLeftToMiddle: case DanceActionData.AttackDir.FromLeftToRight: originPos = StageManager.Instance.m_LeftOriginPoint.transform.position; break; case DanceActionData.AttackDir.FromMiddleToRight: case DanceActionData.AttackDir.FromMiddleToLeft: originPos = StageManager.Instance.m_MiddleOriginPoint.transform.position; break; default: originPos = StageManager.Instance.m_RightOriginPoint.transform.position; break; } transform.DOJump(originPos, data.JumpPower, data.NumberOfJumps, m_BPM); Spine.TrackEntry overEntry = m_SkeletonAnimation.AnimationState.SetAnimation(0, "over", false); animationLength = overEntry.Animation.Duration; overEntry.timeScale = animationLength / m_BPM; yield return(new WaitForSeconds(m_BPM)); Spine.TrackEntry winEntry = m_SkeletonAnimation.AnimationState.SetAnimation(0, "pose_2", true); animationLength = winEntry.Animation.Duration; winEntry.timeScale = animationLength / m_BPM; }
IEnumerator PlayBeaten(DanceActionData data) { Vector3 targetPos = Vector3.one; switch (data.m_AttackDir) { case DanceActionData.AttackDir.FromMiddleToLeft: targetPos = new Vector3((StageManager.Instance.m_LeftOriginPoint.transform.position.x + StageManager.Instance.m_MiddleOriginPoint.transform.position.x) / 2 - 1, (StageManager.Instance.m_LeftOriginPoint.transform.position.y + StageManager.Instance.m_MiddleOriginPoint.transform.position.y) / 2 + 1, 0); transform.DOMove(targetPos, m_BPM); break; case DanceActionData.AttackDir.FromMiddleToRight: targetPos = new Vector3((StageManager.Instance.m_RightOriginPoint.transform.position.x + StageManager.Instance.m_MiddleOriginPoint.transform.position.x) / 2 + 1, (StageManager.Instance.m_RightOriginPoint.transform.position.y + StageManager.Instance.m_MiddleOriginPoint.transform.position.y) / 2 + 1, 0); transform.DOMove(targetPos, m_BPM); break; case DanceActionData.AttackDir.FromRightToMiddle: targetPos = new Vector3((StageManager.Instance.m_RightOriginPoint.transform.position.x + StageManager.Instance.m_MiddleOriginPoint.transform.position.x) / 2 - 1, (StageManager.Instance.m_RightOriginPoint.transform.position.y + StageManager.Instance.m_MiddleOriginPoint.transform.position.y) / 2 - 1, 0); transform.DOMove(targetPos, m_BPM); break; case DanceActionData.AttackDir.FromLeftToMiddle: targetPos = new Vector3((StageManager.Instance.m_LeftOriginPoint.transform.position.x + StageManager.Instance.m_MiddleOriginPoint.transform.position.x) / 2 + 1, (StageManager.Instance.m_LeftOriginPoint.transform.position.y + StageManager.Instance.m_MiddleOriginPoint.transform.position.y) / 2 - 1, 0); transform.DOMove(targetPos, m_BPM); break; case DanceActionData.AttackDir.FromLeftToRight: targetPos = new Vector3((StageManager.Instance.m_RightOriginPoint.transform.position.x + StageManager.Instance.m_LeftOriginPoint.transform.position.x) / 2 + 1, CrashHeight, 0); transform.DOJump(targetPos, data.JumpPower, data.NumberOfJumps, m_BPM); break; case DanceActionData.AttackDir.FromRightToLeft: targetPos = new Vector3((StageManager.Instance.m_RightOriginPoint.transform.position.x + StageManager.Instance.m_LeftOriginPoint.transform.position.x) / 2 - 1, CrashHeight, 0); transform.DOJump(targetPos, data.JumpPower, data.NumberOfJumps, m_BPM); break; } Spine.TrackEntry moveEntry = m_SkeletonAnimation.AnimationState.SetAnimation(0, "jump_lv3_01", true); float animationLength = moveEntry.Animation.Duration; float speed = animationLength / m_BPM; moveEntry.timeScale = speed; yield return(new WaitForSeconds(m_BPM)); Spine.TrackEntry readyForBeaten = m_SkeletonAnimation.AnimationState.SetAnimation(0, "over", false);; animationLength = readyForBeaten.Animation.Duration; speed = animationLength / m_BPM; readyForBeaten.timeScale = speed; yield return(new WaitForSeconds(m_BPM * 2)); AudioController.Play("be_hit"); Vector3 pos = transform.position + transform.up; EffectManager.Play("RoundHitBlue", pos); stunned = EffectManager.Play("Stunned", Vector3.zero); if (stunned != null) { stunned.transform.SetParent(transform, false); stunned.transform.localPosition = Vector3.up * 2; } Spine.TrackEntry beatenEntry = m_SkeletonAnimation.AnimationState.SetAnimation(0, "bear_down", false); animationLength = beatenEntry.Animation.Duration; beatenEntry.timeScale = 1; switch (data.m_AttackDir) { case DanceActionData.AttackDir.FromLeftToMiddle: case DanceActionData.AttackDir.FromLeftToRight: case DanceActionData.AttackDir.FromMiddleToRight: transform.eulerAngles = Vector3.zero; break; default: transform.eulerAngles = new Vector3(0, 180, 0); break; } switch (data.m_AttackDir) { case DanceActionData.AttackDir.FromLeftToMiddle: targetPos = StageManager.Instance.m_MiddleOriginPoint.transform.position + new Vector3(BeatenLength, 0, 0); break; case DanceActionData.AttackDir.FromRightToMiddle: targetPos = StageManager.Instance.m_MiddleOriginPoint.transform.position - new Vector3(BeatenLength, 0, 0); break; case DanceActionData.AttackDir.FromLeftToRight: case DanceActionData.AttackDir.FromMiddleToRight: targetPos = StageManager.Instance.m_RightOriginPoint.transform.position + new Vector3(BeatenLength, 0, 0); break; default: targetPos = StageManager.Instance.m_LeftOriginPoint.transform.position - new Vector3(BeatenLength, 0, 0); break; } transform.DOJump(targetPos, 5, 3, animationLength); yield return(new WaitForSeconds(animationLength)); //getting up int randomIndex = Random.Range(1, 4); string getUpAnimeName = "bear_0" + randomIndex.ToString(); Spine.TrackEntry gettingUpEntry = m_SkeletonAnimation.AnimationState.SetAnimation(0, getUpAnimeName, false); animationLength = gettingUpEntry.Animation.Duration; gettingUpEntry.timeScale = 1; yield return(new WaitForSeconds(animationLength)); Vector3 originPos = Vector3.zero; switch (data.m_AttackDir) { case DanceActionData.AttackDir.FromLeftToMiddle: case DanceActionData.AttackDir.FromRightToMiddle: originPos = StageManager.Instance.m_MiddleOriginPoint.transform.position; break; case DanceActionData.AttackDir.FromLeftToRight: case DanceActionData.AttackDir.FromMiddleToRight: originPos = StageManager.Instance.m_RightOriginPoint.transform.position; break; default: originPos = StageManager.Instance.m_LeftOriginPoint.transform.position; break; } transform.DOJump(originPos, data.JumpPower, data.NumberOfJumps, m_BPM); Spine.TrackEntry overEntry = m_SkeletonAnimation.AnimationState.SetAnimation(0, "start", false); animationLength = overEntry.Animation.Duration; overEntry.timeScale = animationLength / m_BPM; yield return(new WaitForSeconds(m_BPM)); Spine.TrackEntry loseEntry = m_SkeletonAnimation.AnimationState.SetAnimation(0, "pose_1", true); animationLength = loseEntry.Animation.Duration; loseEntry.timeScale = animationLength / m_BPM; }
public static ChoreographerData GetChoreographerDataFromJson(string json) { ChoreographerData cd = new ChoreographerData(); JsonData data = JsonMapper.ToObject(json); cd.StartSpellIndex = int.Parse(data.TryGetString("startSpellIndex", "-1")); JsonData middleDancer = data["middle"]; JsonData leftDancer = data["left"]; JsonData rightDancer = data["right"]; DancerInfo middle = new DancerInfo(); DancerInfo left = new DancerInfo(); DancerInfo right = new DancerInfo(); middle.Name = middleDancer.TryGetString("name"); middle.ModelID = middleDancer.TryGetString("modelID"); middle.FaceID = middleDancer.TryGetString("faceID"); middle.m_Country = (DancerInfo.Country) int.Parse(middleDancer.TryGetString("country")); middle.PlayerID = middleDancer.TryGetString("uid"); middle.m_RankingType = (DancerInfo.RankingType) int.Parse(middleDancer.TryGetString("ranking")); left.Name = leftDancer.TryGetString("name"); left.ModelID = leftDancer.TryGetString("modelID"); left.FaceID = leftDancer.TryGetString("faceID"); left.m_Country = (DancerInfo.Country) int.Parse(leftDancer.TryGetString("country")); left.PlayerID = leftDancer.TryGetString("uid"); left.m_RankingType = (DancerInfo.RankingType) int.Parse(leftDancer.TryGetString("ranking")); right.Name = rightDancer.TryGetString("name"); right.ModelID = rightDancer.TryGetString("modelID"); right.FaceID = rightDancer.TryGetString("faceID"); right.m_Country = (DancerInfo.Country) int.Parse(rightDancer.TryGetString("country")); right.PlayerID = rightDancer.TryGetString("uid"); right.m_RankingType = (DancerInfo.RankingType) int.Parse(rightDancer.TryGetString("ranking")); string[] middleActionList = middleDancer.TryGetString("actions").Split(','); string[] rightActionList = rightDancer.TryGetString("actions").Split(','); string[] leftActionList = leftDancer.TryGetString("actions").Split(','); for (int i = 0; i < middleActionList.Length; i++) { string[] array = middleActionList[i].Split('|'); int beatNumber = int.Parse(array[0]); switch (array[1]) { case "a": DanceActionData attackData = new DanceActionData("", 0, beatNumber); attackData.m_AnimationType = DanceActionData.AnimationType.Attack; switch (array[2]) { case "lr": attackData.m_AttackDir = DanceActionData.AttackDir.FromLeftToRight; break; case "rl": attackData.m_AttackDir = DanceActionData.AttackDir.FromRightToLeft; break; case "rm": attackData.m_AttackDir = DanceActionData.AttackDir.FromRightToMiddle; break; case "mr": attackData.m_AttackDir = DanceActionData.AttackDir.FromMiddleToRight; break; case "lm": attackData.m_AttackDir = DanceActionData.AttackDir.FromLeftToMiddle; break; case "ml": attackData.m_AttackDir = DanceActionData.AttackDir.FromMiddleToLeft; break; } middle.m_DanceActionList.Add(attackData); break; case "b": DanceActionData beatenkData = new DanceActionData("", 0, beatNumber); beatenkData.m_AnimationType = DanceActionData.AnimationType.Beaten; switch (array[2]) { case "lr": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromLeftToRight; break; case "rl": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromRightToLeft; break; case "rm": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromRightToMiddle; break; case "mr": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromMiddleToRight; break; case "lm": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromLeftToMiddle; break; case "ml": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromMiddleToLeft; break; } middle.m_DanceActionList.Add(beatenkData); break; case "d": int animationID = int.Parse(array[2]); DanceActionData danceData = new DanceActionData(StageManager.AnimationGroup[animationID], animationID, beatNumber); danceData.m_AnimationType = DanceActionData.AnimationType.Dance; middle.m_DanceActionList.Add(danceData); break; } } for (int i = 0; i < rightActionList.Length; i++) { string[] array = rightActionList[i].Split('|'); int beatNumber = int.Parse(array[0]); switch (array[1]) { case "a": DanceActionData attackData = new DanceActionData("", 0, beatNumber); attackData.m_AnimationType = DanceActionData.AnimationType.Attack; switch (array[2]) { case "lr": attackData.m_AttackDir = DanceActionData.AttackDir.FromLeftToRight; break; case "rl": attackData.m_AttackDir = DanceActionData.AttackDir.FromRightToLeft; break; case "rm": attackData.m_AttackDir = DanceActionData.AttackDir.FromRightToMiddle; break; case "mr": attackData.m_AttackDir = DanceActionData.AttackDir.FromMiddleToRight; break; case "lm": attackData.m_AttackDir = DanceActionData.AttackDir.FromLeftToMiddle; break; case "ml": attackData.m_AttackDir = DanceActionData.AttackDir.FromMiddleToLeft; break; } right.m_DanceActionList.Add(attackData); break; case "b": DanceActionData beatenkData = new DanceActionData("", 0, beatNumber); beatenkData.m_AnimationType = DanceActionData.AnimationType.Beaten; switch (array[2]) { case "lr": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromLeftToRight; break; case "rl": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromRightToLeft; break; case "rm": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromRightToMiddle; break; case "mr": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromMiddleToRight; break; case "lm": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromLeftToMiddle; break; case "ml": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromMiddleToLeft; break; } right.m_DanceActionList.Add(beatenkData); break; case "d": int animationID = int.Parse(array[2]); DanceActionData danceData = new DanceActionData(StageManager.AnimationGroup[animationID], animationID, beatNumber); danceData.m_AnimationType = DanceActionData.AnimationType.Dance; right.m_DanceActionList.Add(danceData); break; } } for (int i = 0; i < leftActionList.Length; i++) { string[] array = leftActionList[i].Split('|'); int beatNumber = int.Parse(array[0]); switch (array[1]) { case "a": DanceActionData attackData = new DanceActionData("", 0, beatNumber); attackData.m_AnimationType = DanceActionData.AnimationType.Attack; switch (array[2]) { case "lr": attackData.m_AttackDir = DanceActionData.AttackDir.FromLeftToRight; break; case "rl": attackData.m_AttackDir = DanceActionData.AttackDir.FromRightToLeft; break; case "rm": attackData.m_AttackDir = DanceActionData.AttackDir.FromRightToMiddle; break; case "mr": attackData.m_AttackDir = DanceActionData.AttackDir.FromMiddleToRight; break; case "lm": attackData.m_AttackDir = DanceActionData.AttackDir.FromLeftToMiddle; break; case "ml": attackData.m_AttackDir = DanceActionData.AttackDir.FromMiddleToLeft; break; } left.m_DanceActionList.Add(attackData); break; case "b": DanceActionData beatenkData = new DanceActionData("", 0, beatNumber); beatenkData.m_AnimationType = DanceActionData.AnimationType.Beaten; switch (array[2]) { case "lr": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromLeftToRight; break; case "rl": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromRightToLeft; break; case "rm": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromRightToMiddle; break; case "mr": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromMiddleToRight; break; case "lm": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromLeftToMiddle; break; case "ml": beatenkData.m_AttackDir = DanceActionData.AttackDir.FromMiddleToLeft; break; } left.m_DanceActionList.Add(beatenkData); break; case "d": int animationID = int.Parse(array[2]); int beatCounts = 1; if (array.Length == 4) { beatCounts = int.Parse(array[3]); } DanceActionData danceData = new DanceActionData(StageManager.AnimationGroup[animationID], animationID, beatNumber); danceData.AnimationBeatCount = beatCounts; danceData.m_AnimationType = DanceActionData.AnimationType.Dance; left.m_DanceActionList.Add(danceData); break; } } cd.m_MiddleDancer = middle; cd.m_LeftDancer = left; cd.m_RightDancer = right; return(cd); }