Sprite = {} Sprite.__index = Sprite function Sprite.new(tex_name, opts) local self = setmetatable({}, Sprite) opts = opts or {} 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 local offsetx = opts.offsetx or 0 local offsety = opts.offsety or 0 if offsetx < 1 and offsetx > -1 then self.offsetx = self.width * offsetx else self.offsetx = offsetx end if offsety < 1 and offsety > -1 then self.offsety = self.height * offsety else self.offsety = offsety end return self end register_comp("Sprite", function(ent, tex_name, opts) ent.sprite = Sprite.new(tex_name, opts) 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, 0, 1, 1, sprite.offsetx, sprite.offsety ) end