/// <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(); }); }
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(); }