mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-25 16:03:02 +00:00
79 lines
2.7 KiB
C#
79 lines
2.7 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.GameSystems;
|
|||
|
using ProjectZ.InGame.Map;
|
|||
|
|
|||
|
namespace ProjectZ.InGame.GameObjects.Things
|
|||
|
{
|
|||
|
public class ObjBed : GameObject
|
|||
|
{
|
|||
|
private readonly string _nextMap;
|
|||
|
private readonly string _lampKey;
|
|||
|
|
|||
|
private bool _startBed;
|
|||
|
private bool _startTransition;
|
|||
|
|
|||
|
private const int TransitionTime = 2750;
|
|||
|
private float _transitionCounter = TransitionTime;
|
|||
|
private int _lightState;
|
|||
|
|
|||
|
public ObjBed() : base("editor bed") { }
|
|||
|
|
|||
|
public ObjBed(Map.Map map, int posX, int posY, string nextMap, string lampKey) : base(map)
|
|||
|
{
|
|||
|
EntityPosition = new CPosition(posX, posY, 0);
|
|||
|
EntitySize = new Rectangle(0, 0, 16, 32);
|
|||
|
|
|||
|
_nextMap = nextMap;
|
|||
|
_lampKey = lampKey;
|
|||
|
|
|||
|
var boxPushable = new CBox(EntityPosition, 0, 0, 16, 32 - MapManager.ObjLink.BodyRectangle.Height, 8);
|
|||
|
|
|||
|
AddComponent(PushableComponent.Index, new PushableComponent(boxPushable, OnPush));
|
|||
|
AddComponent(UpdateComponent.Index, new UpdateComponent(Update));
|
|||
|
}
|
|||
|
|
|||
|
private bool OnPush(Vector2 direction, PushableComponent.PushType pushType)
|
|||
|
{
|
|||
|
_startBed = true;
|
|||
|
|
|||
|
Game1.GameManager.SetMusic(29, 2);
|
|||
|
|
|||
|
// jump into the bed
|
|||
|
MapManager.ObjLink.StartRailJump(new Vector2(EntityPosition.X + 8, EntityPosition.Y + 21), 1, 1);
|
|||
|
|
|||
|
MapManager.ObjLink.StartBedTransition();
|
|||
|
|
|||
|
return false;
|
|||
|
}
|
|||
|
|
|||
|
public void Update()
|
|||
|
{
|
|||
|
if (!_startBed || _startTransition)
|
|||
|
return;
|
|||
|
|
|||
|
_transitionCounter -= Game1.DeltaTime;
|
|||
|
|
|||
|
// turn of the lights
|
|||
|
if (_lightState < 4 && _transitionCounter < TransitionTime - 1000 - _lightState * 250)
|
|||
|
{
|
|||
|
_lightState++;
|
|||
|
Game1.GameManager.SaveManager.SetString(_lampKey + _lightState, "0");
|
|||
|
}
|
|||
|
|
|||
|
if (_transitionCounter < 0)
|
|||
|
{
|
|||
|
_startTransition = true;
|
|||
|
|
|||
|
MapManager.ObjLink.MapTransitionStart = MapManager.ObjLink.EntityPosition.Position;
|
|||
|
MapManager.ObjLink.MapTransitionEnd = MapManager.ObjLink.EntityPosition.Position;
|
|||
|
|
|||
|
var transitionSystem = ((MapTransitionSystem)Game1.GameManager.GameSystems[typeof(MapTransitionSystem)]);
|
|||
|
transitionSystem.AppendMapChange(_nextMap, "bed");
|
|||
|
transitionSystem.StartDreamTransition = true;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|