Felix Boucher d10677db6d tweaks to LevelManager
le fait qu'il faille updater des tiles du tilemap posait un réel problème

création d'un système d'héritage pour que les game objects et les tiles puissent cohabiter dans une même game loop

- ILevelObject contient des fonctions de start, de destroy, d'update, d'égalité et une position

- LevelTile et LevelObject héritent de ILevelObject et peuvent être hérité par des tiles ou des MonoBehaviours.

- le level manager est un monobehaviour singleton qui update tous les ILevelObjects à chaque frame.
2023-05-27 20:38:42 -04:00

47 lines
1.3 KiB
C#

using UnityEngine;
[CreateAssetMenu(menuName = "Gather And Defend/Spawner Tile")]
public class SpawnerTile : LevelTile
{
[SerializeField]
private Sprite _sprite;
[SerializeField]
private GameObject _prefab;
[SerializeField]
private bool _spawnOnStart = true;
[SerializeField]
private float _spawnSpeed = 0;
private float _spawnCounter = 0;
public override bool Equals(ILevelObject other)
{
return other is SpawnerTile spawner
&& spawner.Position == Position
&& spawner.Tilemap == Tilemap
&& spawner._prefab == _prefab
&& spawner._spawnOnStart == _spawnOnStart
&& spawner._spawnSpeed == _spawnSpeed;
}
public override void LevelDestroy()
{
//nothing
}
public override void LevelStart()
{
if (!_spawnOnStart) return;
var instance = Instantiate(_prefab, Position, Quaternion.identity);
instance.transform.SetParent(LevelManager.Instance.transform);
}
public override void LevelUpdate()
{
_spawnCounter += Time.deltaTime * _spawnSpeed;
if (_spawnCounter < 1) return;
_spawnCounter = 0;
var instance = Instantiate(_prefab, Position, Quaternion.identity);
instance.transform.SetParent(LevelManager.Instance.transform);
}
}