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

58 lines
1.7 KiB
C#

using Microsoft.Xna.Framework;
using ProjectZ.InGame.GameObjects.Base;
using ProjectZ.InGame.GameObjects.Base.Components;
namespace ProjectZ.InGame.GameObjects.Things
{
internal class ObjKeyConditionSetter : GameObject
{
private readonly SaveLoad.ConditionNode _condition;
private readonly string _strKey;
private bool _init;
private bool _state;
// key will be set and reset or just set
private bool _reset;
public ObjKeyConditionSetter() : base("editor key condition setter")
{
EditorColor = Color.Green;
}
public ObjKeyConditionSetter(Map.Map map, int posX, int posY, string strKey, string strCondition, bool reset) : base(map)
{
// set the key and delete the object
if (string.IsNullOrEmpty(strKey) || string.IsNullOrEmpty(strCondition))
{
IsDead = true;
return;
}
_strKey = strKey;
_condition = SaveLoad.SaveCondition.GetConditionNode(strCondition);
_reset = reset;
AddComponent(KeyChangeListenerComponent.Index, new KeyChangeListenerComponent(KeyChanged));
}
public void KeyChanged()
{
var active = _condition.Check();
if (_init && active == _state)
return;
_init = true;
if (active || _reset)
{
// update the state
_state = active;
Game1.GameManager.SaveManager.SetString(_strKey, active ? "1" : "0");
// trigger event on the right map
Map.Objects.TriggerKeyChange();
}
}
}
}