예제 #1
0
    // 取得最終累計的數值。
    public void check()
    {
        if (rollState == 2)
        {
            // 已經是第二次擲骰子了,所以必須檢查技能有無發動,並計算最終結果丟給戰鬥對象做check。
            //
            // 寫法應該會是monster.check(finalCheckValue)
            // 如果判定通過,monster的class應該要設定一個hurt flag
            // 等到玩家按下繼續按鈕,到達player attack的階段時,
            // 在呼叫monster.playHurtAnimation()來播放傷害動畫。
            // playHurtAnimation()應該會有if判斷式來檢查hurt flag,
            // flag立起來就trigger,不然就沒事。
            // (PS. 特殊的技能應該也會在這邊立起flag,寫法應該同上一次彥求寫的isHeal,

            Debug.Log("Roll2");

            // 重置 Skill Effect
            usingBattleSkillEffect = null;
            this.turnDamage        = 0;

            finalCheckValue = 0;
            // 拿到重擲的final check value
            for (int i = 0; i < checkValue.Length; i++)
            {
                finalCheckValue += checkValue[i];
            }

            Debug.Log("finalcheck: " + finalCheckValue);
            int damage = finalCheckValue;


            // 判定技能是否發動
            if (usingBattleSkill)
            {
                currentCharacter.Mp -= usingBattleSkill.needMP;

                // 技能分成迴避技能、治療技能、攻擊技能,但這個做法不好,
                // 應該要把skillWeight改成回傳一個skillResultCallback物件,這樣才可以因應不能狀況發動不同效果。
                // 像是可以邊攻擊邊迴避或邊治癒,這之後再改


                usingBattleSkillEffect = usingBattleSkill.calSkillEffect(checkValue);


                // 此技能有傷害
                if (usingBattleSkillEffect.isDamage)
                {
                    damage = usingBattleSkillEffect.damage;
                    monster.check(damage);
                }

                // 此技能有治療
                if (usingBattleSkillEffect.isHeal)
                {
                    currentCharacter.recoverHP(usingBattleSkillEffect.heal);
                }

                // 此技能有回避
                if (usingBattleSkillEffect.isDodge)
                {
                    currentCharacter.noHurtTurn += usingBattleSkillEffect.dodge;
                }

                // 此技能有減傷頓,之後再作
                if (usingBattleSkillEffect.isShield)
                {
                }

                // 此技能有回復MP
                if (usingBattleSkillEffect.isHealMP)
                {
                    currentCharacter.recoverMP(usingBattleSkillEffect.healMP);
                }

                // 此技能減少對面的MP
                if (usingBattleSkillEffect.isMPDamage)
                {
                    monster.damageMp(usingBattleSkillEffect.MPDamage);
                }

                // 此技能封印骰子
                if (usingBattleSkillEffect.isDisable)
                {
                    DiceState dicestate = monster.diceStates[usingBattleSkillEffect.disable];
                    dicestate.addDisableTurn(usingBattleSkillEffect.disableTurns);
                }

                // 此技能封印自己骰子
                if (usingBattleSkillEffect.isSelfDisable)
                {
                }
            }
            // 普通攻擊
            else
            {
                monster.check(damage);
            }
        }
        else if (rollState == 3)
        {
            // 這是怪物擲骰子,攻擊玩家的傷害處理。
            // 首先怪物應該有AI選擇攻擊對象,monster.AI(finalCheckValue);
            // AI()會找場上的角色,並根據預先設定好的攻擊選擇,對選定的角色做判定。
            // 然後和前面一樣,對character的class設定hurt flag或其他特殊效果flag
            // 玩家按下繼續按鈕,到enemy attack的階段,在播放玩家傷害動畫。
            // 傷害動畫的寫法也同上面所述。
            Debug.Log("Roll3");

            for (int i = 0; i < checkValue.Length; i++)
            {
                finalCheckValue += checkValue[i];
            }

            monster.AI(checkValue);
        }
        else if (rollState == 1)
        {
            Debug.Log("Roll1");
            string temp = "";
            // 這邊會計算擲骰的結果值,同時處理battle skill的效果
            for (int i = 0; i < checkValue.Length; i++)
            {
                finalCheckValue += checkValue[i];
                if (i == checkValue.Length - 1)
                {
                    temp = temp + checkValue [i] + " = " + finalCheckValue;
                }
                else
                {
                    temp = temp + checkValue [i] + " + ";
                }
            }
            uiManager.setLastRollResult(temp);
        }

        if (usingGambleSkillIndex != -1 || rollState == 1 || rollState == 3)
        {
            if (usingGambleSkillIndex == 2 && rollState == 2)
            {
                string checkValueText = "~" + (finalCheckValue - checkValue [checkValue.Length - 1]) + "+" + checkValue [checkValue.Length - 1] + "~";
                checkValueTextManager.showCheckValue2(checkValueText);
            }
            else
            {
                checkValueTextManager.showCheckValue(finalCheckValue);
            }
        }

        if (usingGambleSkillIndex != -1 || rollState == 1 || rollState == 3)
        {
            uiManager.showNextButton();
        }
    }