// キャラクターが持っているアイテムのボタン表示 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 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 UseItemToCharacter(AllyStatus fromChara, AllyStatus toChara, Item item) { useItemInformationPanel.SetActive(true); useItemSelectCharacterPanelCanvasGroup.interactable = false; useItemSelectCharacterPanel.SetActive(false); if (item.GetItemType() == Item.Type.HPRecovery) { if (toChara.GetHp() == toChara.GetMaxHp()) { useItemInformationPanel.GetComponentInChildren <Text>().text = toChara.GetCharacterName() + "は元気です。"; } else { toChara.SetHp(toChara.GetHp() + item.GetAmount()); //アイテムを使用した旨を表示 useItemInformationPanel.GetComponentInChildren <Text>().text = fromChara.GetCharacterName() + "は" + item.GetKanjiName() + "を" + toChara.GetCharacterName() + "に使用しました。\n" + toChara.GetCharacterName() + "は" + item.GetAmount() + "回復しました。"; //持っているアイテム数を減らす fromChara.SetItemNum(item, fromChara.GetItemNum(item) - 1); } } else if (item.GetItemType() == Item.Type.MPRecovery) { if (toChara.GetMp() == toChara.GetMaxMp()) { useItemInformationPanel.GetComponentInChildren <Text>().text = toChara.GetCharacterName() + "のMPは最大です。"; } else { toChara.SetMp(toChara.GetMp() + item.GetAmount()); //アイテムを使用した旨を表示 useItemInformationPanel.GetComponentInChildren <Text>().text = fromChara.GetCharacterName() + "は" + item.GetKanjiName() + "を" + toChara.GetCharacterName() + "に使用しました。\n" + toChara.GetCharacterName() + "はMPを" + item.GetAmount() + "回復しました。"; //持っているアイテム数を減らす fromChara.SetItemNum(item, fromChara.GetItemNum(item) - 1); } } else if (item.GetItemType() == Item.Type.PoisonRecovery) { if (!toChara.IsPoisonState()) { useItemInformationPanel.GetComponentInChildren <Text>().text = toChara.GetCharacterName() + "は毒状態ではありません。"; } else { useItemInformationPanel.GetComponentInChildren <Text>().text = toChara.GetCharacterName() + "は毒から回復しました。"; toChara.SetPoisonState(false); //持っているアイテム数を減らす fromChara.SetItemNum(item, fromChara.GetItemNum(item) - 1); } } else if (item.GetItemType() == Item.Type.NumbnessRecovery) { if (!toChara.IsPoisonState()) { useItemInformationPanel.GetComponentInChildren <Text>().text = toChara.GetCharacterName() + "は痺れ状態ではありません。"; } else { useItemInformationPanel.GetComponentInChildren <Text>().text = toChara.GetCharacterName() + "は痺れから回復しました。"; toChara.SetNumbness(false); //持っているアイテム数を減らす fromChara.SetItemNum(item, fromChara.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(); //アイテム数が0だったらボタンとキャラクターステータスからアイテムを削除 if (fromChara.GetItemNum(item) == 0) { //アイテムが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(); } }