diff --git a/Assets/Battle/BattleController.cs b/Assets/Battle/BattleController.cs index d7ebcb9..9810c1a 100644 --- a/Assets/Battle/BattleController.cs +++ b/Assets/Battle/BattleController.cs @@ -516,27 +516,13 @@ public class BattleController : MonoBehaviour, IBattleEffectApplier, IBattleEffe } } - MoveTeamToNewPositions(effect.Team, newPositions); + this.state.MoveTeamToNewPositions(effect.Team, newPositions); } private static int TrueMod(int a, int b) { return (a % b + b) % b; } - private void MoveTeamToNewPositions(TeamChoice team, int[] newPositions) { - this.state.MoveTeamToNewPositions(team, newPositions); - - if (team == TeamChoice.Heroes) { - for (int i = 0; i < this.state.Heroes.Length; i++) { - this.battleSprites.PositionHero(this.state.Heroes[i], i); - } - } else { - for (int i = 0; i < this.state.Monsters.Length; i++) { - this.battleSprites.PositionMonster(this.state.Monsters[i], i); - } - } - } - public void SetupDefault(DefaultEffect effect) { DefaultHeroCard previousDefault = this.state.PlayArea.SetupDefault(effect); if (previousDefault != null) { diff --git a/Assets/Battle/BattleSprites.cs b/Assets/Battle/BattleSprites.cs index 8d59798..7ef7803 100644 --- a/Assets/Battle/BattleSprites.cs +++ b/Assets/Battle/BattleSprites.cs @@ -11,12 +11,14 @@ public class BattleSprites: MonoBehaviour public RuntimeAnimatorController mRuntimeAnimatorController; public BattlePlayerControls mBattlePlayerControls; + private BattleState mState; private Dictionary mHeroSprites; private Dictionary mHeroUIs; private Dictionary mMonsterSprites; private Dictionary mMonsterUIs; public void Init(BattleHero[] heroes, BattleMonster[] monsters, BattleState battleState) { + mState = battleState; mHeroSprites = new Dictionary(); mHeroUIs = new Dictionary(); mMonsterSprites = new Dictionary(); @@ -56,6 +58,8 @@ public class BattleSprites: MonoBehaviour mMonsterUIs[monster] = monsterUI; } + mState.OnHeroPositionsSet += this.RepositionHeroes; + mState.OnMonsterPositionsSet += this.RepositionMonsters; } private void PositionSprite(TeamChoice team, GameObject sprite, int i) { @@ -75,4 +79,16 @@ public class BattleSprites: MonoBehaviour public void PositionMonster(BattleMonster monster, int i) { PositionSprite(TeamChoice.Monsters, mMonsterSprites[monster], i); } + + private void RepositionHeroes() { + for (int i = 0; i < mState.Heroes.Length; i++) { + PositionHero(mState.Heroes[i], i); + } + } + + private void RepositionMonsters() { + for (int i = 0; i < mState.Monsters.Length; i++) { + PositionMonster(mState.Monsters[i], i); + } + } } diff --git a/Assets/Battle/BattleState.cs b/Assets/Battle/BattleState.cs index 448596e..66c138e 100644 --- a/Assets/Battle/BattleState.cs +++ b/Assets/Battle/BattleState.cs @@ -5,6 +5,9 @@ using UnityEngine; public class BattleState: MonsterViewpoint { + public delegate void Procedure(); + public event Procedure OnHeroPositionsSet; + public event Procedure OnMonsterPositionsSet; private BattleHero[] heroes; @@ -88,6 +91,7 @@ public class BattleState: MonsterViewpoint newHeroes[newPositions[i]] = hero; } this.heroes = newHeroes; + TriggerOnHeroPositionsSet(); } else { BattleMonster[] newMonsters = new BattleMonster[n]; for (int i = 0; i < n; i++) { @@ -95,9 +99,18 @@ public class BattleState: MonsterViewpoint newMonsters[newPositions[i]] = monster; } this.monsters = newMonsters; + TriggerOnMonsterPositionsSet(); } } + private void TriggerOnHeroPositionsSet() { + if (OnHeroPositionsSet != null) OnHeroPositionsSet(); + } + + private void TriggerOnMonsterPositionsSet() { + if (OnMonsterPositionsSet != null) OnMonsterPositionsSet(); + } + public BattleHero[] Heroes {get => this.heroes;} public BattleMonster[] Monsters {get => this.monsters;} public BattleClock Clock {get => this.clock;}