using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; public class BattleSprites: MonoBehaviour { public HeroInfoUI mHeroUIPrefab; public GameObject mUiCanvas; public Material mHitEffectMaterial; 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(); mMonsterUIs = new Dictionary(); for (int i = 0; i < heroes.Length; i++) { BattleHero hero = heroes[i]; GameObject sprite = HeroDatabase.createHeroSprite(hero.Id); mHeroSprites[hero] = sprite; sprite.name = "Hero" + i + "_Sprite"; PositionSprite(TeamChoice.Heroes, sprite, i); BattleParticipantSprite bps = sprite.AddComponent(); bps.Init(mBattlePlayerControls, hero, mHitEffectMaterial, mRuntimeAnimatorController); bps.OnSpriteClicked += mBattlePlayerControls.NotifyParticipantSpriteClicked; hero.OnHit += bps.NotifyHit; hero.OnDeath += bps.NotifyDeath; HeroInfoUI heroUI = (HeroInfoUI) Instantiate(mHeroUIPrefab.gameObject, mUiCanvas.transform).GetComponent(typeof(HeroInfoUI)); heroUI.Init(sprite, hero, battleState); mHeroUIs[hero] = heroUI; } for (int i = 0; i < monsters.Length; i++) { BattleMonster monster = monsters[i]; GameObject sprite = MonsterDatabase.createMonsterSprite(monster.Id); mMonsterSprites[monster] = sprite; sprite.name = "Monster" + i + "_Sprite"; PositionSprite(TeamChoice.Monsters, sprite, i); BattleParticipantSprite bps = sprite.AddComponent(); bps.Init(mBattlePlayerControls, monster, mHitEffectMaterial, mRuntimeAnimatorController); bps.OnSpriteClicked += mBattlePlayerControls.NotifyParticipantSpriteClicked; monster.OnHit += bps.NotifyHit; monster.OnDeath += bps.NotifyDeath; HeroInfoUI monsterUI = (HeroInfoUI) Instantiate(mHeroUIPrefab.gameObject, mUiCanvas.transform).GetComponent(typeof(HeroInfoUI)); monsterUI.Init(sprite, monster, battleState); mMonsterUIs[monster] = monsterUI; } mState.OnHeroPositionsSet += this.RepositionHeroes; mState.OnMonsterPositionsSet += this.RepositionMonsters; } private void PositionSprite(TeamChoice team, GameObject sprite, int i) { Vector3 pos; if (team == TeamChoice.Heroes) { pos = new Vector3(-0.8f + -3 + 3 * i, -1.8f, 0); } else { pos = new Vector3(+0.8f + -3 + 3 * i, 1.2f, 0); } sprite.transform.position = pos; } public void PositionHero(BattleHero hero, int i) { PositionSprite(TeamChoice.Heroes, mHeroSprites[hero], i); } 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); } } }