From 899491325938d0b1e5bf701d33d24bb4283affaa Mon Sep 17 00:00:00 2001 From: sfan5 Date: Sat, 18 Jul 2015 14:31:34 +0200 Subject: [PATCH] Allow random menu images for subgames --- builtin/common/misc_helpers.lua | 16 +++++++++++++++- builtin/mainmenu/textures.lua | 30 ++++++++++++++++++++++++------ 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 @@ -183,10 +184,23 @@ function string.split(str, delim, include_empty, max_splits, sep_is_pattern) return items 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