2 using Microsoft.Xna.Framework;
3 using Microsoft.Xna.Framework.Graphics;
8 namespace Loot.Api.Graphics
17 public Color DrawColor {
get;
set; }
18 public bool UseDestinationRectangle => DrawData.useDestinationRectangle;
19 public Rectangle? DestinationRectangle => DrawData.destinationRectangle;
21 public Entity Entity {
get;
protected set; }
22 public T Properties {
get;
protected set; }
23 public short Order {
get;
protected set; }
24 public bool NeedsUpdate {
get;
set; } =
true;
28 if (subjectIdentity == Entity)
return;
29 SetIdentity(subjectIdentity);
32 internal void SetIdentity(
object subjectIdentity)
34 if (subjectIdentity is
ModItem modItem)
36 Entity = modItem.item;
38 else if (subjectIdentity is ModNPC modNpc)
42 else if (subjectIdentity is ModProjectile modProjectile)
44 Entity = modProjectile.projectile;
46 else if (subjectIdentity is
ModPlayer modPlayer)
48 Entity = modPlayer.player;
50 else if (subjectIdentity is Entity entity)
56 throw new Exception($
"Invalid subject for GraphicsEntityIdentity - {subjectIdentity}");
60 protected abstract void LoadAssets(Item item);
67 if (Properties.SkipUpdatingDrawData && !NeedsUpdate)
return;
69 DrawData =
new DrawData
72 effect = SpriteEffects.None,
74 scale =
new Vector2(scale, scale)
79 if (Entity.direction == -1)
81 DrawData.effect |= SpriteEffects.FlipHorizontally;
90 if (Properties.SkipUpdatingDrawData && !NeedsUpdate)
return;
92 var frame = texture.Frame();
93 offX = Main.screenPosition.X - texture.Width * 0.5f;
94 offY = Main.screenPosition.Y - texture.Height * 0.5f;
95 DrawData.position =
new Vector2
97 Entity.position.X - offX,
98 Entity.position.Y - offY
100 DrawData.origin = frame.Size() * 0.5f;
102 if (UseDestinationRectangle)
104 if (DestinationRectangle.HasValue)
106 DrawData.destinationRectangle = DestinationRectangle.Value;
110 DrawData.destinationRectangle = frame;
112 if (Entity is NPC npc)
114 DrawData.destinationRectangle = npc.frame;
116 else if (Entity is Projectile projectile)
118 DrawData.destinationRectangle.Y = projectile.frame * projectile.height;
126 if (DrawData.useDestinationRectangle)
128 spriteBatch.Draw(DrawData.texture, DrawData.destinationRectangle, DrawData.sourceRect, DrawData.color, DrawData.rotation, DrawData.origin, DrawData.effect, 0f);
132 spriteBatch.Draw(DrawData.texture, DrawData.position, DrawData.sourceRect, DrawData.color, DrawData.rotation, DrawData.origin, DrawData.scale, DrawData.effect, 0f);
void TryGettingDrawData(float rotation, float scale)
Sets up drawing data initially
void DrawEntity(SpriteBatch spriteBatch)
void TryUpdatingDrawData(Texture2D texture)
Defines the base abstract of a GraphicsEntity
Defines a set of properties for a GraphicsEntity<T>
GraphicsEntity(object subjectIdentity)