MedievalParty/Assets/Scripts/Map/States/MapManager_SpawnState.cs
2025-10-02 16:27:11 -04:00

55 lines
1.7 KiB
C#

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<Transform> _spawnPoints;
private readonly float _delayBeforeFirstSpawn;
private readonly float _delayBetweenSpawn;
private float _delay;
private int _index;
public MapManager_SpawnState(CharacterListSO characterList, CharacterObject characterPrefab, List<Transform> 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);
}
}
}
}