summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthe lemons <citrons@mondecitronne.com>2023-03-30 02:34:46 -0500
committerthe lemons <citrons@mondecitronne.com>2023-03-30 02:34:46 -0500
commit3458d55440012c49b7315b91dd7b4cd5bb2fcdd5 (patch)
tree7f0f339c96a08a67206cb0489d95fc816901e41f
parent567065fde615bb7da658ae647d4ef5848d69e229 (diff)
asset loading system
-rw-r--r--assets.lua26
-rw-r--r--assets/sfx/harddrop.mp3 (renamed from assets/harddrop.mp3)bin15588 -> 15588 bytes
-rw-r--r--assets/sfx/tspin.mp3 (renamed from assets/tspin.mp3)bin13770 -> 13770 bytes
-rw-r--r--assets/sfx/tspindouble.mp3 (renamed from assets/tspindouble.mp3)bin25748 -> 25748 bytes
-rw-r--r--assets/sfx/tspinkick5.mp3 (renamed from assets/tspinkick5.mp3)bin17006 -> 17006 bytes
-rw-r--r--assets/sfx/tspinsingle.mp3 (renamed from assets/tspinsingle.mp3)bin25748 -> 25748 bytes
-rw-r--r--assets/sfx/tspintriple.mp3 (renamed from assets/tspintriple.mp3)bin48193 -> 48193 bytes
-rw-r--r--game/gfx.lua6
-rw-r--r--game/init.lua14
-rw-r--r--game/sfx.lua29
-rw-r--r--main.lua4
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
index 797c954..797c954 100644
--- a/assets/harddrop.mp3
+++ b/assets/sfx/harddrop.mp3
Binary files differ
diff --git a/assets/tspin.mp3 b/assets/sfx/tspin.mp3
index 22d979c..22d979c 100644
--- a/assets/tspin.mp3
+++ b/assets/sfx/tspin.mp3
Binary files differ
diff --git a/assets/tspindouble.mp3 b/assets/sfx/tspindouble.mp3
index 730d2d3..730d2d3 100644
--- a/assets/tspindouble.mp3
+++ b/assets/sfx/tspindouble.mp3
Binary files differ
diff --git a/assets/tspinkick5.mp3 b/assets/sfx/tspinkick5.mp3
index b8b2fb0..b8b2fb0 100644
--- a/assets/tspinkick5.mp3
+++ b/assets/sfx/tspinkick5.mp3
Binary files differ
diff --git a/assets/tspinsingle.mp3 b/assets/sfx/tspinsingle.mp3
index 0ae7792..0ae7792 100644
--- a/assets/tspinsingle.mp3
+++ b/assets/sfx/tspinsingle.mp3
Binary files differ
diff --git a/assets/tspintriple.mp3 b/assets/sfx/tspintriple.mp3
index 5bdc6cf..5bdc6cf 100644
--- a/assets/tspintriple.mp3
+++ b/assets/sfx/tspintriple.mp3
Binary files 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