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