Ader Alisma 01 6345febb35 Start reworking constant spawn
Made interval between spawns adapt to enemies spawned at the Start

Removed the random factor of interval to respect the game duration

Made max spawn per row dependent of enemy toughness on that row
2023-09-10 15:39:19 -04:00

102 lines
2.6 KiB
C#

using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(menuName = project_name + "/" + nameof(SpawnerTile))]
public class SpawnerTile : LevelTile
{
[SerializeField]
private GameObject _prefab;
[SerializeField]
private bool _spawnOnStart;
private float _lifetime;
[SerializeField]
private float _spawnSpeed = 0;
[SerializeField, Range(0, 1.001f)]
private float _spawnCounter = 0;
private WaveObserver _observer;
private bool stopped = false;
public override void LevelStart()
{
_observer = WaveObserver.Instance;
_observer.Attach(this);
if (_spawnOnStart && _lifetime <= 0)
{
_prefab.Create(Position, parent: LevelManager.Instance.LevelTransform);
_observer.NotifyOnStart();
}
}
public override void LevelUpdate()
{
_lifetime += Time.deltaTime;
if (!stopped)
{
_spawnCounter += Time.deltaTime;
}
if (_spawnCounter < _spawnSpeed) return;
_spawnCounter = 0;
_prefab.Create(Position, parent: LevelManager.Instance.LevelTransform);
_observer.NotifySpawned(this);
}
public override bool Equals(ILevelObject other)
{
return other is SpawnerTile spawner
&& base.Equals(spawner)
&& spawner._prefab == _prefab
&& spawner._spawnSpeed == _spawnSpeed;
}
public override Dictionary<string, object> ToDictionary()
{
var dict = base.ToDictionary();
dict[nameof(_prefab)] = _prefab.name;
dict[nameof(_spawnSpeed)] = _spawnSpeed;
dict[nameof(_spawnCounter)] = _spawnCounter;
dict[nameof(_lifetime)] = _lifetime;
dict[nameof(_spawnOnStart)] = _spawnOnStart;
return dict;
}
internal void StopSpawn()
{
stopped = true;
}
internal void StartSpawn()
{
stopped = false;
}
public override void LoadDictionary(Dictionary<string, object> dict)
{
base.LoadDictionary(dict);
var prefabName = dict[nameof(_prefab)].ToString();
_prefab = Database.Instance.Prefabs[prefabName];
_spawnSpeed = dict[nameof(_spawnSpeed)].ToFloat();
_spawnCounter = dict[nameof(_spawnCounter)].ToFloat();
_lifetime = dict[nameof(_lifetime)].ToFloat();
_spawnOnStart = dict[nameof(_spawnOnStart)].ToBool();
}
public GameObject Prefab
{
set
{
_prefab = value;
}
get
{
return _prefab;
}
}
public void ChangeSpawnSpeed(float value)
{
_spawnSpeed = value;
}
}