aboutsummaryrefslogtreecommitdiff
path: root/src/sprite.lua
diff options
context:
space:
mode:
authoriamcheeseman <[email protected]>2026-03-11 22:36:18 -0400
committeriamcheeseman <[email protected]>2026-03-11 22:36:18 -0400
commitc63b1e049c9da2c095281b3e5dd012cc4fc4b6fc (patch)
treecf924ca9cc9dc12e97e5ee1250930930a248bcdf /src/sprite.lua
parent9e1afa5a96849aeb8eafce786c2411af7f45508c (diff)
Add loading for aseprite files; animated sprites
Diffstat (limited to 'src/sprite.lua')
-rw-r--r--src/sprite.lua53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/sprite.lua b/src/sprite.lua
new file mode 100644
index 0000000..b7a7541
--- /dev/null
+++ b/src/sprite.lua
@@ -0,0 +1,53 @@
+Sprite = {}
+Sprite.__index = Sprite
+
+function Sprite.new(tex_name)
+ local self = setmetatable({}, Sprite)
+
+ self.tex = get_tex(tex_name)
+ self.anim = get_anim(tex_name)
+
+ self.active_tag = self.anim.default_tag
+ self.frame = self.anim.tags[self.active_tag].from
+
+ self.timer = 0
+
+ local width, height = self.tex:getDimensions()
+ self.width = width / self.anim.frame_count
+ self.height = height
+
+ return self
+end
+
+register_comp("Sprite", function(ent, tex_name)
+ ent.sprite = Sprite.new(tex_name)
+end)
+
+function sprite_anim_sys(ent, dt)
+ local sprite = ent.sprite
+ local tag = sprite.anim.tags[sprite.active_tag]
+
+ sprite.timer = sprite.timer + dt
+ if sprite.timer > tag.duration then
+ sprite.frame = sprite.frame + 1
+ sprite.timer = 0
+ end
+
+ if sprite.frame >= tag.to then
+ sprite.frame = tag.from
+ end
+ if sprite.frame < tag.from then
+ sprite.frame = tag.from
+ end
+end
+
+function sprite_draw_sys(ent)
+ local sprite = ent.sprite
+
+ local q = lg.newQuad(
+ sprite.width * sprite.frame, 0,
+ sprite.width, sprite.height,
+ sprite.tex:getDimensions()
+ )
+ lg.draw(sprite.tex, q, ent.x or 0, ent.y or 0)
+end