Beispiel #1
0
    void AddCombo(Global.TIMING_JUAGE_TYPE type)
    {
        combo.Add();
        int curCombo = combo.GetCount();

        mark += GetMark(curCombo - 1, type, true);
        Eff.instance.ShowCombo100(curCombo > 100, this.index);

        scoreData.score = mark;
        scoreData.comboCount++;



        if (curCombo % 100 == 0 && curCombo > 1)
        {
            Sounder.instance.Play("连击加成音效100");
        }
        else if (curCombo % 10 == 0 && curCombo > 1)
        {
            combo10Eff.gameObject.SetActive(true);
            combo10Eff.PlayParticles();
            Sounder.instance.Play("连击加成音效");
        }
        else
        {
            combo1Eff.gameObject.SetActive(true);
            combo1Eff.PlayParticles();
        }

        if (curCombo % 20 == 0)
        {
            AddHP(1);
        }
    }
Beispiel #2
0
    /// <summary>
    /// 得到分数
    /// </summary>
    /// <param name="curCombo"></param>
    /// <param name="type"></param>
    /// <returns></returns>
    static public int GetMark(int curCombo, Global.TIMING_JUAGE_TYPE type, bool playSound = false)
    {
        int addMark = 0;

        switch (type)
        {
        case Global.TIMING_JUAGE_TYPE.PREFECT:
            addMark += 30;
            break;

        case Global.TIMING_JUAGE_TYPE.COOL:
            addMark += 20;
            break;

        case Global.TIMING_JUAGE_TYPE.GOOD:
            addMark += 10;
            break;
        }

        float awardFactor = 0.5f;

        addMark = (int)((Mathf.Floor((float)curCombo / 10) * awardFactor + 1) * (float)addMark);

        if (curCombo % 100 == 0 && curCombo > 0)
        {
            addMark += (int)((float)addMark * ((float)curCombo / 100f) * 0.1f);
        }
        return(addMark);
    }
Beispiel #3
0
 public void Show(Global.TIMING_JUAGE_TYPE type)
 {
     for (int i = 0; i < judgeEffects.Length; i++)
     {
         judgeEffects[i].gameObject.SetActive(i == (int)type);
         judgeEffects[i].PlayParticles();
     }
     gameObject.GetComponent <Animation>().Stop();
     gameObject.GetComponent <Animation>().Play(PlayMode.StopAll);
 }
Beispiel #4
0
    /// <summary>
    /// 设置箭头,计算分数
    /// </summary>
    /// <param name="type"></param>
    void SetArrowResult(Global.TIMING_JUAGE_TYPE type, Arrow arrow, bool isMainBeat = true)
    {
        switch (type)
        {
        case Global.TIMING_JUAGE_TYPE.BAD:
            Sounder.instance.Play("BAD音效");
            break;
        }

        if (arrow.isLastOne)
        {
            bool end = true;
            if (arrow is LongPressArrow)
            {
                LongPressArrow longPress = arrow as LongPressArrow;
                switch (longPress.subState)
                {
                case Arrow.STATE.PRESSING:
                case Arrow.STATE.READY:
                    end = false;
                    break;
                }
            }
            if (hp > 0 && end)
            {
                ClearnArrow();
                Eff.instance.lastHit.SetActive(true);
                BeatGame.instance.ArrowComplete();
            }
        }

        if (type != Global.TIMING_JUAGE_TYPE.MISS)
        {
            int comboTime = combo.GetCount();
            GetComponent <AudioSource>().volume = comboTime < 10 ? 0.7f : 1;
            if (isMainBeat)
            {
                GetComponent <AudioSource>().PlayOneShot(leftRightClip);
            }
        }

        timingJudge.Show(type);
        if (type < Global.TIMING_JUAGE_TYPE.BAD)
        {
            AddCombo(type);
            BeatLight bl = null;
            switch (arrow.songTime.direction)
            {
            case SongInfo.DIRECTION.LEFT:
                bl = leftLight;
                break;

            case SongInfo.DIRECTION.RIGHT:
                bl = rightLight;
                break;

            case SongInfo.DIRECTION.UP:
                bl = upLight;
                break;

            case SongInfo.DIRECTION.DOWN:
                bl = downLight;
                break;
            }
            bl.Show();
            Eff.instance.ScreenHit(arrow.songTime.direction);
        }
        else
        {
            //道具
            if (correctProp != null && DataUtils.mode == Global.MODE.MODE_1P)
            {
                if (correctProp.Use())
                {
                    Sounder.instance.Play("道具消耗音效");
                    AddCombo(Global.TIMING_JUAGE_TYPE.PREFECT);
                    Eff.instance.ScreenHit(arrow.songTime.direction);
                    type = Global.TIMING_JUAGE_TYPE.PREFECT;
                }
                else
                {
                    combo.Reset();
                }
            }
            else
            {
                combo.Reset();
            }

            switch (type)
            {
            case Global.TIMING_JUAGE_TYPE.BAD:
                mark += 5;     //bad加5
                break;

            case Global.TIMING_JUAGE_TYPE.MISS:
                RefreshHP();
                break;
            }
        }

        scoreData.AddJuade(info.data, type);
        markText.SetValue(mark);
    }
Beispiel #5
0
    /// <summary>
    /// 按键
    /// </summary>
    /// <param name="d"></param>
    /// <param name="keyState"></param>
    public void PressKey(SongInfo.DIRECTION d, JoystickManager.JOYSTICK_KEY_STATE keyState)
    {
        Arrow      a;
        GameObject targetArrow = null;


        for (int i = 0, c = arrows.Count; i < c; i++)
        {
            a = arrows[i];
            if (a.songTime.direction != d)
            {
                continue;
            }

            switch (a.songTime.direction)
            {
            case SongInfo.DIRECTION.UP:
                targetArrow = upArrow;
                break;

            case SongInfo.DIRECTION.DOWN:
                targetArrow = downArrow;
                break;

            case SongInfo.DIRECTION.LEFT:
                targetArrow = leftArrow;
                break;

            case SongInfo.DIRECTION.RIGHT:
                targetArrow = rightArrow;
                break;
            }
            float dis = Vector3.Distance(a.transform.position, targetArrow.transform.position);
            Global.TIMING_JUAGE_TYPE type = GetJuade(dis);

            if (a is LongPressArrow)
            {
                LongPressArrow l = a as LongPressArrow;
                switch (l.state)
                {
                case LongPressArrow.STATE.READY:
                    //准备好时,如果按下相应的链接又在区域内,改变为按下状态
                    if (type != Global.TIMING_JUAGE_TYPE.NONE && keyState == JoystickManager.JOYSTICK_KEY_STATE.KEY_DOWN)
                    {
                        l.SetState(LongPressArrow.STATE.PRESSING);
                        l.pressingTime = runTime;
                        SetArrowResult(type, a);
                        float offset = targetArrow.transform.position.y - a.transform.position.y;
                        a.transform.position = targetArrow.transform.position;
                        l.height            += offset * 100;
                        l.AddLongEff(targetArrow.transform.position);
                        return;
                    }
                    break;

                case LongPressArrow.STATE.PRESSING:
                    //如果按下状态时弹起,改为失败状态
                    if (keyState == JoystickManager.JOYSTICK_KEY_STATE.KEY_UP)
                    {
                        dis = Vector3.Distance(l.GetSecondArrowPos(), targetArrow.transform.position);
                        Global.TIMING_JUAGE_TYPE secondType = GetJuade(dis);
                        if (secondType != Global.TIMING_JUAGE_TYPE.NONE)
                        {
                            l.SetState(LongPressArrow.STATE.SUCCESS);
                            l.subState = Arrow.STATE.SUCCESS;
                            KillArrow(a);
                            SetArrowResult(secondType, a, false);
                            Eff.instance.AddArrowEff(targetArrow.transform.position, a.songTime.direction);
                        }
                        else
                        {
                            l.SetState(LongPressArrow.STATE.FAILED);
                        }
                        return;
                    }
                    break;
                }
            }
            else
            {
                if (keyState == JoystickManager.JOYSTICK_KEY_STATE.KEY_DOWN)
                {
                    if (type != Global.TIMING_JUAGE_TYPE.NONE)
                    {
                        KillArrow(a);
                        SetArrowResult(type, a);
                        Eff.instance.AddArrowEff(targetArrow.transform.position, a.songTime.direction);
                        return;
                    }
                }
            }
        }
    }
Beispiel #6
0
 public void AddJuade(SongData data, Global.TIMING_JUAGE_TYPE type)
 {
     juadeType2Count[(int)type]++;
 }