BattleSprites now observes hero and monster positions

This commit is contained in:
henriquenakashima 2020-10-13 22:33:12 -04:00
parent 2e5a971581
commit 6aa13cdbb7
3 changed files with 30 additions and 15 deletions

View file

@ -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) { private static int TrueMod(int a, int b) {
return (a % b + b) % 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) { public void SetupDefault(DefaultEffect effect) {
DefaultHeroCard previousDefault = this.state.PlayArea.SetupDefault(effect); DefaultHeroCard previousDefault = this.state.PlayArea.SetupDefault(effect);
if (previousDefault != null) { if (previousDefault != null) {

View file

@ -11,12 +11,14 @@ public class BattleSprites: MonoBehaviour
public RuntimeAnimatorController mRuntimeAnimatorController; public RuntimeAnimatorController mRuntimeAnimatorController;
public BattlePlayerControls mBattlePlayerControls; public BattlePlayerControls mBattlePlayerControls;
private BattleState mState;
private Dictionary<BattleHero, GameObject> mHeroSprites; private Dictionary<BattleHero, GameObject> mHeroSprites;
private Dictionary<BattleHero, HeroInfoUI> mHeroUIs; private Dictionary<BattleHero, HeroInfoUI> mHeroUIs;
private Dictionary<BattleMonster, GameObject> mMonsterSprites; private Dictionary<BattleMonster, GameObject> mMonsterSprites;
private Dictionary<BattleMonster, HeroInfoUI> mMonsterUIs; private Dictionary<BattleMonster, HeroInfoUI> mMonsterUIs;
public void Init(BattleHero[] heroes, BattleMonster[] monsters, BattleState battleState) { public void Init(BattleHero[] heroes, BattleMonster[] monsters, BattleState battleState) {
mState = battleState;
mHeroSprites = new Dictionary<BattleHero, GameObject>(); mHeroSprites = new Dictionary<BattleHero, GameObject>();
mHeroUIs = new Dictionary<BattleHero, HeroInfoUI>(); mHeroUIs = new Dictionary<BattleHero, HeroInfoUI>();
mMonsterSprites = new Dictionary<BattleMonster, GameObject>(); mMonsterSprites = new Dictionary<BattleMonster, GameObject>();
@ -56,6 +58,8 @@ public class BattleSprites: MonoBehaviour
mMonsterUIs[monster] = monsterUI; mMonsterUIs[monster] = monsterUI;
} }
mState.OnHeroPositionsSet += this.RepositionHeroes;
mState.OnMonsterPositionsSet += this.RepositionMonsters;
} }
private void PositionSprite(TeamChoice team, GameObject sprite, int i) { private void PositionSprite(TeamChoice team, GameObject sprite, int i) {
@ -75,4 +79,16 @@ public class BattleSprites: MonoBehaviour
public void PositionMonster(BattleMonster monster, int i) { public void PositionMonster(BattleMonster monster, int i) {
PositionSprite(TeamChoice.Monsters, mMonsterSprites[monster], 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);
}
}
} }

View file

@ -5,6 +5,9 @@ using UnityEngine;
public class BattleState: MonsterViewpoint public class BattleState: MonsterViewpoint
{ {
public delegate void Procedure();
public event Procedure OnHeroPositionsSet;
public event Procedure OnMonsterPositionsSet;
private BattleHero[] heroes; private BattleHero[] heroes;
@ -88,6 +91,7 @@ public class BattleState: MonsterViewpoint
newHeroes[newPositions[i]] = hero; newHeroes[newPositions[i]] = hero;
} }
this.heroes = newHeroes; this.heroes = newHeroes;
TriggerOnHeroPositionsSet();
} else { } else {
BattleMonster[] newMonsters = new BattleMonster[n]; BattleMonster[] newMonsters = new BattleMonster[n];
for (int i = 0; i < n; i++) { for (int i = 0; i < n; i++) {
@ -95,9 +99,18 @@ public class BattleState: MonsterViewpoint
newMonsters[newPositions[i]] = monster; newMonsters[newPositions[i]] = monster;
} }
this.monsters = newMonsters; 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 BattleHero[] Heroes {get => this.heroes;}
public BattleMonster[] Monsters {get => this.monsters;} public BattleMonster[] Monsters {get => this.monsters;}
public BattleClock Clock {get => this.clock;} public BattleClock Clock {get => this.clock;}