// 変更する装備の選択 public void SelectEquip(AllyStatus allyStatus, EquipType equipType) { ReturnToTopButton.GetComponent <Button>().interactable = false; chengingEquipType = equipType; changingEquipmentCharacter = allyStatus; content = formCampas.transform.Find("EquipmentSelectPanel/EquipmentPanel/Mask/Content").gameObject; if (chengingEquipType == EquipType.Weapon) { itemType = Item.Type.WeaponAll; } else if (chengingEquipType == EquipType.Armor) { itemType = Item.Type.ArmorAll; } else if (chengingEquipType == EquipType.Accessory1 || chengingEquipType == EquipType.Accessory2) { itemType = Item.Type.AccessoryAll; } // アイテムパネルボタンを何個作成したかどうか int itemPanelButtonNum = 0; GameObject itemButtonIns; // 装備解除ボタンのセット itemButtonIns = Instantiate <GameObject>(unequipButtonPrefab, content.transform); itemButtonIns.GetComponent <Button>().onClick.AddListener(() => CheckUpdateEquip()); // 持っているアイテム分のボタンの作成とクリック時の実行メソッドの設定 foreach (var item in partyStatus.GetItemDictionary().Keys) { // 変更しようとしている装備とアイテムの種類が一致している1個以上ある物を表示 if (item.GetItemType() == itemType && item as Equipment && partyStatus.GetItemDictionary()[item] > 0) { Equipment equipment = item as Equipment; itemButtonIns = Instantiate <GameObject>(equipmentPanelButtonPrefab, content.transform); itemButtonIns.transform.Find("ItemNameText").GetComponent <Text>().text = item.GetKanjiName(); itemButtonIns.GetComponent <Button>().onClick.AddListener(() => CheckUpdateEquip(equipment)); // アイテム数を表示 itemButtonIns.transform.Find("NumText").GetComponent <Text>().text = partyStatus.GetItemNum(item).ToString(); // アイテムボタンリストに追加 equipmentItemPanelButtonList.Add(itemButtonIns); // アイテムパネルボタン番号を更新 itemPanelButtonNum++; } } equipmentSelectPanel.SetActive(true); }
// キャラクターが持っているアイテムのボタン表示 public void CreateItemPanelButton() { itemInformationPanel.SetActive(true); // アイテムパネルボタンを何個作成したかどうか int itemPanelButtonNum = 0; GameObject itemButtonIns; // 選択したキャラクターのアイテム数分アイテムパネルボタンを作成 // 持っているアイテム分のボタンの作成とクリック時の実行メソッドの設定 foreach (var item in partyStatus.GetItemDictionary().Keys) { itemButtonIns = Instantiate <GameObject>(itemPanelButtonPrefab, content.transform); itemButtonIns.transform.Find("ItemNameText").GetComponent <Text>().text = item.GetKanjiName(); itemButtonIns.GetComponent <Button>().onClick.AddListener(() => SelectItem(item)); itemButtonIns.GetComponent <ItemButtonScript>().SetParam(item); // アイテム数を表示 itemButtonIns.transform.Find("NumText").GetComponent <Text>().text = partyStatus.GetItemNum(item).ToString(); // アイテムボタンリストに追加 itemPanelButtonList.Add(itemButtonIns); // アイテムパネルボタン番号を更新 itemPanelButtonNum++; } // アイテムパネルの表示と最初のアイテムの選択 if (content.transform.childCount != 0) { // SelectCharacerPanelで最後にどのゲームオブジェクトを選択していたか selectedGameObjectStack.Push(EventSystem.current.currentSelectedGameObject); currentCommand = CommandMode.ItemPanel; itemPanel.SetActive(true); itemPanel.transform.SetAsLastSibling(); itemPanelCanvasGroup.interactable = true; EventSystem.current.SetSelectedGameObject(content.transform.GetChild(0).gameObject); } else { informationTitleText.text = ""; informationText.text = "アイテムを持っていません。"; } }
public void UseItem() { //currentTarget.GetComponent<Animator>().SetTrigger("Damage"); // バーティののアイテム数を減らす partyStatus.SetItemNum(currentItem, partyStatus.GetItemNum(currentItem) - 1); if (currentItem.GetItemType() == Item.Type.HPRecovery) { // 回復力 var recoveryPoint = currentItem.GetAmount(); targetCharacterBattleScript.SetHp(targetCharacterBattleScript.GetHp() + recoveryPoint); battleStatusScript.UpdateStatus(targetCharacterStatus, BattleStatusScript.Status.HP, targetCharacterBattleScript.GetHp()); battleManager.ShowMessage(gameObject.name + "は" + currentItem.GetKanjiName() + "を使って" + currentTarget.name + "のHPを" + recoveryPoint + "回復した。"); } else if (currentItem.GetItemType() == Item.Type.MPRecovery) { // 回復力 var recoveryPoint = currentItem.GetAmount(); targetCharacterBattleScript.SetMp(targetCharacterBattleScript.GetMp() + recoveryPoint); battleStatusScript.UpdateStatus(targetCharacterStatus, BattleStatusScript.Status.MP, targetCharacterBattleScript.GetMp()); battleManager.ShowMessage(gameObject.name + "は" + currentItem.GetKanjiName() + "を使って" + currentTarget.name + "のMPを" + recoveryPoint + "回復した。"); } else if (currentItem.GetItemType() == Item.Type.NumbnessRecovery) { targetCharacterStatus.SetNumbness(false); battleManager.ShowMessage(gameObject.name + "は" + currentItem.GetKanjiName() + "を使って" + currentTarget.name + "の痺れを消した。"); } else if (currentItem.GetItemType() == Item.Type.PoisonRecovery) { targetCharacterStatus.SetPoisonState(false); battleManager.ShowMessage(gameObject.name + "は" + currentItem.GetKanjiName() + "を使って" + currentTarget.name + "の毒を消した。"); } // アイテム数が0になったらItemDictionaryからそのアイテムを削除 if (partyStatus.GetItemNum(currentItem) == 0) { partyStatus.GetItemDictionary().Remove(currentItem); } }
// 使用するアイテムの選択 public void SelectItem(GameObject character) { var itemDictionary = partyStatus.GetItemDictionary(); // MagicOrItemPanelのスクロール値の初期化 //scrollManager.Reset(); var battleItemPanelButtonNum = 0; GameObject battleItemPanelButtonIns; foreach (var item in itemDictionary.Keys) { if (item.GetItemType() == Item.Type.HPRecovery || item.GetItemType() == Item.Type.MPRecovery || item.GetItemType() == Item.Type.NumbnessRecovery || item.GetItemType() == Item.Type.PoisonRecovery ) { battleItemPanelButtonIns = Instantiate <GameObject>(battleItemPanelButton, magicOrItemPanelContent); battleItemPanelButtonIns.transform.Find("ItemName").GetComponent <Text>().text = item.GetKanjiName(); battleItemPanelButtonIns.transform.Find("Num").GetComponent <Text>().text = partyStatus.GetItemNum(item).ToString(); battleItemPanelButtonIns.GetComponent <Button>().onClick.AddListener(() => SelectItemTarget(character, item)); // 指定した番号のアイテムパネルボタンにアイテムスクロール用スクリプトを取り付ける if (battleItemPanelButtonNum != 0 && (battleItemPanelButtonNum % scrollDownButtonNum == 0 || battleItemPanelButtonNum % (scrollDownButtonNum + 1) == 0) ) { // アイテムスクロールスクリプトの取り付けて設定値のセット //battleItemPanelButtonIns.AddComponent<ScrollDownScript>(); } else if (battleItemPanelButtonNum != 0 && (battleItemPanelButtonNum % scrollUpButtonNum == 0 || battleItemPanelButtonNum % (scrollUpButtonNum + 1) == 0) ) { //battleItemPanelButtonIns.AddComponent<ScrollUpScript>(); } // ボタン番号を足す battleItemPanelButtonNum++; if (battleItemPanelButtonNum == scrollUpButtonNum + 2) { battleItemPanelButtonNum = 2; } } } if (magicOrItemPanelContent.childCount > 0) { currentCommand = CommandMode.SelectItem; commandPanel.GetComponent <CanvasGroup>().interactable = false; selectedGameObjectStack.Push(EventSystem.current.currentSelectedGameObject); magicOrItemPanel.GetComponent <CanvasGroup>().interactable = true; EventSystem.current.SetSelectedGameObject(magicOrItemPanelContent.GetChild(0).gameObject); magicOrItemPanel.gameObject.SetActive(true); } else { Debug.Log("使えるアイテムがありません。"); ShowMessage("使えるアイテムがありません。"); } }
// 勝利時の結果 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; }