diff --git a/Assets/Battle/BattleController.cs b/Assets/Battle/BattleController.cs index c8e0d6c..d7ebcb9 100644 --- a/Assets/Battle/BattleController.cs +++ b/Assets/Battle/BattleController.cs @@ -4,7 +4,7 @@ using System.Linq; using UnityEngine; using UnityEngine.SceneManagement; -public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffectResolver, MonsterViewpoint +public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffectResolver { private bool STABLE_HAND_STYLE = true; @@ -19,10 +19,6 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe private HeroCardDatabase heroCardDatabase; private MonsterCardDatabase monsterCardDatabase; - private BattleHero[] heroes; - - private BattleMonster[] monsters; - private BattleState state; private HandPlayability heroHandPlayability; private HandPlayability monsterHandPlayability; @@ -42,41 +38,23 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe this.heroCardDatabase = new HeroCardDatabase(); this.monsterCardDatabase = new MonsterCardDatabase(); - this.state = new BattleState(); + this.state = new BattleState(parameters); this.heroEnergyUI.Init(this.state.HeroEnergy); this.monsterEnergyUI.Init(this.state.MonsterEnergy); - this.heroes = new BattleHero[parameters.HeroIds.Length]; - for (int i = 0; i < this.heroes.Length; i++) { - HeroId id = parameters.HeroIds[i]; - - BattleHero hero = new BattleHero(id); - hero.Init(); - this.heroes[i] = hero; - } - - this.monsters = new BattleMonster[parameters.MonsterIds.Length]; - for (int i = 0; i < this.monsters.Length; i++) { - MonsterId id = parameters.MonsterIds[i]; - - BattleMonster monster = MonsterDatabase.createMonsterScript(id); - monster.Init(); - this.monsters[i] = monster; - } - - this.battleSprites.Init(this.heroes, this.monsters, this.state); + this.battleSprites.Init(this.state.Heroes, this.state.Monsters, this.state); BattleParticipant[] cardOwners = new BattleParticipant[parameters.HCardIds.Length]; for (int i = 0; i < parameters.HCardIds.Length; i++) { - cardOwners[i] = this.heroes[parameters.HCardOwnerIndexes[i]]; + cardOwners[i] = this.state.Heroes[parameters.HCardOwnerIndexes[i]]; } BattleDeck heroDeck = new BattleDeck( this.heroCardDatabase, parameters.HCardIds.Cast().ToArray(), cardOwners); BattleParticipant[] mCardOwners = new BattleParticipant[parameters.MCardIds.Length]; for (int i = 0; i < parameters.MCardIds.Length; i++) { - mCardOwners[i] = this.monsters[parameters.MCardOwnerIndexes[i]]; + mCardOwners[i] = this.state.Monsters[parameters.MCardOwnerIndexes[i]]; } BattleDeck monsterDeck = new BattleDeck( this.monsterCardDatabase, parameters.MCardIds.Cast().ToArray(), mCardOwners); @@ -112,7 +90,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe this.state.InsightLevel.Modify(+5); }; cheat.OnOneHPCode += delegate { - foreach (BattleMonster m in this.monsters) { + foreach (BattleMonster m in this.state.Monsters) { if (m.IsAlive()) { m.DealDamage(m.GetHP() - 1); } @@ -170,7 +148,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe OnBattleStateChanged(); this.monsterIntentions.ResumeIntentions(); - foreach (BattleHero hero in this.heroes) { + foreach (BattleHero hero in this.state.Heroes) { hero.ResetBlock(); } OnBattleStateChanged(); @@ -191,13 +169,13 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe } // End of hero turn - yield return this.state.PlayArea.UseHeroDefaults(this.heroes, this.participantActivity, UseHeroDefault); + yield return this.state.PlayArea.UseHeroDefaults(this.state.Heroes, this.participantActivity, UseHeroDefault); if (STABLE_HAND_STYLE) { this.state.HeroDeck.DiscardInExcessOf(3); } else { this.state.HeroDeck.DiscardHand(); } - foreach (BattleHero hero in this.heroes) { + foreach (BattleHero hero in this.state.Heroes) { hero.TickStatuses(); } @@ -213,7 +191,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe // Start of monster turn this.state.Clock.AdvanceToStep(RoundStep.StartOfMonsterTurn); this.state.ClearEmotionPlayed(); - foreach (BattleMonster monster in this.monsters) { + foreach (BattleMonster monster in this.state.Monsters) { monster.ResetBlock(); } OnBattleStateChanged(); @@ -247,7 +225,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe } else { this.state.MonsterDeck.DiscardHand(); } - foreach (BattleMonster monster in this.monsters) { + foreach (BattleMonster monster in this.state.Monsters) { monster.TickStatuses(); } @@ -275,7 +253,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe this.state.HeroEnergy.PayForCard(card); this.state.HeroDeck.RemoveCardFromHand(card); this.participantActivity.NotifyParticipantUsedCard(card.Owner, card); - yield return card.Use(this, this, battlePlayerControls); + yield return card.Use(this, this.state, this.battlePlayerControls); if (card.Type == CardType.Default) { // Already added to playArea by effect } else if (card.IsPermanent()) { @@ -295,7 +273,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe yield break; } - yield return card.UseDefault(this, this, battlePlayerControls); + yield return card.UseDefault(this, this.state, this.battlePlayerControls); CheckState(); OnBattleStateChanged(); @@ -304,7 +282,7 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe public IEnumerator UseMonsterCard(MonsterCard card) { this.state.MonsterEnergy.PayForCard(card); this.state.MonsterDeck.RemoveCardFromHand(card); - yield return card.Use(this, this); + yield return card.Use(this, this.state); if (card.IsPermanent()) { this.state.PlayArea.AddPlayedMonsterPermanent(card); } else if (card.IsEphemeral()) { @@ -341,24 +319,24 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe } private void CheckState() { - foreach (BattleParticipant p in this.heroes) { + foreach (BattleParticipant p in this.state.Heroes) { p.CheckState(); } - foreach (BattleParticipant p in this.monsters) { + foreach (BattleParticipant p in this.state.Monsters) { p.CheckState(); } - if (System.Array.TrueForAll(this.heroes, h => !h.IsAlive())) { + if (System.Array.TrueForAll(this.state.Heroes, h => !h.IsAlive())) { BattleResult.FinishBattle(new BattleResult(false)); - } else if (System.Array.TrueForAll(this.monsters, m => !m.IsAlive())) { + } else if (System.Array.TrueForAll(this.state.Monsters, m => !m.IsAlive())) { BattleResult.FinishBattle(new BattleResult(true)); } } private BattleParticipant[] GetTeam(TeamChoice team) { return (team == TeamChoice.Heroes - ? this.heroes.Cast().ToArray() - : this.monsters.Cast().ToArray()); + ? this.state.Heroes.Cast().ToArray() + : this.state.Monsters.Cast().ToArray()); } public BattleState State {get => this.state;} @@ -546,23 +524,16 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe } private void MoveTeamToNewPositions(TeamChoice team, int[] newPositions) { - int n = newPositions.Length; + this.state.MoveTeamToNewPositions(team, newPositions); + if (team == TeamChoice.Heroes) { - BattleHero[] newHeroes = new BattleHero[n]; - for (int i = 0; i < n; i++) { - BattleHero hero = this.heroes[i]; - newHeroes[newPositions[i]] = hero; - this.battleSprites.PositionHero(hero, newPositions[i]); + for (int i = 0; i < this.state.Heroes.Length; i++) { + this.battleSprites.PositionHero(this.state.Heroes[i], i); } - this.heroes = newHeroes; } else { - BattleMonster[] newMonsters = new BattleMonster[n]; - for (int i = 0; i < n; i++) { - BattleMonster monster = this.monsters[i]; - newMonsters[newPositions[i]] = monster; - this.battleSprites.PositionMonster(monster, newPositions[i]); + for (int i = 0; i < this.state.Monsters.Length; i++) { + this.battleSprites.PositionMonster(this.state.Monsters[i], i); } - this.monsters = newMonsters; } } @@ -576,8 +547,4 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe public void ArmDamageTrigger(DamageTrigger damageTrigger) { this.damageTriggers.Add(damageTrigger); } - - // MonsterViewpoint - public BattleHero[] Heroes {get => this.heroes;} - public BattleMonster[] Monsters {get => this.monsters;} } diff --git a/Assets/Battle/BattleState.cs b/Assets/Battle/BattleState.cs index ad9363d..448596e 100644 --- a/Assets/Battle/BattleState.cs +++ b/Assets/Battle/BattleState.cs @@ -3,9 +3,12 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -public class BattleState +public class BattleState: MonsterViewpoint { - private bool playedEmotion; + + private BattleHero[] heroes; + + private BattleMonster[] monsters; private BattleClock clock; private BuffManager buffManager; private EnergyPool heroEnergy; @@ -15,9 +18,11 @@ public class BattleState private PlayArea playArea; private InsightLevel insightLevel; + private bool playedEmotion; + private int STARTING_INSIGHT = 3; - public BattleState() { + public BattleState(BattleParameters parameters) { this.clock = new BattleClock(); this.buffManager = new BuffManager(this.clock); this.heroEnergy = new EnergyPool(); @@ -25,6 +30,23 @@ public class BattleState this.playArea = new PlayArea(); this.insightLevel = new InsightLevel(STARTING_INSIGHT); + this.heroes = new BattleHero[parameters.HeroIds.Length]; + for (int i = 0; i < this.heroes.Length; i++) { + HeroId id = parameters.HeroIds[i]; + + BattleHero hero = new BattleHero(id); + hero.Init(); + this.heroes[i] = hero; + } + + this.monsters = new BattleMonster[parameters.MonsterIds.Length]; + for (int i = 0; i < this.monsters.Length; i++) { + MonsterId id = parameters.MonsterIds[i]; + + BattleMonster monster = MonsterDatabase.createMonsterScript(id); + monster.Init(); + this.monsters[i] = monster; + } } public void SetDecks(BattleDeck heroDeck, BattleDeck monsterDeck) { @@ -57,6 +79,27 @@ public class BattleState this.playedEmotion = false; } + public void MoveTeamToNewPositions(TeamChoice team, int[] newPositions) { + int n = newPositions.Length; + if (team == TeamChoice.Heroes) { + BattleHero[] newHeroes = new BattleHero[n]; + for (int i = 0; i < n; i++) { + BattleHero hero = this.heroes[i]; + newHeroes[newPositions[i]] = hero; + } + this.heroes = newHeroes; + } else { + BattleMonster[] newMonsters = new BattleMonster[n]; + for (int i = 0; i < n; i++) { + BattleMonster monster = this.monsters[i]; + newMonsters[newPositions[i]] = monster; + } + this.monsters = newMonsters; + } + } + + public BattleHero[] Heroes {get => this.heroes;} + public BattleMonster[] Monsters {get => this.monsters;} public BattleClock Clock {get => this.clock;} public BuffManager BuffManager {get => this.buffManager;}