mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-27 08:53:32 +00:00
77 lines
2.8 KiB
C#
77 lines
2.8 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;
|
||
|
using ProjectZ.InGame.Things;
|
||
|
|
||
|
namespace ProjectZ.InGame.GameObjects.Things
|
||
|
{
|
||
|
internal class ObjFinalStairs : GameObject
|
||
|
{
|
||
|
private DrawSpriteComponent _drawComponent;
|
||
|
private CBox _collisionBox;
|
||
|
|
||
|
private const string spriteId = "final_stairs";
|
||
|
private string _spawnKey;
|
||
|
private bool _collided;
|
||
|
private bool _spawned;
|
||
|
|
||
|
private float _spawnTime = 8 / 60f * 1000;
|
||
|
private float _spawnCounter;
|
||
|
private int _spawnIndex;
|
||
|
|
||
|
public ObjFinalStairs() : base(spriteId) { }
|
||
|
|
||
|
public ObjFinalStairs(Map.Map map, int posX, int posY, string spawnKey) : base(map)
|
||
|
{
|
||
|
EntityPosition = new CPosition(posX, posY, 0);
|
||
|
EntitySize = new Rectangle(0, 0, 16, 16);
|
||
|
|
||
|
_spawnKey = spawnKey;
|
||
|
_collisionBox = new CBox(posX + 7, posY + 5, 0, 2, 2, 2);
|
||
|
|
||
|
if (!string.IsNullOrEmpty(_spawnKey))
|
||
|
AddComponent(KeyChangeListenerComponent.Index, new KeyChangeListenerComponent(OnKeyChange));
|
||
|
AddComponent(UpdateComponent.Index, new UpdateComponent(Update));
|
||
|
AddComponent(DrawComponent.Index, _drawComponent = new DrawSpriteComponent(spriteId, EntityPosition, Values.LayerBottom) { IsActive = false });
|
||
|
}
|
||
|
|
||
|
private void OnKeyChange()
|
||
|
{
|
||
|
if (!_spawned && Game1.GameManager.SaveManager.GetString(_spawnKey) == "1")
|
||
|
{
|
||
|
_spawned = true;
|
||
|
_drawComponent.IsActive = true;
|
||
|
Game1.GameManager.PlaySoundEffect("D360-47-2F");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void Update()
|
||
|
{
|
||
|
if (!_spawned)
|
||
|
return;
|
||
|
|
||
|
if (_collided && _spawnIndex < 2)
|
||
|
{
|
||
|
_spawnCounter += Game1.DeltaTime;
|
||
|
if(_spawnCounter > _spawnTime)
|
||
|
{
|
||
|
_spawnCounter -= _spawnTime;
|
||
|
_spawnIndex++;
|
||
|
|
||
|
var objSprite = new ObjSprite(Map, (int)EntityPosition.X, (int)EntityPosition.Y - _spawnIndex * 16, spriteId, Vector2.Zero, Values.LayerBottom, null);
|
||
|
Map.Objects.SpawnObject(objSprite);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// collision with the player?
|
||
|
if (!_collided && MapManager.ObjLink._body.BodyBox.Box.Contains(_collisionBox.Box))
|
||
|
{
|
||
|
_collided = true;
|
||
|
Game1.GameManager.StartDialogPath("final_stairs");
|
||
|
MapManager.ObjLink.SetPosition(new Vector2(EntityPosition.X + 8, EntityPosition.Y + 12));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|