mirror of
https://github.com/Phantop/LADXHD.git
synced 2024-11-01 04:14:22 +00:00
50 lines
1.8 KiB
C#
50 lines
1.8 KiB
C#
|
using Microsoft.Xna.Framework;
|
|||
|
using ProjectZ.Base;
|
|||
|
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.Things
|
|||
|
{
|
|||
|
public class ObjLadder : GameObject
|
|||
|
{
|
|||
|
private readonly Box _collisionRectangle;
|
|||
|
private readonly bool _isTop;
|
|||
|
|
|||
|
public ObjLadder(Map.Map map, int posX, int posY, bool isTop) : base(map)
|
|||
|
{
|
|||
|
var sprite = Resources.GetSprite(isTop ? "editor ladder top" : "editor ladder");
|
|||
|
SprEditorImage = sprite.Texture;
|
|||
|
EditorIconSource = sprite.ScaledRectangle;
|
|||
|
EditorIconScale = sprite.Scale;
|
|||
|
|
|||
|
EntityPosition = new CPosition(posX, posY, 0);
|
|||
|
EntitySize = new Rectangle(5, 0, 6, 16);
|
|||
|
_isTop = isTop;
|
|||
|
|
|||
|
if (isTop)
|
|||
|
_collisionRectangle = new Box(posX, posY, 0, 16, 16, 8);
|
|||
|
else
|
|||
|
_collisionRectangle = new Box(posX + 4, posY, 0, 8, 16, 8);
|
|||
|
|
|||
|
AddComponent(CollisionComponent.Index, new CollisionComponent(Collision)
|
|||
|
{
|
|||
|
CollisionType = !isTop ? Values.CollisionTypes.Ladder :
|
|||
|
Values.CollisionTypes.Ladder | Values.CollisionTypes.LadderTop
|
|||
|
});
|
|||
|
}
|
|||
|
|
|||
|
private bool Collision(Box box, int dir, int level, ref Box collidingBox)
|
|||
|
{
|
|||
|
// only collide if the entity was on top of the ladder the frame before
|
|||
|
if ((!_isTop || dir == 3) && _collisionRectangle.Intersects(box))
|
|||
|
{
|
|||
|
collidingBox = _collisionRectangle;
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|