LADXHD/InGame/GameObjects/Dungeon/ObjGraveTrigger.cs

84 lines
2.7 KiB
C#
Raw Normal View History

2023-12-14 22:21:22 +00:00
using Microsoft.Xna.Framework;
using ProjectZ.InGame.GameObjects.Base;
using ProjectZ.InGame.GameObjects.Base.CObjects;
using ProjectZ.InGame.GameObjects.Base.Components;
using ProjectZ.InGame.Things;
namespace ProjectZ.InGame.GameObjects.Dungeon
{
class ObjGraveTrigger : GameObject
{
private readonly int[] _correctDirection = { 3, 0, 1, 2, 1 };
private readonly string _triggerKey;
private int _currentState;
// object to set a key if the gravestones get moved in the right order in the right direction
public ObjGraveTrigger() : base("editor grave trigger") { }
public ObjGraveTrigger(Map.Map map, int posX, int posY, string triggerKey) : base(map)
{
Tags = Values.GameObjectTag.None;
EntityPosition = new CPosition(posX, posY, 0);
EntitySize = new Rectangle(0, 0, 16, 16);
_triggerKey = triggerKey;
if (string.IsNullOrEmpty(_triggerKey))
{
IsDead = true;
return;
}
Game1.GameManager.SaveManager.SetString(_triggerKey, "0");
AddComponent(KeyChangeListenerComponent.Index, new KeyChangeListenerComponent(OnKeyChange));
}
private void OnKeyChange()
{
var reset = true;
for (var i = 0; i < 5; i++)
{
var strKey = Game1.GameManager.SaveManager.GetString("ow_grave_" + i + "_dir");
// key is set?
if (!string.IsNullOrEmpty(strKey) && strKey != "-1")
{
reset = false;
var correctDirection = _correctDirection[i].ToString() == strKey;
// player moved the next gravestone in the correct direction
if (correctDirection)
{
if (_currentState == i)
{
_currentState++;
if (_currentState == 5)
{
Game1.GameManager.SaveManager.SetString(_triggerKey, "1");
// remove the object
Map.Objects.DeleteObjects.Add(this);
}
}
}
else
{
// not the correct gravestone moved or in the wrong direction
_currentState = 5;
}
}
}
// was reset?
if (reset)
{
_currentState = 0;
}
}
}
}