mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-01 04:14:22 +00:00
95 lines
3.1 KiB
C#
95 lines
3.1 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.Things
|
||
|
{
|
||
|
internal class ObjButtonTouch : GameObject
|
||
|
{
|
||
|
private readonly Rectangle _collisionRectangle;
|
||
|
private readonly string _strKey;
|
||
|
private readonly string _value;
|
||
|
private readonly bool _deleteOnTouch;
|
||
|
private readonly bool _resetKey;
|
||
|
|
||
|
private bool _currentState;
|
||
|
|
||
|
public ObjButtonTouch(Map.Map map, int posX, int posY, int buttonWidth, int buttonHeight, string strKey, string value, bool deleteOnTouch, bool resetKey) : base(map, "button")
|
||
|
{
|
||
|
EntityPosition = new CPosition(posX, posY, 0);
|
||
|
EntitySize = new Rectangle(0, 0, buttonWidth, buttonHeight);
|
||
|
|
||
|
_strKey = strKey;
|
||
|
_value = string.IsNullOrEmpty(value) ? "0" : value;
|
||
|
_deleteOnTouch = deleteOnTouch;
|
||
|
_resetKey = resetKey;
|
||
|
|
||
|
if (string.IsNullOrEmpty(_strKey))
|
||
|
{
|
||
|
IsDead = true;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
_collisionRectangle = new Rectangle(posX, posY, buttonWidth, buttonHeight);
|
||
|
AddComponent(KeyChangeListenerComponent.Index, new KeyChangeListenerComponent(OnKeyChange));
|
||
|
AddComponent(UpdateComponent.Index, new UpdateComponent(Update));
|
||
|
}
|
||
|
|
||
|
public override void Init()
|
||
|
{
|
||
|
// check if the player spawns on the button
|
||
|
CheckNextMapPosition();
|
||
|
}
|
||
|
|
||
|
private void OnKeyChange()
|
||
|
{
|
||
|
var keyState = Game1.GameManager.SaveManager.GetString(_strKey, "0");
|
||
|
_currentState = keyState == _value;
|
||
|
}
|
||
|
|
||
|
private void CheckNextMapPosition()
|
||
|
{
|
||
|
if (MapManager.ObjLink.NextMapPositionStart.HasValue &&
|
||
|
_collisionRectangle.Contains(MapManager.ObjLink.NextMapPositionStart.Value))
|
||
|
{
|
||
|
Activate();
|
||
|
|
||
|
// do not spawn the object
|
||
|
if (_deleteOnTouch)
|
||
|
IsDead = true;
|
||
|
|
||
|
// trigger event on the right map
|
||
|
Map.Objects.TriggerKeyChange();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private void Update()
|
||
|
{
|
||
|
var collision = MapManager.ObjLink.BodyRectangle.Intersects(_collisionRectangle);
|
||
|
|
||
|
if (!_currentState && collision)
|
||
|
Activate();
|
||
|
else if (_resetKey && _currentState && !collision)
|
||
|
Deactivate();
|
||
|
}
|
||
|
|
||
|
private void Activate()
|
||
|
{
|
||
|
// set the key
|
||
|
_currentState = true;
|
||
|
Game1.GameManager.SaveManager.SetString(_strKey, _value);
|
||
|
|
||
|
if (_deleteOnTouch)
|
||
|
Map.Objects.DeleteObjects.Add(this);
|
||
|
}
|
||
|
|
||
|
private void Deactivate()
|
||
|
{
|
||
|
// set the key
|
||
|
_currentState = false;
|
||
|
Game1.GameManager.SaveManager.RemoveString(_strKey);
|
||
|
}
|
||
|
}
|
||
|
}
|