LADXHD/InGame/GameObjects/Things/ObjSprite.cs

59 lines
2.7 KiB
C#
Raw Normal View History

2023-12-14 22:21:22 +00:00
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
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 ObjSprite : GameObject
{
public CSprite Sprite;
// sprite + shadow
public ObjSprite(Map.Map map, int posX, int posY,
string spriteId, Vector2 positionOffset, int layer,
string shadowSpriteId) : base(map, spriteId)
{
EntityPosition = new CPosition(posX + positionOffset.X, posY + positionOffset.Y, 0);
var sprite = Resources.GetSprite(spriteId);
Sprite = new CSprite(sprite, EntityPosition);
EntitySize = new Rectangle(-(int)sprite.Origin.X, -(int)sprite.Origin.Y, Sprite.SourceRectangle.Width, Sprite.SourceRectangle.Height);
AddComponent(DrawComponent.Index, new DrawCSpriteComponent(Sprite, layer));
if (!string.IsNullOrEmpty(shadowSpriteId))
{
var shadowSprite = Resources.GetSprite(shadowSpriteId);
AddComponent(DrawShadowComponent.Index,
new DrawShadowSpriteComponent(shadowSprite.Texture, EntityPosition, shadowSprite.ScaledRectangle, -shadowSprite.Origin));
}
}
// sprite + shadow + collision
public ObjSprite(Map.Map map, int posX, int posY,
string spriteId, Vector2 positionOffset, int layer,
string shadowSpriteId,
Rectangle collisionRectangle, Values.CollisionTypes collisionType) : this(map, posX, posY, spriteId, positionOffset, layer, shadowSpriteId)
{
AddComponent(CollisionComponent.Index, new BoxCollisionComponent(new CBox(EntityPosition,
collisionRectangle.X, collisionRectangle.Y, 0, collisionRectangle.Width, collisionRectangle.Height, 16), collisionType));
}
// used for the chest
public ObjSprite(Map.Map map, int posX, int posY, Texture2D sprTexture, Rectangle sourceRectangle, Vector2 drawOffset, int layer) : base(map)
{
SprEditorImage = sprTexture;
EditorIconSource = sourceRectangle;
EntityPosition = new CPosition(posX, posY, 0);
EntitySize = new Rectangle((int)drawOffset.X, (int)drawOffset.Y, sourceRectangle.Width, sourceRectangle.Height);
Sprite = new CSprite(sprTexture, EntityPosition, sourceRectangle, drawOffset);
AddComponent(DrawComponent.Index, new DrawCSpriteComponent(Sprite, layer));
}
}
}