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

60 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;
using ProjectZ.InGame.Map;
namespace ProjectZ.InGame.GameObjects.Enemies
{
class EnemyTorchTrap : GameObject
{
private readonly Rectangle _fieldRectangle;
private readonly string _key;
private float _fireballCounter;
private const int FireballTime = 3000;
private bool _isActive;
public EnemyTorchTrap() : base("torch trap") { }
public EnemyTorchTrap(Map.Map map, int posX, int posY, string key) : base(map)
{
EntityPosition = new CPosition(posX + 8, posY + 8, 0);
EntitySize = new Rectangle(-8, -8, 16, 16);
_fieldRectangle = map.GetField(posX, posY, 16);
_key = key;
if (!string.IsNullOrEmpty(_key))
AddComponent(KeyChangeListenerComponent.Index, new KeyChangeListenerComponent(OnKeyChanged));
else
_isActive = true;
AddComponent(UpdateComponent.Index, new UpdateComponent(Update));
}
private void OnKeyChanged()
{
_isActive = Game1.GameManager.SaveManager.GetString(_key) != "1";
}
private void Update()
{
if (!_isActive || !_fieldRectangle.Contains(MapManager.ObjLink.EntityPosition.Position))
return;
_fireballCounter += Game1.DeltaTime;
if (_fireballCounter < FireballTime)
return;
_fireballCounter -= FireballTime;
// spawn a fireball?
var distance = EntityPosition.Position - MapManager.ObjLink.EntityPosition.Position;
if (distance.Length() < 106)
Map.Objects.SpawnObject(new EnemyFireball(Map, (int)EntityPosition.X, (int)EntityPosition.Y, 1.25f));
}
}
}