aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsfan5 <sfan5@live.de>2015-07-18 14:31:34 +0200
committerest31 <MTest31@outlook.com>2015-07-21 16:58:22 +0200
commit899491325938d0b1e5bf701d33d24bb4283affaa (patch)
tree4e75c4a81854556223ccaef8ad02936fd55e82b9
parentfa7fe510d9b77c0a7802604a5697de4e52cddba3 (diff)
downloadminetest-899491325938d0b1e5bf701d33d24bb4283affaa.tar.gz
minetest-899491325938d0b1e5bf701d33d24bb4283affaa.tar.bz2
minetest-899491325938d0b1e5bf701d33d24bb4283affaa.zip
Allow random menu images for subgames
-rw-r--r--builtin/common/misc_helpers.lua16
-rw-r--r--builtin/mainmenu/textures.lua30
2 files changed, 39 insertions, 7 deletions
diff --git a/builtin/common/misc_helpers.lua b/builtin/common/misc_helpers.lua
index 1c9f2a48f..bf672e6da 100644
--- a/builtin/common/misc_helpers.lua
+++ b/builtin/common/misc_helpers.lua
@@ -159,6 +159,7 @@ function dump(o, indent, nested, level)
return "{"..table.concat(t, ", ").."}"
end
+--------------------------------------------------------------------------------
function string.split(str, delim, include_empty, max_splits, sep_is_pattern)
delim = delim or ","
max_splits = max_splits or -1
@@ -184,9 +185,22 @@ function string.split(str, delim, include_empty, max_splits, sep_is_pattern)
end
--------------------------------------------------------------------------------
+function table.indexof(list, val)
+ for i = 1, #list do
+ if list[i] == val then
+ return i
+ end
+ end
+ return -1
+end
+
+assert(table.indexof({"foo", "bar"}, "foo") == 1)
+assert(table.indexof({"foo", "bar"}, "baz") == -1)
+
+--------------------------------------------------------------------------------
function file_exists(filename)
local f = io.open(filename, "r")
- if f==nil then
+ if f == nil then
return false
else
f:close()
diff --git a/builtin/mainmenu/textures.lua b/builtin/mainmenu/textures.lua
index 56992c0c5..700bdb5cc 100644
--- a/builtin/mainmenu/textures.lua
+++ b/builtin/mainmenu/textures.lua
@@ -129,7 +129,7 @@ function mm_texture.set_generic(identifier)
end
--------------------------------------------------------------------------------
-function mm_texture.set_game(identifier,gamedetails)
+function mm_texture.set_game(identifier, gamedetails)
if gamedetails == nil then
return false
@@ -137,15 +137,33 @@ function mm_texture.set_game(identifier,gamedetails)
if mm_texture.texturepack ~= nil then
local path = mm_texture.texturepack .. DIR_DELIM ..
- gamedetails.id .. "_menu_" .. identifier .. ".png"
- if core.set_background(identifier,path) then
+ gamedetails.id .. "_menu_" .. identifier .. ".png"
+ if core.set_background(identifier, path) then
return true
end
end
- local path = gamedetails.path .. DIR_DELIM .."menu" ..
- DIR_DELIM .. identifier .. ".png"
- if core.set_background(identifier,path) then
+ -- Find out how many randomized textures the subgame provides
+ local n, filename
+ local menu_files = core.get_dir_list(gamedetails.path .. DIR_DELIM .. "menu", false)
+ for i = 1, #menu_files do
+ local filename = identifier .. "." .. i .. ".png"
+ if table.indexof(menu_files, filename) == -1 then
+ n = i - 1
+ break
+ end
+ end
+ -- Select random texture, 0 means standard texture
+ n = math.random(0, n)
+ if n == 0 then
+ filename = identifier .. ".png"
+ else
+ filename = identifier .. "." .. n .. ".png"
+ end
+
+ local path = gamedetails.path .. DIR_DELIM .. "menu" ..
+ DIR_DELIM .. filename
+ if core.set_background(identifier, path) then
return true
end