From 3458d55440012c49b7315b91dd7b4cd5bb2fcdd5 Mon Sep 17 00:00:00 2001 From: the lemons Date: Thu, 30 Mar 2023 02:34:46 -0500 Subject: asset loading system --- assets.lua | 26 ++++++++++++++++++++++++++ assets/harddrop.mp3 | Bin 15588 -> 0 bytes assets/sfx/harddrop.mp3 | Bin 0 -> 15588 bytes assets/sfx/tspin.mp3 | Bin 0 -> 13770 bytes assets/sfx/tspindouble.mp3 | Bin 0 -> 25748 bytes assets/sfx/tspinkick5.mp3 | Bin 0 -> 17006 bytes assets/sfx/tspinsingle.mp3 | Bin 0 -> 25748 bytes assets/sfx/tspintriple.mp3 | Bin 0 -> 48193 bytes assets/tspin.mp3 | Bin 13770 -> 0 bytes assets/tspindouble.mp3 | Bin 25748 -> 0 bytes assets/tspinkick5.mp3 | Bin 17006 -> 0 bytes assets/tspinsingle.mp3 | Bin 25748 -> 0 bytes assets/tspintriple.mp3 | Bin 48193 -> 0 bytes game/gfx.lua | 6 ++++-- game/init.lua | 14 ++++++++------ game/sfx.lua | 29 +++++++++++------------------ main.lua | 4 +++- 17 files changed, 52 insertions(+), 27 deletions(-) create mode 100644 assets.lua delete mode 100644 assets/harddrop.mp3 create mode 100644 assets/sfx/harddrop.mp3 create mode 100644 assets/sfx/tspin.mp3 create mode 100644 assets/sfx/tspindouble.mp3 create mode 100644 assets/sfx/tspinkick5.mp3 create mode 100644 assets/sfx/tspinsingle.mp3 create mode 100644 assets/sfx/tspintriple.mp3 delete mode 100644 assets/tspin.mp3 delete mode 100644 assets/tspindouble.mp3 delete mode 100644 assets/tspinkick5.mp3 delete mode 100644 assets/tspinsingle.mp3 delete mode 100644 assets/tspintriple.mp3 diff --git a/assets.lua b/assets.lua new file mode 100644 index 0000000..e56deba --- /dev/null +++ b/assets.lua @@ -0,0 +1,26 @@ +local M = {} + +local loaders = { + sfx = function(f) return love.audio.newSource(f, "static") end, +} + +local loaded = {} +function M.load_from(assets_dir) + if not loaded[assets_dir] then + local assets = {} + loaded[assets_dir] = assets + for k, loader in pairs(loaders) do + local dir = assets_dir..'/'..k..'/' + assets[k] = {} + for _, file in ipairs(love.filesystem.getDirectoryItems(dir)) do + if love.filesystem.getInfo(dir..file).type == "file" then + local name = file:match "(.+)%.[^%.]+$" or name + assets[k][name] = assert(loader(dir..file)) + end + end + end + end + return loaded[assets_dir] +end + +return M diff --git a/assets/harddrop.mp3 b/assets/harddrop.mp3 deleted file mode 100644 index 797c954..0000000 Binary files a/assets/harddrop.mp3 and /dev/null differ diff --git a/assets/sfx/harddrop.mp3 b/assets/sfx/harddrop.mp3 new file mode 100644 index 0000000..797c954 Binary files /dev/null and b/assets/sfx/harddrop.mp3 differ diff --git a/assets/sfx/tspin.mp3 b/assets/sfx/tspin.mp3 new file mode 100644 index 0000000..22d979c Binary files /dev/null and b/assets/sfx/tspin.mp3 differ diff --git a/assets/sfx/tspindouble.mp3 b/assets/sfx/tspindouble.mp3 new file mode 100644 index 0000000..730d2d3 Binary files /dev/null and b/assets/sfx/tspindouble.mp3 differ diff --git a/assets/sfx/tspinkick5.mp3 b/assets/sfx/tspinkick5.mp3 new file mode 100644 index 0000000..b8b2fb0 Binary files /dev/null and b/assets/sfx/tspinkick5.mp3 differ diff --git a/assets/sfx/tspinsingle.mp3 b/assets/sfx/tspinsingle.mp3 new file mode 100644 index 0000000..0ae7792 Binary files /dev/null and b/assets/sfx/tspinsingle.mp3 differ diff --git a/assets/sfx/tspintriple.mp3 b/assets/sfx/tspintriple.mp3 new file mode 100644 index 0000000..5bdc6cf Binary files /dev/null and b/assets/sfx/tspintriple.mp3 differ diff --git a/assets/tspin.mp3 b/assets/tspin.mp3 deleted file mode 100644 index 22d979c..0000000 Binary files a/assets/tspin.mp3 and /dev/null differ diff --git a/assets/tspindouble.mp3 b/assets/tspindouble.mp3 deleted file mode 100644 index 730d2d3..0000000 Binary files a/assets/tspindouble.mp3 and /dev/null differ diff --git a/assets/tspinkick5.mp3 b/assets/tspinkick5.mp3 deleted file mode 100644 index b8b2fb0..0000000 Binary files a/assets/tspinkick5.mp3 and /dev/null differ diff --git a/assets/tspinsingle.mp3 b/assets/tspinsingle.mp3 deleted file mode 100644 index 0ae7792..0000000 Binary files a/assets/tspinsingle.mp3 and /dev/null differ diff --git a/assets/tspintriple.mp3 b/assets/tspintriple.mp3 deleted file mode 100644 index 5bdc6cf..0000000 Binary files a/assets/tspintriple.mp3 and /dev/null differ diff --git a/game/gfx.lua b/game/gfx.lua index 93bb3b0..37a451a 100644 --- a/game/gfx.lua +++ b/game/gfx.lua @@ -6,8 +6,10 @@ local debug_gfx = require "game.debug_gfx" local M = {} M.__index = M -function M.new(game) - local new = setmetatable({game = game}, M) +function M.new(assets, game) + local new = setmetatable({}, M) + new.assets = assets + new.game = game return new end diff --git a/game/init.lua b/game/init.lua index 3fc66cf..bdd6609 100644 --- a/game/init.lua +++ b/game/init.lua @@ -19,8 +19,9 @@ local pieces = { tetrominoes.z, } -function M.new(params) +function M.new(assets, params) local new = setmetatable({}, M) + new.assets = assets new.params = params new.field = playfield.new(params.lines or 20, params.columns or 10) new.hold = false @@ -28,7 +29,8 @@ function M.new(params) new.t_spun = false new.combo = -1 new.stats = {pieces=0, lines=0} - new.gfx = gfx.new(new) + new.gfx = gfx.new(assets, new) + new.sfx = sfx.new(assets) new.gravity_delay = 0.5 new.lock_delay = params.lock_delay or 0.8 new.infinity = params.infinity or false @@ -69,7 +71,7 @@ function M:input_loop() dropped = true end self:place_piece() - if dropped then sfx.play("harddrop") end + if dropped then self.sfx:play("harddrop") end elseif key == "c" then if not self.can_hold then goto bypass end if not self.hold then @@ -101,9 +103,9 @@ end function M:on_rotated() if self.piece.t_spun then if self.piece.last_kick_id == 5 then - sfx.play("tspinkick5") + self.sfx:play("tspinkick5") else - sfx.play("tspin") + self.sfx: play("tspin") end end end @@ -119,7 +121,7 @@ function M:place_piece() self.stats.lines = self.stats.lines + cleared if self.piece.t_spun then local sound = ({"tspinsingle","tspindouble","tspintriple"})[cleared] - sfx.play(sound) + self.sfx:play(sound) end self.loop:queue "game.line_clear" else diff --git a/game/sfx.lua b/game/sfx.lua index 261e6a5..346e448 100644 --- a/game/sfx.lua +++ b/game/sfx.lua @@ -1,23 +1,16 @@ -local sounds = { - "harddrop", - "tspinsingle", "tspindouble", "tspintriple", - "tspin", "tspinkick5", -} +local M = {} +M.__index = M -local sources = {} -for _, soundname in ipairs(sounds) do - sources[soundname] = love.audio.newSource("assets/"..soundname..".mp3","static") +function M.new(assets) + local new = setmetatable({}, M) + new.assets = assets + return new end -local M = {} - -function M.play(name) - if sources[name] then - sources[name]:seek(0) - sources[name]:play() - else - error("no such sound effect: "..name) - end +function M:play(name) + assert(self.assets.sfx[name], "no such sound effect: "..name) + self.assets.sfx[name]:seek(0) + self.assets.sfx[name]:play() end -return M \ No newline at end of file +return M diff --git a/main.lua b/main.lua index 2957bda..bbdd1a7 100644 --- a/main.lua +++ b/main.lua @@ -1,10 +1,12 @@ local evloop = require "evloop" local game = require "game" +local assets = require "assets" local function main() evloop.poll "load" - local game_obj = game.new {} + local game_assets = assets.load_from "assets" evloop.poll "loaded" + local game_obj = game.new(game_assets, {}) game_obj:run() evloop:quit() end -- cgit v1.2.3