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

51 lines
1.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;
[CreateAssetMenu(menuName = "Gather And Defend/Resource Tile")]
public class ResourceTile : LevelTile
{
[SerializeField]
[Tooltip("the prefab of the currency that will be spawned when mining this resource")]
private GameObject _yieldPrefab;
[SerializeField]
private float _yieldSpeed = 1; //resource per second
private float _yieldCounter = 0;
public bool Occupied { get; set; }
public override void LevelDestroy()
{
//nothing
}
public override void LevelStart()
{
//nothing
}
public override void LevelUpdate()
{
if (!Occupied) return;
_yieldCounter += Time.deltaTime * _yieldSpeed;
if (_yieldCounter < 1) return;
_yieldCounter = 0;
var yielded = Instantiate(_yieldPrefab, Position, Quaternion.identity);
yielded.transform.SetParent(LevelManager.Instance.transform);
}
public override bool Equals(ILevelObject other)
{
return other is ResourceTile otherRes &&
Position == otherRes.Position
&& Tilemap == otherRes.Tilemap
&& _yieldPrefab == otherRes._yieldPrefab
&& _yieldCounter == otherRes._yieldCounter;
}
}