Example #1
0
    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;
        }
    }
Example #2
0
    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;
    }
Example #3
0
    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);
    }