From c63b1e049c9da2c095281b3e5dd012cc4fc4b6fc Mon Sep 17 00:00:00 2001 From: iamcheeseman Date: Wed, 11 Mar 2026 22:36:18 -0400 Subject: Add loading for aseprite files; animated sprites --- src/sprite.lua | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/sprite.lua (limited to 'src/sprite.lua') 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 -- cgit v1.3-2-g0d8e