示例#1
0
    // 勝利時の結果
    public IEnumerator DisplayVictoryResult(List <GameObject> allCharacterList, List <GameObject> allyCharacterInBattleList)
    {
        yield return(new WaitForSeconds(timeToDisplay));

        won = true;
        resultPanel.SetActive(true);
        // 戦闘で獲得した経験値
        var earnedExperience = 0;
        // 戦闘で獲得したお金
        var earnedMoney = 0;
        // 戦闘で獲得したアイテムとその個数
        Dictionary <Item, int> getItemDictionary = new Dictionary <Item, int>();
        // Floatのランダム値
        float randomFloat;
        // アイテム取得確率
        float probability;
        // キャラクターステータス
        BaseStatus BaseStatus;
        // 敵のアイテムディクショナリー
        ItemDictionary enemyItemDictionary;

        foreach (var character in allCharacterList)
        {
            BaseStatus = character.GetComponent <CharacterBattle>().GetCharacterStatus();
            if (BaseStatus as EnemyStatus != null)
            {
                earnedExperience   += ((EnemyStatus)BaseStatus).GetGettingExperience();
                earnedMoney        += ((EnemyStatus)BaseStatus).GetGettingMoney();
                enemyItemDictionary = ((EnemyStatus)BaseStatus).GetDropItemDictionary();
                // 敵が持っているアイテムの種類の数だけ繰り返し
                foreach (var item in enemyItemDictionary.Keys)
                {
                    // 0~100の間のランダム値を取得
                    randomFloat = Random.Range(0f, 100f);
                    // アイテムの取得確率を取得
                    probability = enemyItemDictionary[item];
                    // ランダム値がアイテム取得確率以下の値であればアイテム取得
                    if (randomFloat <= probability)
                    {
                        if (getItemDictionary.ContainsKey(item))
                        {
                            getItemDictionary[item]++;
                        }
                        else
                        {
                            getItemDictionary.Add(item, 1);
                        }
                    }
                }
            }
        }
        resultText.text  = earnedExperience + "の経験値を獲得した。\n";
        resultText.text += earnedMoney + "のお金を獲得した。\n";

        // パーティーステータスにお金を反映する
        partyStatus.SetMoney(partyStatus.GetMoney() + earnedMoney);

        // intのランダム値
        int        randomInt;
        AllyStatus allyStatus;

        // 取得したアイテムを味方パーティーに分配する
        foreach (var item in getItemDictionary.Keys)
        {
            // パーティーメンバーの誰にアイテムを渡すか決定
            randomInt  = Random.Range(0, allyCharacterInBattleList.Count);
            allyStatus = (AllyStatus)allyCharacterInBattleList[randomInt].GetComponent <CharacterBattle>().GetCharacterStatus();
            // キャラクターが既にアイテムを持っている時
            if (allyStatus.GetItemDictionary().ContainsKey(item))
            {
                allyStatus.SetItemNum(item, allyStatus.GetItemNum(item) + getItemDictionary[item]);
            }
            else
            {
                allyStatus.SetItemDictionary(item, getItemDictionary[item]);
            }
            resultText.text += allyStatus.GetCharacterName() + "は" + item.GetKanjiName() + "を" + getItemDictionary[item] + "個手に入れた。\n";
            resultText.text += "\n";
        }

        // 上がったレベル
        var levelUpCount = 0;
        // 上がったHP
        var raisedHp = 0;
        // 上がったMP
        var raisedMp = 0;
        // 上がった素早さ
        var raisedAgility = 0;
        // 上がった力
        var raisedPower = 0;
        // 上がった打たれ強さ
        var raisedStrikingStrength = 0;
        // 上がった魔法力
        var raisedMagicPower = 0;
        // LevelUpData
        LevelUpData levelUpData;

        // レベルアップ等の計算
        foreach (var characterObj in allyCharacterInBattleList)
        {
            var character = (AllyStatus)characterObj.GetComponent <CharacterBattle>().GetCharacterStatus();
            // 変数を初期化
            levelUpCount           = 0;
            raisedHp               = 0;
            raisedMp               = 0;
            raisedAgility          = 0;
            raisedPower            = 0;
            raisedStrikingStrength = 0;
            raisedMagicPower       = 0;
            levelUpData            = character.GetLevelUpData();

            // キャラクターに経験値を反映
            character.SetEarnedExperience(character.GetEarnedExperience() + earnedExperience);

            // そのキャラクターの経験値で何レベルアップしたかどうか
            for (int i = 1; i < levelUpData.GetLevelUpDictionary().Count; i++)
            {
                // レベルアップに必要な経験値を満たしていたら
                if (character.GetEarnedExperience() >= levelUpData.GetRequiredExperience(character.GetLevel() + i))
                {
                    levelUpCount++;
                }
                else
                {
                    break;
                }
            }
            // レベルを反映
            character.SetLevel(character.GetLevel() + levelUpCount);

            // レベルアップ分のステータスアップを計算し反映する
            for (int i = 0; i < levelUpCount; i++)
            {
                if (Random.Range(0f, 100f) <= levelUpData.GetProbabilityToIncreaseMaxHP())
                {
                    raisedHp += Random.Range(levelUpData.GetMinHPRisingLimit(), levelUpData.GetMaxHPRisingLimit());
                }
                if (Random.Range(0f, 100f) <= levelUpData.GetProbabilityToIncreaseMaxMP())
                {
                    raisedMp += Random.Range(levelUpData.GetMinMPRisingLimit(), levelUpData.GetMaxMPRisingLimit());
                }
                if (Random.Range(0f, 100f) <= levelUpData.GetProbabilityToIncreaseAgility())
                {
                    raisedAgility += Random.Range(levelUpData.GetMinAgilityRisingLimit(), levelUpData.GetMaxAgilityRisingLimit());
                }
                if (Random.Range(0f, 100f) <= levelUpData.GetProbabilityToIncreasePower())
                {
                    raisedPower += Random.Range(levelUpData.GetMinPowerRisingLimit(), levelUpData.GetMaxPowerRisingLimit());
                }
                if (Random.Range(0f, 100f) <= levelUpData.GetProbabilityToIncreaseStrikingStrength())
                {
                    raisedStrikingStrength += Random.Range(levelUpData.GetMinStrikingStrengthRisingLimit(), levelUpData.GetMaxStrikingStrengthRisingLimit());
                }
                if (Random.Range(0f, 100f) <= levelUpData.GetProbabilityToIncreaseMagicPower())
                {
                    raisedMagicPower += Random.Range(levelUpData.GetMinMagicPowerRisingLimit(), levelUpData.GetMaxMagicPowerRisingLimit());
                }
            }
            if (levelUpCount > 0)
            {
                resultText.text += character.GetCharacterName() + "は" + levelUpCount + "レベル上がってLv" + character.GetLevel() + "になった。\n";
                if (raisedHp > 0)
                {
                    resultText.text += "最大HPが" + raisedHp + "上がった。\n";
                    character.SetMaxHp(character.GetMaxHp() + raisedHp);
                }
                if (raisedMp > 0)
                {
                    resultText.text += "最大MPが" + raisedMp + "上がった。\n";
                    character.SetMaxMp(character.GetMaxMp() + raisedMp);
                }
                if (raisedAgility > 0)
                {
                    resultText.text += "素早さが" + raisedAgility + "上がった。\n";
                    character.SetAgility(character.GetAgility() + raisedAgility);
                }
                if (raisedPower > 0)
                {
                    resultText.text += "力が" + raisedPower + "上がった。\n";
                    character.SetPower(character.GetPower() + raisedPower);
                }
                if (raisedStrikingStrength > 0)
                {
                    resultText.text += "打たれ強さが" + raisedStrikingStrength + "上がった。\n";
                    character.SetStrikingStrength(character.GetStrikingStrength() + raisedStrikingStrength);
                }
                if (raisedMagicPower > 0)
                {
                    resultText.text += "魔法力が" + raisedMagicPower + "上がった。\n";
                    character.SetMagicPower(character.GetMagicPower() + raisedMagicPower);
                }
                resultText.text += "\n";
            }
        }
        // 結果を計算し終わった
        isDisplayResult = true;

        // 戦闘終了のBGMに変更する
        musicManager.ChangeBGM();

        // 結果後に数秒待機
        yield return(new WaitForSeconds(timeToDisplay));

        // 戦闘から抜け出す
        resultPanel.transform.Find("FinishText").gameObject.SetActive(true);
        isFinishResult = true;
    }
    // 勝利時の結果
    public IEnumerator DisplayVictoryResult(List <GameObject> allCharacterList, List <GameObject> allyCharacterInBattleList)
    {
        yield return(new WaitForSeconds(timeToDisplay));

        won = true;
        resultPanel.SetActive(true);
        // 戦闘で獲得した経験値
        var earnedExperience = 0;
        // 戦闘で獲得したお金
        var earnedMoney = 0;
        // 戦闘で獲得したアイテムとその個数
        Dictionary <Item, int> getItemDictionary = new Dictionary <Item, int>();
        // Floatのランダム値
        float randomFloat;
        // アイテム取得確率
        float probability;
        // キャラクターステータス
        CharacterStatus characterStatus;
        // 敵のアイテムディクショナリー
        ItemDictionary enemyItemDictionary;
        // プレイヤーのレベル
        int playerLv = allyCharacterInBattleList[0].GetComponent <CharacterBattleScript>().GetCharacterStatus().GetLevel();

        foreach (var character in allCharacterList)
        {
            characterStatus = character.GetComponent <CharacterBattleScript>().GetCharacterStatus();
            if (characterStatus as EnemyStatus != null)
            {
                earnedExperience   += LevelDifferenceCorrection(((EnemyStatus)characterStatus).GetLevel(), playerLv, ((EnemyStatus)characterStatus).GetGettingExperience());
                earnedMoney        += ((EnemyStatus)characterStatus).GetGettingMoney();
                enemyItemDictionary = ((EnemyStatus)characterStatus).GetDropItemDictionary();
                // 敵が持っているアイテムの種類の数だけ繰り返し
                foreach (var item in enemyItemDictionary.Keys)
                {
                    // 0~100の間のランダム値を取得
                    randomFloat = Random.Range(0f, 100f);
                    // アイテムの取得確率を取得
                    probability = enemyItemDictionary[item];
                    // ランダム値がアイテム取得確率以下の値であればアイテム取得
                    if (randomFloat <= probability)
                    {
                        if (getItemDictionary.ContainsKey(item))
                        {
                            getItemDictionary[item]++;
                        }
                        else
                        {
                            getItemDictionary.Add(item, 1);
                        }
                    }
                }
            }
        }
        resultText.text  = earnedExperience + "の経験値を獲得した。\n";
        resultText.text += earnedMoney + "のお金を獲得した。\n";

        // パーティーステータスにお金を反映する
        partyStatus.SetMoney(partyStatus.GetMoney() + earnedMoney);

        // 取得したアイテムを取得する
        foreach (var item in getItemDictionary.Keys)
        {
            // 既にアイテムを持っている時
            if (partyStatus.GetItemDictionary().ContainsKey(item))
            {
                partyStatus.SetItemNum(item, partyStatus.GetItemNum(item) + getItemDictionary[item]);
            }
            else
            {
                partyStatus.SetItemDictionary(item, getItemDictionary[item]);
            }
            resultText.text += item.GetKanjiName() + "を" + getItemDictionary[item] + "個手に入れた。\n";
            resultText.text += "\n";
        }

        // 上がったレベル
        var levelUpCount = 0;
        // 上がった素早さ
        var raisedAgility = 0;
        // 上がった力
        var raisedPower = 0;
        // 上がった打たれ強さ
        var raisedStrikingStrength = 0;
        // 上がった魔法力
        var raisedMagicPower = 0;
        // レベルアップ前のHP
        var nowMaxHP = 0;
        // レベルアップ前のMP
        var nowMaxMP = 0;
        // LevelUpData
        LevelUpData levelUpData;
        // レベルアップのテーブル
        List <int> agilityRisingTable;
        List <int> powerRisingTable;
        List <int> strikingStrengthRisingTable;
        List <int> magicPowerRisingTable;

        // レベルアップ等の計算
        foreach (var characterObj in allyCharacterInBattleList)
        {
            var character = (AllyStatus)characterObj.GetComponent <CharacterBattleScript>().GetCharacterStatus();
            // 変数を初期化
            levelUpCount           = 0;
            raisedAgility          = 0;
            raisedPower            = 0;
            raisedStrikingStrength = 0;
            raisedMagicPower       = 0;
            nowMaxHP    = character.GetMaxHp();
            nowMaxMP    = character.GetMaxMp();
            levelUpData = character.GetLevelUpData();

            agilityRisingTable          = levelUpData.GetAgilityRisingTable();
            powerRisingTable            = levelUpData.GetPowerRisingTable();
            strikingStrengthRisingTable = levelUpData.GetStrikingStrengthRisingTable();
            magicPowerRisingTable       = levelUpData.GetMagicPowerRisingTable();

            // キャラクターに経験値を反映
            character.SetEarnedExperience(character.GetEarnedExperience() + earnedExperience);

            // そのキャラクターの経験値で何レベルアップしたかどうか
            levelUpCount = character.GetEarnedExperience() / LEVEL_UP_POINT;
            character.SetEarnedExperience(character.GetEarnedExperience() % LEVEL_UP_POINT);

            // レベルアップ分のステータスアップを計算し反映する
            for (int i = 1; i <= levelUpCount; i++)
            {
                // レベルを反映
                character.SetLevel(character.GetLevel() + 1);

                raisedAgility          += agilityRisingTable[character.GetLevel() % agilityRisingTable.Count()];
                raisedPower            += powerRisingTable[character.GetLevel() % powerRisingTable.Count()];
                raisedStrikingStrength += strikingStrengthRisingTable[character.GetLevel() % strikingStrengthRisingTable.Count()];
                raisedMagicPower       += magicPowerRisingTable[character.GetLevel() % strikingStrengthRisingTable.Count];
            }

            if (levelUpCount > 0)
            {
                resultText.text += character.GetCharacterName() + "は" + levelUpCount + "レベル上がってLv" + character.GetLevel() + "になった。\n";
                if (raisedAgility > 0)
                {
                    resultText.text += "素早さが" + raisedAgility + "上がった。\n";
                }
                if (raisedPower > 0)
                {
                    resultText.text += "力が" + raisedPower + "上がった。\n";
                }
                if (raisedStrikingStrength > 0)
                {
                    resultText.text += "打たれ強さが" + raisedStrikingStrength + "上がった。\n";
                }
                if (raisedMagicPower > 0)
                {
                    resultText.text += "魔法力が" + raisedMagicPower + "上がった。\n";
                }
                resultText.text += "\n";
            }
            character.StatusUpdate(raisedPower, raisedAgility, raisedStrikingStrength, raisedMagicPower);
            //レベルの上がった分だけHP、MPを回復
            character.SetHp(character.GetHp() + (character.GetMaxHp() - nowMaxHP));
            character.SetMp(character.GetMp() + (character.GetMaxMp() - nowMaxMP));
        }
        // 結果を計算し終わった
        isDisplayResult = true;

        // 戦闘終了のBGMに変更する
        //musicManager.ChangeBGM();

        // 結果後に数秒待機
        yield return(new WaitForSeconds(timeToDisplay));

        // 戦闘から抜け出す
        //resultPanel.transform.Find("FinishText").gameObject.SetActive(true);
        isFinishResult = true;
    }