// フィールドを生成する。 private void CreateField() { // マス目数分 for (int y = FieldGridController.GRID_Y_MIN; y <= FieldGridController.GRID_Y_MAX; y++) { for (int x = FieldGridController.GRID_X_MIN; x <= FieldGridController.GRID_X_MAX; x++) { FieldGridController fieldGrid = Instantiate(fieldGridPrefub, fieldTranform, false); fieldGrid.gridPosition = new Vector2Int(x, y); fieldGrid.name = "Grid" + "Y" + y + "X" + x; fieldGrid.transform.SetParent(fieldTranform, false); } } }
// カード同士で戦闘する。 public void CardBattle(CardController attacker) { // 四方に対して、カードが存在した場合に双方で攻撃を行う。 foreach (var pair in AllAroundDirection) { CardController defender = GetArroundCard(attacker, pair.Value); // カード自体が存在しない場合 if (defender == null) { continue; } // 敵でない場合 if (attacker.model.gameSide == defender.model.gameSide) { continue; } attacker.Attack(defender, pair.Key); defender.Attack(attacker, DirectionUtil.getReverse(pair.Key)); // attacker.RefreshView(); // defender.RefreshView(); // 死んでいたら、底にカードを置けるようにする。 // カードは死ぬ。 // 再度そこにカードを置けるようにする。 if (attacker.IsDeath()) { FieldGridController controller = attacker.GetComponentInParent <FieldGridController>(); controller.GetComponent <DropCardToFieldEvent>().enabled = true; attacker.Death(); // 死亡回数をカウントする。 GameManager.instance.IncrementDeathCount(GameSide.Player); } if (defender.IsDeath()) { FieldGridController controller = defender.GetComponentInParent <FieldGridController>(); controller.GetComponent <DropCardToFieldEvent>().enabled = true; defender.Death(); GameManager.instance.IncrementDeathCount(GameSide.Enemy); } } }
// ドロップイベント public void OnDrop(PointerEventData eventData) { // カードの配置先を自身に切り替える。 CardMoveEvent cardMove = eventData.pointerDrag.GetComponent <CardMoveEvent>(); CardController card = cardMove.GetComponent <CardController>(); // 移動可能なカード(=手札)でなければフィールドには出せない。 if (!cardMove.isMovable) { return; } // ヒエラルキー上の配置をフィールドに設定する。 cardMove.defaultParent = this.transform; // フィールドへのカードの二重配置がされないようにイベントを無効化する。 this.enabled = false; // 召喚の処理を行う。 FieldGridController fieldGrid = GetComponent <FieldGridController>(); StartCoroutine(GameManager.instance.Summon(card, fieldGrid)); }
// カードをフィールドに召喚する。 public IEnumerator Summon(CardController card, FieldGridController fieldGrid) { // 自動レイアウトの再計算を待つため、フレームの終わりまで待機する。 // = Cardの親をFieldGridに配置するまで待ちたいため。 card.gameObject.transform.SetParent(fieldGrid.transform); yield return(new WaitForEndOfFrame()); // フィールド上の座標を設定する。 card.model.gridPosition = fieldGrid.gridPosition; card.model.cardPlace = CardPlace.FIELD; fieldGrid.GetComponent <Image>().color = card.model.gameSide == GameSide.Player ? new Color(0.2f, 0.2f, 0.5f, 1.0f) : new Color(0.5f, 0.2f, 0.2f, 1.0f); // 攻撃ゲージオブジェクトを作成する。 AttackGageController attackGage = Instantiate(attackGagePrefub, fieldGrid.transform, false); attackGage.Init(); attackGage.model.card = card; attackGage.transform.SetParent(card.transform, false); // カードを1枚ドローする。 DrawCard(card.model.gameSide); // 手札枚数のカウントを1減らす。 DecrementHandCount(card.model.gameSide); // マナを消費する。 GetPlayerMana(card.model.gameSide).model.ConsumeMana(card.model.cost); // 召喚時のアニメーション // card.ExtendCardParameterAnimation(); // 召喚時のエフェクトを発動する。 card.UseSkill(Skill.Timing.Summon); }