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; public override void LevelStart() { if (_spawnOnStart && _lifetime <= 0) { _prefab.Create(Position, parent: LevelManager.Instance.LevelTransform); } } public override void LevelUpdate() { _lifetime += Time.deltaTime; _spawnCounter += Time.deltaTime * _spawnSpeed; if (_spawnCounter < 1) return; _spawnCounter = 0; _prefab.Create(Position, parent: LevelManager.Instance.LevelTransform); } public override bool Equals(ILevelObject other) { return other is SpawnerTile spawner && base.Equals(spawner) && spawner._prefab == _prefab && spawner._spawnSpeed == _spawnSpeed; } public override Dictionary 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; } public override void LoadDictionary(Dictionary 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(); } }