using System; using System.Collections.Generic; using MedievalParty.Core; using UnityEngine; namespace MedievalParty.Map.States { public class MapManager_SpawnState: IState { public event EventHandler onSpawnOver; private CharacterListSO _characterList; private readonly CharacterObject _characterPrefab; private readonly List _spawnPoints; private readonly float _delayBeforeFirstSpawn; private readonly float _delayBetweenSpawn; private float _delay; private int _index; public MapManager_SpawnState(CharacterListSO characterList, CharacterObject characterPrefab, List spawnPoints, float delayBeforeFirstSpawn, float delayBetweenSpawn) { _characterList = characterList; _characterPrefab = characterPrefab; _spawnPoints = spawnPoints; _delayBeforeFirstSpawn = delayBeforeFirstSpawn; _delayBetweenSpawn = delayBetweenSpawn; } public void OnEnter() { _delay = _delayBeforeFirstSpawn; _index = 0; } public void OnExit() { } public void OnUpdate() { _delay -= Time.deltaTime; if (_delay <= 0) { CharacterObject obj = GameObject.Instantiate(_characterPrefab, _spawnPoints[_index].position, Quaternion.identity); obj.SetCharacter(_characterList.Characters[_index]); _delay = _delayBetweenSpawn; _index ++; if(_index >= _characterList.Characters.Count) onSpawnOver?.Invoke(this, EventArgs.Empty); } } } }