using System.Collections.Generic; using System.Linq; using UniRx; public class CardSlotManager { public List<CardSlot> CardSlotList { get; private set; } // new¤Ç½é´ü²½¤â¤Ç¤¤ë private CompositeDisposable disposables = new(); // CompositeDisposable¤ò½é´ü²½ // ¥Ç¥Ð¥Ã¥°ÍÑ private OwnerStatus[] slotStatus = new OwnerStatus[4] { OwnerStatus.Player, OwnerStatus.Player, OwnerStatus.Opponent, OwnerStatus.Opponent }; public List<CardController> setPlayerCardList = new(); // ¥¹¥í¥Ã¥È¤Ë¥»¥Ã¥È¤·¤¿¥×¥ì¥¤¥ä¡¼¤Î¥«¡¼¥É·² /// <summary> /// ¥³¥ó¥¹¥È¥é¥¯¥¿ /// </summary> /// <param name="battleEventManager"></param> /// <param name="newCardSlotList"></param> public CardSlotManager(BattleEventManager battleEventManager, List<CardSlot> newCardSlotList) { CardSlotList = new(newCardSlotList); foreach (var cardSlot in CardSlotList) { cardSlot.OnClickAsObservable .Where(_ => battleEventManager.selectedCard != null) .Where(_ => cardSlot.owner == OwnerStatus.Player) .Where(_ => cardSlot.cardController == null) .Subscribe(_ => { // ¥¹¥í¥Ã¥È¤Ë¥«¡¼¥É¤òÇÛÃÖ OnClickCardSlot(cardSlot, battleEventManager.selectedCard); setPlayerCardList.Add(battleEventManager.selectedCard); // ÁªÂò¤·¤Æ¤¤¤¿¥«¡¼¥É¤ò²ò½ü battleEventManager.RemoveCard(); PopupManager.instance.HideDescription(); // Á´¤Æ¤Î¥¹¥í¥Ã¥È¤Ë¥«¡¼¥É¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¤«³Îǧ if (CardSlotList.All(slot => slot.cardController != null)) { battleEventManager.OnCardSet(); } }) .AddTo(disposables); } } /// <summary> /// ¥¹¥í¥Ã¥È¤Ë¥«¡¼¥É¤òÇÛÃÖ /// </summary> /// <param name="cardSlot"></param> /// <param name="cardController"></param> private void OnClickCardSlot(CardSlot cardSlot, CardController selectedCard) { cardSlot.SetCard(selectedCard); } /// <summary> /// ÉÔɬÍפʥ꥽¡¼¥¹¤ò¤Þ¤È¤á¤Æ²òÊü /// </summary> public void Dispose() { disposables.Dispose(); } /// <summary> /// ¥«¡¼¥É¥¹¥í¥Ã¥È¤Î¥é¥ó¥À¥à¤Ê2²Õ½ê¤òÂÐÀïÁê¼êÍѤΥ¹¥í¥Ã¥È¤ËÀßÄê /// </summary> public void SetOpponentCardSlotsRandomly() { slotStatus = slotStatus.OrderBy(_ => UnityEngine.Random.value).ToArray(); for (int i = 0; i < slotStatus.Length; i++) { CardSlotList[i].ChangeStatus(slotStatus[i]); } } /// <summary> /// ¥¹¥í¥Ã¥È¤Ë¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ë¥«¡¼¥É¤Î¤¦¤Á¡¢»ØÄꤷ¤¿OwnerStatus¤Î¥«¡¼¥É¤òÇË´þ /// </summary> /// <param name="target"></param> public void DeleteCardsFromSlots(OwnerStatus target) { foreach (var slot in CardSlotList) { if (slot.owner == target && slot.cardController != null) { slot.DeleteCard(); } } // ¾åµ¤òLinq¤Ç //CardSlotList // .Where(slot => slot.owner == target && slot.cardController != null) // .ToList() // .ForEach(slot => slot.DeleteCard()); if (target == OwnerStatus.Player) { setPlayerCardList.Clear(); } } /// <summary> /// ¥¹¥í¥Ã¥È¤Ë¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤ëÁ´¤Æ¤Î¥«¡¼¥É¤òÇË´þ /// </summary> public void DeleteAllCardsFromSlots() { foreach (var slot in CardSlotList) { if (slot.cardController != null) { slot.DeleteCard(); } } // ¾åµ¤òLinq¤Ç //CardSlotList // .Where(slot => slot.cardController != null) // .ToList() // .ForEach(slot => slot.DeleteCard()); setPlayerCardList.Clear(); } }
using System.Collections.Generic; [System.Serializable] public class HandCardManagerBase { public List<CardController> cardList; // ¼ê»¥¤Î¥ê¥¹¥È /// <summary> /// ¥³¥ó¥¹¥È¥é¥¯¥¿ /// </summary> /// <param name="newCardList"></param> public HandCardManagerBase(List<CardController> newCardList) { cardList = new(newCardList); } /// <summary> /// ¼ê»¥¤òÁ´¤ÆÇË´þ /// </summary> public virtual void DestroyHandCards() { for (int i = 0; i < cardList.Count; i++) { UnityEngine.MonoBehaviour.Destroy(cardList[i].gameObject); } //cardList.Clear(); } /// <summary> /// º£²óÍøÍѤ·¤¿¥«¡¼¥É¤Ë¥¯¡¼¥ë¥¿¥¤¥à¤òÀßÄê /// </summary> /// <param name="setCardList"></param> public void SetCoolTimeCard(CardController card) { //UnityEngine.Debug.Log($"°ú¿ô¡§{card}"); //UnityEngine.Debug.Log($"CardData¡§{card.CardData}"); card.SetCoolTime(card.CardData.coolTime); } /// <summary> /// ¥«¡¼¥É¤Î¥¯¡¼¥ë¥¿¥¤¥à¤ò¹¹¿· /// </summary> /// <param name="setCardList"></param> public void UpdateCoolTimeCard(CardController card) { card.UpdateCoolTime(); } }
using System.Collections.Generic; using System.Linq; using UniRx; using UnityEngine.Events; public class PlayerHandCardManager : HandCardManagerBase { /// <summary> /// ¥³¥ó¥¹¥È¥é¥¯¥¿¡£base¤ÇCardList¤ò½é´ü²½ºÑ¤ß /// </summary> /// <param name="newCardList"></param> /// <param name="selectCardAction"></param> public PlayerHandCardManager(List<CardController> newCardList, UnityAction<CardController> selectCardAction) : base(newCardList) // HandCardManagerBase¤Î¥³¥ó¥¹¥È¥é¥¯¥¿¤ËnewCardList¤òÅϤ·¡¢½é´ü²½ { foreach (var card in cardList) { card.OnClickAsObservable .ThrottleFirst(System.TimeSpan.FromSeconds(0.3f)) .Where(_ => !card.IsSelectable.Value) .Subscribe(_ => selectCardAction?.Invoke(card)) // (ÊÑ¿ô?)¤Çnull¥Á¥§¥Ã¥¯¡¢(.¥á¥½¥Ã¥É̾¤Ê¤É)¤Çnull¤Ç¤Ê¤¤»þ¤Î½èÍý .AddTo(card); } } /// <summary> /// ¥¹¥í¥Ã¥È¤ËÇÛÃÖ¤·¤¿¥«¡¼¥É¤òºÆÅÙÁªÂò²Äǽ¤Ë¤¹¤ë /// </summary> /// <param name="setCardList"></param> public void ActivateSelectedCards(List<CardController> setCardList) { //foreach (var card in cardList) //{ // for (int i = 0; i < setCardList.Count; i++) // { // if (card == setCardList[i]) // { // card.IsSelectable.Value = false; // } // } //} // ¾åµ¤òLinq¤Ç foreach (var card in cardList.Intersect(setCardList)) // Intersect¥á¥½¥Ã¥É¤Ï2¤Ä¤Î¥ê¥¹¥È¤Î¶¦Ä̤ÎÍ×ÁǤòÊÖ¤¹¡£¤½¤Î¤¿¤á¡¢cardList¤ÈsetCardList¤Î¶¦Ä̤ÎÍ×ÁǤÀ¤±¤¬½èÍý¤ÎÂоݤȤʤ롣 { card.IsSelectable.Value = false; } // ¹¹¤ËLinq¤Ç½ñ¤¤¤¿¾ì¹ç¤À¤¬¡¢¤³¤ì¤ÏÄ̾ï¤Îbool(ÃÍ·¿)¤Ê¤éÆ°¤¯¤¬¡¢º£²ó¤ÏReactiveProperty(»²¾È·¿)¤Ê¤Î¤Ç¡¢Àµ¾ï¤ËÆ°¤«¤Ê¤¤ //cardList.Intersect(setCardList).Select(card => card.IsSelectable.Value = false); } /// <summary> /// ¥«¡¼¥É¤òÁªÂòÉԲĤˤ¹¤ë /// </summary> /// <param name="card"></param> public void InactivateCard(CardController card) { cardList.Find(x => card).SetSelectable(true); } /// <summary> /// º£²óÍøÍѤ·¤¿¥«¡¼¥É¤Ë¥¯¡¼¥ë¥¿¥¤¥à¤òÀßÄê /// </summary> /// <param name="setCardList"></param> public void SetCoolTimeCards(List<CardController> setCardList) { foreach (CardController card in cardList.Intersect(setCardList)) { card.SetCoolTime(card.CardData.coolTime); } } /// <summary> /// ¥«¡¼¥É¤Î¥¯¡¼¥ë¥¿¥¤¥à¤ò¹¹¿· /// </summary> /// <param name="setCardList"></param> public void UpdateCoolTimeCards(List<CardController> setCardList) { foreach (CardController card in cardList.Except(setCardList)) // ¶¦Ä̤·¤Æ¤¤¤Ê¤¤¤â¤Î¤ò¼è¤ê½Ð¤¹ { card.UpdateCoolTime(); } } }
using System.Collections.Generic; using System.Linq; using UnityEngine; public class OpponentHandCardManager : HandCardManagerBase { private CardSlotManager cardSlotManager; /// <summary> /// ¥³¥ó¥¹¥È¥é¥¯¥¿ /// </summary> /// <param name="newCardList"></param> /// <param name="cardSlotManager"></param> public OpponentHandCardManager(List<CardController> newCardList, CardSlotManager cardSlotManager) : base(newCardList) { if (cardSlotManager != null) { this.cardSlotManager = cardSlotManager; } } /// <summary> /// ÂÐÀïÁê¼êÍѤΥ¹¥í¥Ã¥È¤Ë¥é¥ó¥À¥à¤Ê¥«¡¼¥É¤òÇÛÃÖ /// </summary> public void SetSlotsRandomCard() { // ¥«¡¼¥É¥¹¥í¥Ã¥È¤ÎÃ椫¤éÂÐÀïÁê¼êÍѤΥ¹¥í¥Ã¥È¤Î¤ß¤òÃê½Ð(2¤Ä¼èÆÀ¤Ç¤¤ë) List<CardSlot> slots = cardSlotManager.CardSlotList.Where(slot => slot.owner == OwnerStatus.Opponent).ToList(); // ÂÐÀïÁê¼ê¤¬½ê»ý¤·¤Æ¤¤¤ë¥«¡¼¥É¤ÎÃ椫¤é¥é¥ó¥À¥à¤Ê¥«¡¼¥É¤ò2ËçÃê½Ð List<CardController> tempCardList = cardList.OrderBy(_ => Random.value).Take(slots.Count).ToList(); // ¥«¡¼¥É¥¹¥í¥Ã¥È¤Ë¥«¡¼¥É¤òÇÛÃÖ for (int i = 0; i < slots.Count; i++) { slots[i].SetCard(tempCardList[i]); } } }