LADXHD/InGame/GameObjects/Things/ObjBushRespawner.cs
2023-12-14 17:21:22 -05:00

56 lines
2 KiB
C#

using Microsoft.Xna.Framework;
using ProjectZ.InGame.GameObjects.Base;
using ProjectZ.InGame.GameObjects.Base.CObjects;
using ProjectZ.InGame.GameObjects.Base.Components;
namespace ProjectZ.InGame.GameObjects.Things
{
internal class ObjBushRespawner : GameObject
{
private readonly string _spawnItem;
private readonly string _spriteId;
private readonly bool _hasCollider;
private readonly bool _drawShadow;
private readonly bool _setGrassField;
private readonly int _drawLayer;
private readonly string _pickupKey;
private int _lastFieldTime;
public ObjBushRespawner(Map.Map map, int posX, int posY, string spawnItem, string spriteId,
bool hasCollider, bool drawShadow, bool setGrassField, int drawLayer, string pickupKey) : base(map)
{
EntityPosition = new CPosition(posX, posY, 0);
EntitySize = new Rectangle(0, 0, 16, 16);
_spawnItem = spawnItem;
_spriteId = spriteId;
_hasCollider = hasCollider;
_drawShadow = drawShadow;
_setGrassField = setGrassField;
_drawLayer = drawLayer;
_pickupKey = pickupKey;
_lastFieldTime = Map.GetUpdateState(EntityPosition.Position);
// add key change listener
AddComponent(UpdateComponent.Index, new UpdateComponent(Update));
}
private void Update()
{
// field went out of the update range?
var updateState = Map.GetUpdateState(EntityPosition.Position);
if (_lastFieldTime < updateState)
SpawnObject();
}
private void SpawnObject()
{
Map.Objects.DeleteObjects.Add(this);
Map.Objects.SpawnObject(new ObjBush(Map, (int)EntityPosition.X, (int)EntityPosition.Y,
_spawnItem, _spriteId, _hasCollider, _drawShadow, _setGrassField, _drawLayer, _pickupKey));
}
}
}