mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-01 04:14:22 +00:00
92 lines
3.2 KiB
C#
92 lines
3.2 KiB
C#
|
using Microsoft.Xna.Framework;
|
||
|
using Microsoft.Xna.Framework.Graphics;
|
||
|
using ProjectZ.Base;
|
||
|
using ProjectZ.InGame.GameObjects.Base;
|
||
|
using ProjectZ.InGame.GameObjects.Base.Components;
|
||
|
using ProjectZ.InGame.Map;
|
||
|
using ProjectZ.InGame.Things;
|
||
|
|
||
|
namespace ProjectZ.InGame.GameObjects.Dungeon
|
||
|
{
|
||
|
internal class ObjDungeonBlackRoom : GameObject
|
||
|
{
|
||
|
private readonly Rectangle _roomRectangle;
|
||
|
private readonly Rectangle _roomRectangleSmall;
|
||
|
private readonly string _saveId;
|
||
|
|
||
|
private RectangleF _collisionRectangle;
|
||
|
|
||
|
private float _changeCount;
|
||
|
private float _percentage;
|
||
|
|
||
|
private int _changeTime = 66;
|
||
|
|
||
|
private bool _isTransitioning;
|
||
|
|
||
|
public ObjDungeonBlackRoom(Map.Map map, int posX, int posY, string saveId, int width, int height) : base(map)
|
||
|
{
|
||
|
SprEditorImage = Resources.SprWhite;
|
||
|
EditorIconSource = new Rectangle(0, 0, 16, 16);
|
||
|
EditorColor = Color.Red * 0.75f;
|
||
|
|
||
|
_saveId = saveId;
|
||
|
|
||
|
if (!string.IsNullOrEmpty(_saveId) && Game1.GameManager.SaveManager.GetString(saveId) == "1")
|
||
|
{
|
||
|
IsDead = true;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
_roomRectangle = new Rectangle(posX, posY, width, height);
|
||
|
_roomRectangleSmall = new Rectangle(posX + 14, posY + 14, width - 28, height - 28);
|
||
|
|
||
|
_collisionRectangle = new RectangleF(posX - 16, posY - 16, width + 32, height + 32);
|
||
|
_changeCount = _changeTime;
|
||
|
|
||
|
// room can also get uncovered by setting a key
|
||
|
if (!string.IsNullOrEmpty(_saveId))
|
||
|
AddComponent(KeyChangeListenerComponent.Index, new KeyChangeListenerComponent(OnKeyChange));
|
||
|
|
||
|
AddComponent(UpdateComponent.Index, new UpdateComponent(Update));
|
||
|
AddComponent(LightDrawComponent.Index, new LightDrawComponent(DrawLight) { Layer = Values.LightLayer2 });
|
||
|
AddComponent(BlurDrawComponent.Index, new BlurDrawComponent(DrawBlur));
|
||
|
}
|
||
|
|
||
|
private void OnKeyChange()
|
||
|
{
|
||
|
var keyState = Game1.GameManager.SaveManager.GetString(_saveId);
|
||
|
if (keyState == "1")
|
||
|
_isTransitioning = true;
|
||
|
}
|
||
|
|
||
|
private void Update()
|
||
|
{
|
||
|
if (!_isTransitioning && _collisionRectangle.Intersects(MapManager.ObjLink.BodyRectangle))
|
||
|
_isTransitioning = true;
|
||
|
|
||
|
if (_isTransitioning)
|
||
|
{
|
||
|
_changeCount -= Game1.DeltaTime;
|
||
|
if (_changeCount < 0)
|
||
|
{
|
||
|
Map.Objects.DeleteObjects.Add(this);
|
||
|
|
||
|
if (!string.IsNullOrEmpty(_saveId))
|
||
|
Game1.GameManager.SaveManager.SetString(_saveId, "1");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
_percentage = _changeCount / _changeTime;
|
||
|
}
|
||
|
|
||
|
private void DrawLight(SpriteBatch spriteBatch)
|
||
|
{
|
||
|
spriteBatch.Draw(Resources.SprWhite, _roomRectangleSmall, Color.Black * _percentage);
|
||
|
}
|
||
|
|
||
|
private void DrawBlur(SpriteBatch spriteBatch)
|
||
|
{
|
||
|
spriteBatch.Draw(Resources.SprWhite, _roomRectangle, Color.Black * _percentage);
|
||
|
}
|
||
|
}
|
||
|
}
|