// キャラクターが持っているアイテムのボタン表示 public void CreateItemPanelButton(AllyStatus allyStatus) { itemInformationPanel.SetActive(true); selectCharacterPanelCanvasGroup.interactable = false; // アイテムパネルボタンを何個作成したかどうか int itemPanelButtonNum = 0; GameObject itemButtonIns; // 選択したキャラクターのアイテム数分アイテムパネルボタンを作成 // 持っているアイテム分のボタンの作成とクリック時の実行メソッドの設定 foreach (var item in allyStatus.GetItemDictionary().Keys) { itemButtonIns = content.transform.GetChild(itemPanelButtonNum).gameObject; itemButtonIns.SetActive(true); itemButtonIns.transform.Find("ItemName").GetComponent <Text>().text = item.GetKanjiName(); itemButtonIns.GetComponent <Button>().onClick.RemoveAllListeners(); itemButtonIns.GetComponent <Button>().onClick.AddListener(() => SelectItem(allyStatus, item)); itemButtonIns.GetComponent <ItemPanelButton>().SetParam(item); // アイテム数を表示 itemButtonIns.transform.Find("Num").GetComponent <Text>().text = allyStatus.GetItemNum(item).ToString(); // 装備している武器や防具には名前の前にEを表示し、そのTextを保持して置く if (allyStatus.GetEquipWeapon() == item) { itemButtonIns.transform.Find("Equip").GetComponent <Text>().text = "E"; } else if (allyStatus.GetEquipArmor() == item) { itemButtonIns.transform.Find("Equip").GetComponent <Text>().text = "E"; } // アイテムパネルボタン番号を更新 itemPanelButtonNum++; } for (int i = itemPanelButtonNum; i < content.transform.childCount; i++) { content.transform.GetChild(i).gameObject.SetActive(false); } // アイテムパネルの表示と最初のアイテムの選択 if (itemPanelButtonNum != 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 = "アイテムを持っていません。"; selectCharacterPanelCanvasGroup.interactable = true; } }
//捨てる public void ThrowAwayItem(AllyStatus allyStatus, Item item) { //アイテム数を減らす allyStatus.SetItemNum(item, allyStatus.GetItemNum(item) - 1); //アイテム数が0になった時 if (allyStatus.GetItemNum(item) == 0) { //装備している武器を捨てる場合の処理 if (item == allyStatus.GetEquipArmor()) { var equipArmorButton = itemPanelButtonList.Find(itemPanelButton => itemPanelButton.transform.Find("ItemName").GetComponent <Text>().text == item.GetKanjiName()); equipArmorButton.transform.Find("Equip").GetComponent <Text>().text = ""; equipArmorButton = null; allyStatus.SetEquipArmor(null); } else if (item == allyStatus.GetEquipWeapon()) { var equipWeaponButton = itemPanelButtonList.Find(itemPanelButton => itemPanelButton.transform.Find("ItemName").GetComponent <Text>().text == item.GetKanjiName()); equipWeaponButton.transform.Find("Equip").GetComponent <Text>().text = ""; equipWeaponButton = null; allyStatus.SetEquipWeapon(null); } } //ItemPanelの子要素のアイテムパネルボタンから該当するアイテムのボタンを探して数を更新する var itemButton = itemPanelButtonList.Find(obj => obj.transform.Find("ItemName").GetComponent <Text>().text == item.GetKanjiName()); itemButton.transform.Find("Num").GetComponent <Text>().text = allyStatus.GetItemNum(item).ToString(); useItemInformationPanel.GetComponentInChildren <Text>().text = item.GetKanjiName() + "を捨てました。"; //アイテム数が0だったらボタンとキャラクターステータスからアイテムを削除 if (allyStatus.GetItemNum(item) == 0) { selectedGameObjectStack.Pop(); itemPanelButtonList.Remove(itemButton); Destroy(itemButton); allyStatus.GetItemDictionary().Remove(item); currentCommand = CommandMode.NoItemPassed; useItemPanelCanvasGroup.interactable = false; useItemPanel.SetActive(false); useItemInformationPanel.transform.SetAsLastSibling(); useItemInformationPanel.SetActive(true); //ItemPanelに戻る為UseItemPanelの子要素のボタンを全削除 for (int i = useItemPanel.transform.childCount - 1; i >= 0; i--) { Destroy(useItemPanel.transform.GetChild(i).gameObject); } } else { useItemPanelCanvasGroup.interactable = false; useItemInformationPanel.transform.SetAsLastSibling(); useItemInformationPanel.SetActive(true); currentCommand = CommandMode.UseItemPanelToUseItemPanel; } Input.ResetInputAxes(); }
// アイテムをどうするかの選択 public void SelectItem(AllyStatus allyStatus, Item item) { // アイテムの種類に応じて出来る項目を変更する if (item.GetItemType() == Item.Type.Armor || item.GetItemType() == Item.Type.Weapon) { var itemMenuButtonIns = Instantiate <GameObject>(useItemPanelButtonPrefab, useItemPanel.transform); if (item == allyStatus.GetEquipWeapon() || item == allyStatus.GetEquipArmor()) { itemMenuButtonIns.GetComponentInChildren <Text>().text = "そうびをはずす"; itemMenuButtonIns.GetComponent <Button>().onClick.AddListener(() => RemoveEquip(allyStatus, item)); } else { itemMenuButtonIns.GetComponentInChildren <Text>().text = "そうびする"; itemMenuButtonIns.GetComponent <Button>().onClick.AddListener(() => Equip(allyStatus, item)); } itemMenuButtonIns = Instantiate <GameObject>(useItemPanelButtonPrefab, useItemPanel.transform); itemMenuButtonIns.GetComponentInChildren <Text>().text = "すてる"; itemMenuButtonIns.GetComponent <Button>().onClick.AddListener(() => ThrowAwayItem(allyStatus, item)); } else if (item.GetItemType() == Item.Type.ParalyzeRecovery || item.GetItemType() == Item.Type.PoisonRecovery || item.GetItemType() == Item.Type.SilentRecovery || item.GetItemType() == Item.Type.HPRecovery || item.GetItemType() == Item.Type.MPRecovery ) { var itemMenuButtonIns = Instantiate <GameObject>(useItemPanelButtonPrefab, useItemPanel.transform); itemMenuButtonIns.GetComponentInChildren <Text>().text = "つかう"; itemMenuButtonIns.GetComponent <Button>().onClick.AddListener(() => UseItem(allyStatus, item)); itemMenuButtonIns = Instantiate <GameObject>(useItemPanelButtonPrefab, useItemPanel.transform); itemMenuButtonIns.GetComponentInChildren <Text>().text = "すてる"; itemMenuButtonIns.GetComponent <Button>().onClick.AddListener(() => ThrowAwayItem(allyStatus, item)); } else if (item.GetItemType() == Item.Type.Valuables) { informationTitleText.text = item.GetKanjiName(); informationText.text = item.GetInformation(); } if (item.GetItemType() != Item.Type.Valuables) { useItemPanel.SetActive(true); itemPanelCanvasGroup.interactable = false; currentCommand = CommandMode.UseItemPanel; // ItemPanelで最後にどれを選択していたか? selectedGameObjectStack.Push(EventSystem.current.currentSelectedGameObject); useItemPanel.transform.SetAsLastSibling(); EventSystem.current.SetSelectedGameObject(useItemPanel.transform.GetChild(0).gameObject); useItemPanelCanvasGroup.interactable = true; Input.ResetInputAxes(); } }
// 装備する public void Equip(AllyStatus allyStatus, Item item) { // キャラクター毎に装備出来る武器や鎧かどうかを調べ装備を切り替える if (allyStatus.GetCharacterName() == "ゆうしゃ") { if (item.GetItemType() == Item.Type.Armor) { var equipArmorButton = itemPanelButtonList.Find(itemPanelButton => itemPanelButton.transform.Find("ItemName").GetComponent <Text>().text == item.GetKanjiName()); equipArmorButton.transform.Find("Equip").GetComponent <Text>().text = "E"; // 装備している鎧があればItemPanelでEquipのEを外す if (allyStatus.GetEquipArmor() != null) { equipArmorButton = itemPanelButtonList.Find(itemPanelButton => itemPanelButton.transform.Find("ItemName").GetComponent <Text>().text == allyStatus.GetEquipArmor().GetKanjiName()); equipArmorButton.transform.Find("Equip").GetComponent <Text>().text = ""; } allyStatus.SetEquipArmor(item); useItemInformationPanel.GetComponentInChildren <Text>().text = allyStatus.GetCharacterName() + "は" + item.GetKanjiName() + "をそうびした。"; } else if (item.GetItemType() == Item.Type.Weapon) { var equipWeaponButton = itemPanelButtonList.Find(itemPanelButton => itemPanelButton.transform.Find("ItemName").GetComponent <Text>().text == item.GetKanjiName()); equipWeaponButton.transform.Find("Equip").GetComponent <Text>().text = "E"; // 装備している武器があればItemPanelでEquipのEを外す if (allyStatus.GetEquipWeapon() != null) { equipWeaponButton = itemPanelButtonList.Find(itemPanelButton => itemPanelButton.transform.Find("ItemName").GetComponent <Text>().text == allyStatus.GetEquipWeapon().GetKanjiName()); equipWeaponButton.transform.Find("Equip").GetComponent <Text>().text = ""; } allyStatus.SetEquipWeapon(item); useItemInformationPanel.GetComponentInChildren <Text>().text = allyStatus.GetCharacterName() + "は" + item.GetKanjiName() + "をそうびした。"; } else { useItemInformationPanel.GetComponentInChildren <Text>().text = allyStatus.GetCharacterName() + "は" + item.GetKanjiName() + "をそうびできない"; } } // 装備を切り替えたらItemPanelに戻る useItemPanelCanvasGroup.interactable = false; useItemPanel.SetActive(false); itemPanelCanvasGroup.interactable = true; // ItemPanelに戻るのでUseItemPanelの子要素に作ったボタンを全削除 for (int i = useItemPanel.transform.childCount - 1; i >= 0; i--) { Destroy(useItemPanel.transform.GetChild(i).gameObject); } useItemInformationPanel.transform.SetAsLastSibling(); useItemInformationPanel.SetActive(true); currentCommand = CommandMode.UseItemPanelToItemPanel; Input.ResetInputAxes(); }
// ステータスをセーブ用にコピー public void StatusCopy(AllyStatus allyStatus) { // キャラクターの名前 this.characterName = allyStatus.GetCharacterName(); // 毒状態かどうか this.isPoisonState = allyStatus.IsPoisonState(); // 痺れ状態かどうか this.isNumbnessState = allyStatus.IsNumbnessState(); // キャラクターのレベル this.level = allyStatus.GetLevel(); // 素早さ this.agility = allyStatus.GetAgility(); // 力 this.power = allyStatus.GetPower(); // 打たれ強さ this.strikingStrength = allyStatus.GetStrikingStrength(); // 魔法力 this.magicPower = allyStatus.GetMagicPower(); // 攻撃力 this.attackPower = allyStatus.GetAttackPower(); // 守備力 this.defencePower = allyStatus.GetDefencePower(); // 最大HP this.maxHp = allyStatus.GetMaxHp(); // HP this.hp = allyStatus.GetHp(); // 最大MP this.maxMp = allyStatus.GetMaxMp(); // MP this.mp = allyStatus.GetMp(); // 持っているスキル this.skillList = allyStatus.GetSkillList(); //属性カット率 this.cutFlame = allyStatus.GetCutFlame(); this.cutThunder = allyStatus.GetCutThunder(); this.cutIce = allyStatus.GetcutIce(); // 獲得経験値 this.earnedExperience = allyStatus.GetEarnedExperience(); // 装備している武器 this.equipWeapon = allyStatus.GetEquipWeapon(); // 装備している鎧 this.equipArmor = allyStatus.GetEquipArmor(); //装備しているアクセサリ this.equipAccessory1 = allyStatus.GetEquipAccessory1(); this.equipAccessory2 = allyStatus.GetEquipAccessory2(); }
// 装備の更新 public void UpdateEquip() { // 装備の種類ごとに装備を更新する if (chengingEquipType == EquipType.Weapon) { UnequipItemNumSet(changingEquipmentCharacter.GetEquipWeapon()); changingEquipmentCharacter.SetEquipWeapon(selectEquipment as Weapon); } else if (chengingEquipType == EquipType.Armor) { UnequipItemNumSet(changingEquipmentCharacter.GetEquipArmor()); changingEquipmentCharacter.SetEquipArmor(selectEquipment as Armor); } else if (chengingEquipType == EquipType.Accessory1) { UnequipItemNumSet(changingEquipmentCharacter.GetEquipAccessory1()); changingEquipmentCharacter.SetEquipAccessory1(selectEquipment as Accessory); } else if (chengingEquipType == EquipType.Accessory2) { UnequipItemNumSet(changingEquipmentCharacter.GetEquipAccessory2()); changingEquipmentCharacter.SetEquipAccessory2(selectEquipment as Accessory); } // 防御力と攻撃力を更新 changingEquipmentCharacter.SetEquippedAttackPower(); changingEquipmentCharacter.SetEquippedDefencePower(); // 装備したアイテム数を減らす EquipItemNumSet(selectEquipment); // 装備変更ボタンの更新 UpdateEquipButton(changingEquipmentCharacter); //選択アイテム一覧の子要素を全て削除 EquipmentItemClear(); equipmentSelectPanel.SetActive(false); okButton.GetComponent <Button>().interactable = false; ReturnToTopButton.GetComponent <Button>().interactable = true; }
//渡す相手を指定しアイテム数の増減をする public void PassItemToOtherCharacter(AllyStatus fromChara, AllyStatus toChara, Item item) { useItemInformationPanel.SetActive(true); useItemSelectCharacterPanelCanvasGroup.interactable = false; useItemSelectCharacterPanel.SetActive(false); //持っているアイテム数を減らす fromChara.SetItemNum(item, fromChara.GetItemNum(item) - 1); //渡されたキャラクターがアイテムを持っていなければそのアイテムを登録 if (!toChara.GetItemDictionary().ContainsKey(item)) { toChara.SetItemDictionary(item, 0); } //渡されたキャラクターのアイテム数を増やす toChara.SetItemNum(item, toChara.GetItemNum(item) + 1); //アイテムを渡し終わったらアイテムを渡す相手のUseItemSelectCharacterPanelの子要素のボタンを全削除 for (int i = useItemSelectCharacterPanel.transform.childCount - 1; i >= 0; i--) { Destroy(useItemSelectCharacterPanel.transform.GetChild(i).gameObject); } //itemPanleButtonListから該当するアイテムを探し数を更新する var itemButton = itemPanelButtonList.Find(obj => obj.transform.Find("ItemName").GetComponent <Text>().text == item.GetKanjiName()); itemButton.transform.Find("Num").GetComponent <Text>().text = fromChara.GetItemNum(item).ToString(); //アイテムを渡した旨を表示 useItemInformationPanel.GetComponentInChildren <Text>().text = fromChara.GetCharacterName() + "は" + item.GetKanjiName() + "を" + toChara.GetCharacterName() + "に渡しました。"; //アイテム数が0だったらボタンとキャラクターステータスからアイテムを削除 if (fromChara.GetItemNum(item) == 0) { //装備している武器や鎧だったら装備を外す if (fromChara.GetEquipArmor() == item) { fromChara.SetEquipArmor(null); } else if (fromChara.GetEquipWeapon() == item) { fromChara.SetEquipWeapon(null); } //アイテムが0になったら一気にItemPanelに戻す為、UseItemPanel内とUseItemSelectCharacterPanel内でのオブジェクト登録を削除 selectedGameObjectStack.Pop(); selectedGameObjectStack.Pop(); //itemPanelButtonListからアイテムパネルボタンを削除 itemPanelButtonList.Remove(itemButton); //アイテムパネルボタン自身の削除 Destroy(itemButton); //アイテムを渡したキャラクター自身のItemDictionaryからそのアイテムを削除 fromChara.GetItemDictionary().Remove(item); //ItemPanelに戻る為、UseItemPanel内に作ったボタンを全削除 for (int i = useItemPanel.transform.childCount - 1; i >= 0; i--) { Destroy(useItemPanel.transform.GetChild(i).gameObject); } //アイテム数が0になったのでCommandMode.NoItemPassedに変更 currentCommand = CommandMode.NoItemPassed; useItemInformationPanel.transform.SetAsLastSibling(); Input.ResetInputAxes(); } else { //アイテム数が残っている場合はUseItemPanelでアイテムをどうするかの選択に戻る currentCommand = CommandMode.UseItemSelectCharacterPanelToUseItemPanel; useItemInformationPanel.transform.SetAsLastSibling(); Input.ResetInputAxes(); } }
//キャラクターのステータス表示 public void ShowStatus(AllyStatus allyStatus) { currentCommand = CommandMode.StatusPanel; statusPanel.SetActive(true); //キャラクターの名前を表示 characterNameText.text = allyStatus.GetCharacterName(); //タイトルの表示 var text = "レベル\n"; text += "HP\n"; text += "MP\n"; text += "経験値\n"; text += "状態異常\n"; text += "力\n"; text += "素早さ\n"; text += "打たれ強さ\n"; text += "魔法力\n"; text += "装備武器\n"; text += "装備鎧\n"; text += "攻撃力\n"; text += "防御力\n"; statusTitleText.text = text; //HPとMPのDivision記号の表示 text = "\n"; text += allyStatus.GetHp() + "\n"; text += allyStatus.GetMp() + "\n"; statusParam1Text.text = text; //ステータスパラメータの表示 text = allyStatus.GetLevel() + "\n"; text += allyStatus.GetMaxHp() + "\n"; text += allyStatus.GetMaxMp() + "\n"; text += allyStatus.GetEarnedExperience() + "\n"; if (!allyStatus.IsPoisonState() && !allyStatus.IsNumbnessState()) { text += "正常"; } else { if (allyStatus.IsPoisonState()) { text += "毒"; if (allyStatus.IsNumbnessState()) { text += "、痺れ"; } } else { if (allyStatus.IsNumbnessState()) { text += "痺れ"; } } } text += "\n"; text += allyStatus.GetPower() + "\n"; text += allyStatus.GetAgility() + "\n"; text += allyStatus.GetStrikingStrength() + "\n"; text += allyStatus.GetMagicPower() + "\n"; text += allyStatus?.GetEquipWeapon()?.GetKanjiName() ?? ""; text += "\n"; text += allyStatus.GetEquipArmor()?.GetKanjiName() ?? ""; text += "\n"; text += allyStatus.GetPower() + (allyStatus.GetEquipWeapon()?.GetAmount() ?? 0) + "\n"; text += allyStatus.GetStrikingStrength() + (allyStatus.GetEquipArmor()?.GetAmount() ?? 0) + "\n"; statusParam2Text.text = text; }
// 装備ボタンの更新 public void UpdateEquipButton(AllyStatus allyStatus) { AllyStatusDictionary[allyStatus].Find("CharacterNamePanel/CharacterName").GetComponent <Text>().text = allyStatus.GetCharacterName(); AllyStatusDictionary[allyStatus].Find("StatusParamPanel/HPText").GetComponent <Text>().text = "HP: " + allyStatus.GetHp().ToString() + "/" + allyStatus.GetMaxHp().ToString(); AllyStatusDictionary[allyStatus].Find("StatusParamPanel/MPText").GetComponent <Text>().text = "MP: " + allyStatus.GetMp().ToString() + "/" + allyStatus.GetMaxMp().ToString(); AllyStatusDictionary[allyStatus].Find("StatusParamPanel/AttackPowerText").GetComponent <Text>().text = "攻撃力: " + allyStatus.GetAttackPower().ToString(); AllyStatusDictionary[allyStatus].Find("StatusParamPanel/DefencePowerText").GetComponent <Text>().text = "守備力: " + allyStatus.GetDefencePower().ToString(); AllyStatusDictionary[allyStatus].Find("StatusParamPanel/PowerText").GetComponent <Text>().text = "力: " + allyStatus.GetPower().ToString(); AllyStatusDictionary[allyStatus].Find("StatusParamPanel/StrikingStrengthText").GetComponent <Text>().text = "体力: " + allyStatus.GetStrikingStrength().ToString(); AllyStatusDictionary[allyStatus].Find("StatusParamPanel/MagicPowerText").GetComponent <Text>().text = "知力: " + allyStatus.GetMagicPower().ToString(); AllyStatusDictionary[allyStatus].Find("StatusParamPanel/AgilityText").GetComponent <Text>().text = "素早さ: " + allyStatus.GetAgility().ToString(); AllyStatusDictionary[allyStatus].Find("ChangeWeaponPanel/ChangeEquipButton").Find("Text").GetComponent <Text>().text = allyStatus.GetEquipWeapon() ? allyStatus.GetEquipWeapon().GetKanjiName() : "なし"; AllyStatusDictionary[allyStatus].Find("ChangeArmorPanel/ChangeEquipButton").Find("Text").GetComponent <Text>().text = allyStatus.GetEquipArmor() ? allyStatus.GetEquipArmor().GetKanjiName() : "なし"; AllyStatusDictionary[allyStatus].Find("ChangeAccessoryPanel1/ChangeEquipButton").Find("Text").GetComponent <Text>().text = allyStatus.GetEquipAccessory1() ? allyStatus.GetEquipAccessory1().GetKanjiName() : "なし"; AllyStatusDictionary[allyStatus].Find("ChangeAccessoryPanel2/ChangeEquipButton").Find("Text").GetComponent <Text>().text = allyStatus.GetEquipAccessory2() ? allyStatus.GetEquipAccessory2().GetKanjiName() : "なし"; }
// キャラクターのステータス表示 public void ShowStatus(AllyStatus allyStatus) { currentCommand = CommandMode.StatusPanel; statusPanel.SetActive(true); // キャラクターの名前を表示 characterNameText.text = allyStatus.GetCharacterName(); // タイトルの表示 var text = "レベル\n"; text += "HP\n"; text += "MP\n"; text += "けいけんち\n"; text += "たいちょう\n"; text += "ちから\n"; text += "すばやさ\n"; text += "うたれづよさ\n"; text += "まほうりょく\n"; text += "そうびぶき\n"; text += "そうびよろい\n"; text += "こうげきりょく\n"; text += "ぼうぎょりょく\n"; statusTitleText.text = text; // HPとMPのDivision記号の表示 text = "\n"; text += allyStatus.GetHp() + "\n"; text += allyStatus.GetMp() + "\n"; statusParam1Text.text = text; // ステータスパラメータの表示 text = allyStatus.GetLevel() + "\n"; text += allyStatus.GetMaxHp() + "\n"; text += allyStatus.GetMaxMp() + "\n"; text += allyStatus.GetEarnedExperience() + "\n"; if (!allyStatus.IsPoisonState() && !allyStatus.IsParalyzeState() && !allyStatus.IsSilentState()) { text += "ふつう"; } else { if (allyStatus.IsPoisonState()) { text += "どく"; if (allyStatus.IsParalyzeState()) { text += "、しびれ"; if (allyStatus.IsSilentState()) { text += "、ちんもく"; } } } else if (allyStatus.IsParalyzeState()) { text += "しびれ"; if (allyStatus.IsSilentState()) { text += "、ちんもく"; } } else if (allyStatus.IsSilentState()) { text += "ちんもく"; } } text += "\n"; text += allyStatus.GetPower() + "\n"; text += allyStatus.GetAgility() + "\n"; text += allyStatus.GetStrikingStrength() + "\n"; text += allyStatus.GetMagicPower() + "\n"; text += allyStatus?.GetEquipWeapon()?.GetKanjiName() ?? ""; text += "\n"; text += allyStatus.GetEquipArmor()?.GetKanjiName() ?? ""; text += "\n"; text += allyStatus.GetPower() + (allyStatus.GetEquipWeapon()?.GetAmount() ?? 0) + "\n"; text += allyStatus.GetStrikingStrength() + (allyStatus.GetEquipArmor()?.GetAmount() ?? 0) + "\n"; statusParam2Text.text = text; }