diff options
| author | iamcheeseman <[email protected]> | 2026-03-11 22:36:18 -0400 |
|---|---|---|
| committer | iamcheeseman <[email protected]> | 2026-03-11 22:36:18 -0400 |
| commit | c63b1e049c9da2c095281b3e5dd012cc4fc4b6fc (patch) | |
| tree | cf924ca9cc9dc12e97e5ee1250930930a248bcdf /src/sprite.lua | |
| parent | 9e1afa5a96849aeb8eafce786c2411af7f45508c (diff) | |
Add loading for aseprite files; animated sprites
Diffstat (limited to 'src/sprite.lua')
| -rw-r--r-- | src/sprite.lua | 53 |
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 |
