mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-27 08:53:32 +00:00
62 lines
2.3 KiB
C#
62 lines
2.3 KiB
C#
|
using Microsoft.Xna.Framework;
|
||
|
using ProjectZ.Base;
|
||
|
using ProjectZ.InGame.GameObjects.Base;
|
||
|
using ProjectZ.InGame.GameObjects.Base.CObjects;
|
||
|
using ProjectZ.InGame.GameObjects.Base.Components;
|
||
|
using ProjectZ.InGame.Map;
|
||
|
using ProjectZ.InGame.Things;
|
||
|
|
||
|
namespace ProjectZ.InGame.GameObjects.Enemies
|
||
|
{
|
||
|
internal class ObjZombieSpawner : GameObject
|
||
|
{
|
||
|
private Rectangle _triggerField;
|
||
|
|
||
|
private float _spawnTime;
|
||
|
private float _spawnCounter;
|
||
|
|
||
|
public ObjZombieSpawner() : base("zombie") { }
|
||
|
|
||
|
public ObjZombieSpawner(Map.Map map, int posX, int posY, int spawnTime) : base(map)
|
||
|
{
|
||
|
_triggerField = map.GetField(posX, posY);
|
||
|
_spawnTime = spawnTime;
|
||
|
_spawnCounter = spawnTime;
|
||
|
|
||
|
EntityPosition = new CPosition(_triggerField.X, _triggerField.Y, 0);
|
||
|
EntitySize = new Rectangle(0, 0, _triggerField.Width, _triggerField.Height);
|
||
|
|
||
|
AddComponent(UpdateComponent.Index, new UpdateComponent(Update));
|
||
|
}
|
||
|
|
||
|
private void Update()
|
||
|
{
|
||
|
// check if the player is standing in the field
|
||
|
if (_triggerField.Contains(new Point((int)MapManager.ObjLink.EntityPosition.X, (int)MapManager.ObjLink.EntityPosition.Y)))
|
||
|
_spawnCounter -= Game1.DeltaTime;
|
||
|
|
||
|
if (_spawnCounter <= 0)
|
||
|
{
|
||
|
_spawnCounter = _spawnTime;
|
||
|
|
||
|
// try to find a position for the new zombie
|
||
|
for (var i = 0; i < 10; i++)
|
||
|
{
|
||
|
var posX = _triggerField.X + Game1.RandomNumber.Next(0, 10) * Values.TileSize;
|
||
|
var posY = _triggerField.Y + Game1.RandomNumber.Next(0, 8) * Values.TileSize;
|
||
|
|
||
|
// found a good position?
|
||
|
var collidingRectangle = Box.Empty;
|
||
|
if (!Map.Objects.Collision(new Box(posX, posY, 0, 16, 16, 8), Box.Empty,
|
||
|
Values.CollisionTypes.Normal | Values.CollisionTypes.Enemy | Values.CollisionTypes.Player, 0, 0,
|
||
|
ref collidingRectangle))
|
||
|
{
|
||
|
var newZombie = new EnemyZombie(Map, posX, posY);
|
||
|
Map.Objects.SpawnObject(newZombie);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|