diff options
author | the lemons <citrons@mondecitronne.com> | 2023-03-30 02:34:46 -0500 |
---|---|---|
committer | the lemons <citrons@mondecitronne.com> | 2023-03-30 02:34:46 -0500 |
commit | 3458d55440012c49b7315b91dd7b4cd5bb2fcdd5 (patch) | |
tree | 7f0f339c96a08a67206cb0489d95fc816901e41f | |
parent | 567065fde615bb7da658ae647d4ef5848d69e229 (diff) |
asset loading system
-rw-r--r-- | assets.lua | 26 | ||||
-rw-r--r-- | assets/sfx/harddrop.mp3 (renamed from assets/harddrop.mp3) | bin | 15588 -> 15588 bytes | |||
-rw-r--r-- | assets/sfx/tspin.mp3 (renamed from assets/tspin.mp3) | bin | 13770 -> 13770 bytes | |||
-rw-r--r-- | assets/sfx/tspindouble.mp3 (renamed from assets/tspindouble.mp3) | bin | 25748 -> 25748 bytes | |||
-rw-r--r-- | assets/sfx/tspinkick5.mp3 (renamed from assets/tspinkick5.mp3) | bin | 17006 -> 17006 bytes | |||
-rw-r--r-- | assets/sfx/tspinsingle.mp3 (renamed from assets/tspinsingle.mp3) | bin | 25748 -> 25748 bytes | |||
-rw-r--r-- | assets/sfx/tspintriple.mp3 (renamed from assets/tspintriple.mp3) | bin | 48193 -> 48193 bytes | |||
-rw-r--r-- | game/gfx.lua | 6 | ||||
-rw-r--r-- | game/init.lua | 14 | ||||
-rw-r--r-- | game/sfx.lua | 29 | ||||
-rw-r--r-- | main.lua | 4 |
11 files changed, 52 insertions, 27 deletions
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/sfx/harddrop.mp3 Binary files differindex 797c954..797c954 100644 --- a/assets/harddrop.mp3 +++ b/assets/sfx/harddrop.mp3 diff --git a/assets/tspin.mp3 b/assets/sfx/tspin.mp3 Binary files differindex 22d979c..22d979c 100644 --- a/assets/tspin.mp3 +++ b/assets/sfx/tspin.mp3 diff --git a/assets/tspindouble.mp3 b/assets/sfx/tspindouble.mp3 Binary files differindex 730d2d3..730d2d3 100644 --- a/assets/tspindouble.mp3 +++ b/assets/sfx/tspindouble.mp3 diff --git a/assets/tspinkick5.mp3 b/assets/sfx/tspinkick5.mp3 Binary files differindex b8b2fb0..b8b2fb0 100644 --- a/assets/tspinkick5.mp3 +++ b/assets/sfx/tspinkick5.mp3 diff --git a/assets/tspinsingle.mp3 b/assets/sfx/tspinsingle.mp3 Binary files differindex 0ae7792..0ae7792 100644 --- a/assets/tspinsingle.mp3 +++ b/assets/sfx/tspinsingle.mp3 diff --git a/assets/tspintriple.mp3 b/assets/sfx/tspintriple.mp3 Binary files differindex 5bdc6cf..5bdc6cf 100644 --- a/assets/tspintriple.mp3 +++ b/assets/sfx/tspintriple.mp3 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 @@ -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 |