Merge pull request 'sprite handling' (#10) from feature/sprite-handling into master
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Reviewed-on: #10
This commit was merged in pull request #10.
This commit is contained in:
@@ -6,6 +6,7 @@ globals = {
|
||||
"Decision",
|
||||
"Situation",
|
||||
"Screen",
|
||||
"Sprite",
|
||||
"UI",
|
||||
"Print",
|
||||
"Input",
|
||||
@@ -19,6 +20,7 @@ globals = {
|
||||
"keyp",
|
||||
"music",
|
||||
"sfx",
|
||||
"spr",
|
||||
"rect",
|
||||
"rectb",
|
||||
"circ",
|
||||
|
||||
@@ -5,6 +5,8 @@ init/init.minigames.lua
|
||||
init/init.meters.lua
|
||||
system/system.util.lua
|
||||
init/init.windows.lua
|
||||
sprite/sprite.manager.lua
|
||||
sprite/sprite.norman.lua
|
||||
situation/situation.manager.lua
|
||||
situation/situation.drink_coffee.lua
|
||||
decision/decision.manager.lua
|
||||
|
||||
@@ -45,7 +45,9 @@ on than meets the eye.]]
|
||||
minigame_ddr = Minigames.get_default_ddr(),
|
||||
minigame_button_mash = Minigames.get_default_button_mash(),
|
||||
minigame_rhythm = Minigames.get_default_rhythm(),
|
||||
meters = Meters.get_initial()
|
||||
meters = Meters.get_initial(),
|
||||
sprites = {},
|
||||
current_situation = nil,
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
@@ -18,5 +18,5 @@ Map = {}
|
||||
UI = {}
|
||||
Print = {}
|
||||
Input = {}
|
||||
|
||||
Sprite = {}
|
||||
Audio = {}
|
||||
|
||||
@@ -2,5 +2,6 @@ Situation.register({
|
||||
id = "drink_coffee",
|
||||
handle = function()
|
||||
Audio.sfx_select()
|
||||
Sprite.show("norman", 100, 100)
|
||||
end,
|
||||
})
|
||||
|
||||
@@ -31,6 +31,7 @@ function Situation.apply(id)
|
||||
return
|
||||
end
|
||||
|
||||
Context.current_situation = id
|
||||
situation.handle()
|
||||
end
|
||||
|
||||
|
||||
72
inc/sprite/sprite.manager.lua
Normal file
72
inc/sprite/sprite.manager.lua
Normal file
@@ -0,0 +1,72 @@
|
||||
local _sprites = {}
|
||||
|
||||
function Sprite.register(sprite_data)
|
||||
if not sprite_data or not sprite_data.id then
|
||||
trace("Error: Invalid sprite object registered (missing id)!")
|
||||
return
|
||||
end
|
||||
if _sprites[sprite_data.id] then
|
||||
trace("Warning: Overwriting sprite with id: " .. sprite_data.id)
|
||||
end
|
||||
_sprites[sprite_data.id] = sprite_data
|
||||
end
|
||||
|
||||
function Sprite.show(id, x, y, colorkey, scale, flip_x, flip_y, rot)
|
||||
-- Ensure the sprite exists before attempting to show it
|
||||
if not _sprites[id] then
|
||||
trace("Error: Attempted to show non-registered sprite with id: " .. id)
|
||||
return
|
||||
end
|
||||
|
||||
Context.sprites[id] = {
|
||||
id = id,
|
||||
x = x,
|
||||
y = y,
|
||||
colorkey = colorkey,
|
||||
scale = scale,
|
||||
flip_x = flip_x,
|
||||
flip_y = flip_y,
|
||||
rot = rot,
|
||||
}
|
||||
end
|
||||
|
||||
function Sprite.hide(id)
|
||||
Context.sprites[id] = nil
|
||||
end
|
||||
|
||||
function Sprite.draw()
|
||||
for id, params in pairs(Context.sprites) do
|
||||
local sprite_data = _sprites[id]
|
||||
if not sprite_data then
|
||||
trace("Error: Sprite id " .. id .. " in Context.sprites is not registered.")
|
||||
Context.sprites[id] = nil -- Clean up invalid entry
|
||||
-- We should probably continue to the next sprite instead of returning
|
||||
-- so that other valid sprites can still be drawn.
|
||||
end
|
||||
|
||||
-- Use parameters from Context.sprites, or fall back to sprite_data, then to defaults
|
||||
local colorkey = params.colorkey or sprite_data.colorkey or 0
|
||||
local scale = params.scale or sprite_data.scale or 1
|
||||
local flip_x = params.flip_x or sprite_data.flip_x or 0
|
||||
local flip_y = params.flip_y or sprite_data.flip_y or 0
|
||||
local rot = params.rot or sprite_data.rot or 0
|
||||
|
||||
if sprite_data.sprites then -- Complex sprite
|
||||
for i = 1, #sprite_data.sprites do
|
||||
local sub_sprite = sprite_data.sprites[i]
|
||||
spr(
|
||||
sub_sprite.s,
|
||||
params.x + (sub_sprite.x_offset or 0),
|
||||
params.y + (sub_sprite.y_offset or 0),
|
||||
sub_sprite.colorkey or colorkey,
|
||||
sub_sprite.scale or scale,
|
||||
sub_sprite.flip_x or flip_x,
|
||||
sub_sprite.flip_y or flip_y,
|
||||
sub_sprite.rot or rot
|
||||
)
|
||||
end
|
||||
else -- Simple sprite
|
||||
spr(sprite_data.s, params.x, params.y, colorkey, scale, flip_x, flip_y, rot)
|
||||
end
|
||||
end
|
||||
end
|
||||
17
inc/sprite/sprite.norman.lua
Normal file
17
inc/sprite/sprite.norman.lua
Normal file
@@ -0,0 +1,17 @@
|
||||
Sprite.register({
|
||||
id = "norman",
|
||||
sprites = {
|
||||
-- Body
|
||||
{ s = 0, x_offset = 0, y_offset = 0 },
|
||||
-- Head
|
||||
{ s = 1, x_offset = 0, y_offset = -8 },
|
||||
-- Left Arm
|
||||
{ s = 2, x_offset = -4, y_offset = 4 },
|
||||
-- Right Arm
|
||||
{ s = 3, x_offset = 4, y_offset = 4, flip_x = 1 }, -- Flipped arm
|
||||
-- Left Leg
|
||||
{ s = 4, x_offset = -2, y_offset = 8 },
|
||||
-- Right Leg
|
||||
{ s = 5, x_offset = 2, y_offset = 8, flip_x = 1 } -- Flipped leg
|
||||
}
|
||||
})
|
||||
@@ -14,6 +14,7 @@ function GameWindow.draw()
|
||||
UI.draw_decision_selector(available_decisions, Context.selected_decision_index)
|
||||
end
|
||||
end
|
||||
Sprite.draw()
|
||||
end
|
||||
|
||||
function GameWindow.update()
|
||||
|
||||
Reference in New Issue
Block a user