Ejemplo n.º 1
0
        /// <summary>
        /// Execute end turn command
        /// </summary>
        public override void Execute()
        {
            RefreshHandSignal.Dispatch();
            RefreshArenaSignal.Dispatch();

            // Activate battle cards
            ActivateBattleCardsSignal.Dispatch();

            // Switch active state
            BattleArena.ActiveSide =
                BattleArena.ActiveSide == BattleSide.Player ? BattleSide.Opponent : BattleSide.Player;

            RefreshHistoryLog.Dispatch();
            // refresh opponent views
            RefreshHandSignal.Dispatch();
            RefreshArenaSignal.Dispatch();

            // Check is game over
            if (BattleArena.IsGameOver())
            {
                EndGameSignal.Dispatch();
                return;
            }

            // Init battle turn
            InitBattleTurnSignal.Dispatch();
        }
        /// <summary>
        /// On register mediator
        /// </summary>
        public override void OnRegister()
        {
            View.OnAddCartToBattleArena += AddCardToBattleArena;

            RefreshArenaSignal.AddListener(() =>
            {
                if (BattleArena.ActiveSide != View.Side)
                {
                    return;
                }
                _cardUnitViews.Clear();
                foreach (Transform child in View.transform)
                {
                    var view = child.GetComponent <BattleUnitView>();
                    _cardUnitViews.Add(view);
                }

                BattleArena.ArenaCardsCount = _cardUnitViews.Count;
            });

            ActivateBattleCardsSignal.AddListener(() =>
            {
                if (BattleArena.ActiveSide != View.Side)
                {
                    return;
                }
                ActivateBattleCards();
            });
        }
Ejemplo n.º 3
0
        public override void Execute()
        {
            var activePlayer = BattleArena.GetActivePlayer();
            var sourceCard   = DamageStruct.SourceCardView.Card;
            var damageCard   = DamageStruct.DamageCardView.Card;

            if (sourceCard.TakeDamage(damageCard))
            {
                AddHistoryLogSignal.Dispatch(new[]
                {
                    "Player '", activePlayer.Name, "' Use Card '", damageCard.SourceCard.name,
                    "' hit CRITICAL on '", sourceCard.CriticalDamage.ToString(), "' to enemy Card '",
                    sourceCard.SourceCard.name, "' "
                }, LogType.Battle);
            }
            else
            {
                AddHistoryLogSignal.Dispatch(new[]
                {
                    "Player '", activePlayer.Name, "' Use Card '", damageCard.SourceCard.name,
                    "' hit enemy Card '", sourceCard.SourceCard.name, "' take damage '", damageCard.Attack.ToString(),
                    "'"
                }, LogType.Battle);
            }

            // Enemy cart return attack
            damageCard.TakeDamage(sourceCard, false);
            AddHistoryLogSignal.Dispatch(new[]
            {
                "Enemy Card '", sourceCard.SourceCard.name,
                "' return  damage '", sourceCard.Attack.ToString(), "' to '", damageCard.SourceCard.name, "'"
            }, LogType.Battle);


            if (damageCard.Status == BattleStatus.Dead)
            {
                AddHistoryLogSignal.Dispatch(new[] { "Player Card '", damageCard.SourceCard.name, "' has dead!" },
                                             LogType.Battle);
                DamageStruct.DamageCardView.DestroyView();
            }
            else
            {
                damageCard.Status = BattleStatus.Sleep;
                AddHistoryLogSignal.Dispatch(new[]
                {
                    "Player card '", damageCard.SourceCard.name, "' has '", damageCard.Health.ToString(),
                    "' Health and '", damageCard.Defence.ToString(), "' Defence"
                }, LogType.Battle);
                DamageStruct.DamageCardView.Init(damageCard);
            }

            if (sourceCard.Status == BattleStatus.Dead)
            {
                AddHistoryLogSignal.Dispatch(new[] { "Enemy Card '", sourceCard.SourceCard.name, "' has dead!" },
                                             LogType.Battle);
                DamageStruct.SourceCardView.DestroyView();
            }
            else
            {
                AddHistoryLogSignal.Dispatch(new[]
                {
                    "Enemy card '", sourceCard.SourceCard.name, "' has '", sourceCard.Health.ToString(),
                    "' Health and '", sourceCard.Defence.ToString(), "' Defence"
                }, LogType.Battle);
                DamageStruct.SourceCardView.Init(sourceCard);
            }

            DamageStruct.DamageCardView.HasAttack = false;
            BattleArena.AttackUnit.HasActive      = false;
            BattleArena.AttackUnit = null;
            InitAttackLineSignal.Dispatch(false);
            RefreshArenaSignal.Dispatch();
        }