From 05976abe6a620da85ad7a9f90cfa99703ed32240 Mon Sep 17 00:00:00 2001 From: iamcheeseman Date: Thu, 12 Mar 2026 18:28:55 -0400 Subject: Sprite offset --- src/objs/player.lua | 5 ++++- src/sprite.lua | 29 +++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/objs/player.lua b/src/objs/player.lua index 1e41523..58e5f3a 100644 --- a/src/objs/player.lua +++ b/src/objs/player.lua @@ -30,7 +30,10 @@ function new_player(x, y) mask = {"hard"}, }) add_comp(ent, "Player") - add_comp(ent, "Sprite", "res/img/player.ase") + add_comp(ent, "Sprite", "res/img/player.ase", { + offsetx = 0.5, + offsety = 0.5, + }) return ent end diff --git a/src/sprite.lua b/src/sprite.lua index b7a7541..6cd8ede 100644 --- a/src/sprite.lua +++ b/src/sprite.lua @@ -1,9 +1,11 @@ Sprite = {} Sprite.__index = Sprite -function Sprite.new(tex_name) +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) @@ -16,11 +18,25 @@ function Sprite.new(tex_name) 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) - ent.sprite = Sprite.new(tex_name) +register_comp("Sprite", function(ent, tex_name, opts) + ent.sprite = Sprite.new(tex_name, opts) end) function sprite_anim_sys(ent, dt) @@ -49,5 +65,10 @@ function sprite_draw_sys(ent) sprite.width, sprite.height, sprite.tex:getDimensions() ) - lg.draw(sprite.tex, q, ent.x or 0, ent.y or 0) + lg.draw( + sprite.tex, q, + ent.x or 0, ent.y or 0, + 0, 1, 1, + sprite.offsetx, sprite.offsety + ) end -- cgit v1.3-2-g0d8e