Add screenshots and a README to display them.
This commit is contained in:
parent
ce6cb893bf
commit
48ffa74bfd
12 changed files with 229 additions and 168 deletions
26
README.md
Normal file
26
README.md
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
|
||||||
|
# Screenshots
|
||||||
|
|
||||||
|
- Meta menu:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Server list:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Content menu:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- ContentDB menu:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Settings menu:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Credits menu:
|
||||||
|
|
||||||
|

|
||||||
4
imfs.lua
4
imfs.lua
|
|
@ -373,7 +373,7 @@ fs_hypertext.__index = fs_hypertext
|
||||||
setmetatable(fs_hypertext, {
|
setmetatable(fs_hypertext, {
|
||||||
__call = function(_, x, y, w, h, txt)
|
__call = function(_, x, y, w, h, txt)
|
||||||
local e = {x = x, y = y, w = w, h = h, txt = txt, _styles = {}}
|
local e = {x = x, y = y, w = w, h = h, txt = txt, _styles = {}}
|
||||||
e.__id = "_"..minetest.get_us_time().."_"..math.random(1, 100000)
|
e.__id = new_id()
|
||||||
setmetatable(e, fs_hypertext)
|
setmetatable(e, fs_hypertext)
|
||||||
table.insert(ctx, e)
|
table.insert(ctx, e)
|
||||||
return e
|
return e
|
||||||
|
|
@ -747,7 +747,7 @@ fs_scrollbar.__index = fs_scrollbar
|
||||||
setmetatable(fs_scrollbar, {
|
setmetatable(fs_scrollbar, {
|
||||||
__call = function(_, x, y, w, h, orientation, value)
|
__call = function(_, x, y, w, h, orientation, value)
|
||||||
local e = {x = x, y = y, w = w, h = h, orientation = orientation or "vertical", value = value or "", _styles = {}}
|
local e = {x = x, y = y, w = w, h = h, orientation = orientation or "vertical", value = value or "", _styles = {}}
|
||||||
e.__id = "_"..minetest.get_us_time().."_"..math.random(1, 100000)
|
e.__id = new_id()
|
||||||
setmetatable(e, fs_scrollbar)
|
setmetatable(e, fs_scrollbar)
|
||||||
ctx[#ctx +1] = e
|
ctx[#ctx +1] = e
|
||||||
return e
|
return e
|
||||||
|
|
|
||||||
2
init.lua
2
init.lua
|
|
@ -259,7 +259,7 @@ function show_online_content_menu(content)
|
||||||
show_type = imfs.state("all"),
|
show_type = imfs.state("all"),
|
||||||
content_shown = imfs.state(),
|
content_shown = imfs.state(),
|
||||||
page = imfs.state(1),
|
page = imfs.state(1),
|
||||||
current_package = imfs.state(),
|
detail = imfs.state(),
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
BIN
screenshots/content.png
Normal file
BIN
screenshots/content.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 104 KiB |
BIN
screenshots/contentdb.png
Normal file
BIN
screenshots/contentdb.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 905 KiB |
BIN
screenshots/credits.png
Normal file
BIN
screenshots/credits.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 181 KiB |
BIN
screenshots/meta.png
Normal file
BIN
screenshots/meta.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 73 KiB |
BIN
screenshots/servers.png
Normal file
BIN
screenshots/servers.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 158 KiB |
BIN
screenshots/settings.png
Normal file
BIN
screenshots/settings.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 144 KiB |
|
|
@ -35,7 +35,11 @@ return function(state)
|
||||||
imfs.row(0.15, 0.05, "100% - 0.3", "100% - 0.13")
|
imfs.row(0.15, 0.05, "100% - 0.3", "100% - 0.13")
|
||||||
local show_type = state.show_type()
|
local show_type = state.show_type()
|
||||||
imfs.button(0, 0, "1x", "100%", "All")
|
imfs.button(0, 0, "1x", "100%", "All")
|
||||||
:style(show_type == "all" and style_borderless_alt or style_borderless)
|
:style(
|
||||||
|
show_type == "all"
|
||||||
|
and style_borderless_alt
|
||||||
|
or style_borderless
|
||||||
|
)
|
||||||
:style("hovered", style_borderless_hovered)
|
:style("hovered", style_borderless_hovered)
|
||||||
:style("pressed", style_borderless_hovered)
|
:style("pressed", style_borderless_hovered)
|
||||||
:onclick(function()
|
:onclick(function()
|
||||||
|
|
@ -52,7 +56,11 @@ return function(state)
|
||||||
end)
|
end)
|
||||||
imfs.box(0, 0, 0.1, "100%", theme.styles.container.border_color)
|
imfs.box(0, 0, 0.1, "100%", theme.styles.container.border_color)
|
||||||
imfs.button(0, 0, "1x", "100%", "Games")
|
imfs.button(0, 0, "1x", "100%", "Games")
|
||||||
:style(show_type == "games" and style_borderless_alt or style_borderless)
|
:style(
|
||||||
|
show_type == "games"
|
||||||
|
and style_borderless_alt
|
||||||
|
or style_borderless
|
||||||
|
)
|
||||||
:style("hovered", style_borderless_hovered)
|
:style("hovered", style_borderless_hovered)
|
||||||
:style("pressed", style_borderless_hovered)
|
:style("pressed", style_borderless_hovered)
|
||||||
:onclick(function()
|
:onclick(function()
|
||||||
|
|
@ -69,7 +77,11 @@ return function(state)
|
||||||
end)
|
end)
|
||||||
imfs.box(0, 0, 0.1, "100%", theme.styles.container.border_color)
|
imfs.box(0, 0, 0.1, "100%", theme.styles.container.border_color)
|
||||||
imfs.button(0, 0, "1x", "100%", "Mods")
|
imfs.button(0, 0, "1x", "100%", "Mods")
|
||||||
:style(show_type == "mods" and style_borderless_alt or style_borderless)
|
:style(
|
||||||
|
show_type == "mods"
|
||||||
|
and style_borderless_alt
|
||||||
|
or style_borderless
|
||||||
|
)
|
||||||
:style("hovered", style_borderless_hovered)
|
:style("hovered", style_borderless_hovered)
|
||||||
:style("pressed", style_borderless_hovered)
|
:style("pressed", style_borderless_hovered)
|
||||||
:onclick(function()
|
:onclick(function()
|
||||||
|
|
@ -86,7 +98,11 @@ return function(state)
|
||||||
end)
|
end)
|
||||||
imfs.box(0, 0, 0.1, "100%", theme.styles.container.border_color)
|
imfs.box(0, 0, 0.1, "100%", theme.styles.container.border_color)
|
||||||
imfs.button(0, 0, "1x", "100%", "Texture Packs")
|
imfs.button(0, 0, "1x", "100%", "Texture Packs")
|
||||||
:style(show_type == "texturepacks" and style_borderless_alt or style_borderless)
|
:style(
|
||||||
|
show_type == "texturepacks"
|
||||||
|
and style_borderless_alt
|
||||||
|
or style_borderless
|
||||||
|
)
|
||||||
:style("hovered", style_borderless_hovered)
|
:style("hovered", style_borderless_hovered)
|
||||||
:style("pressed", style_borderless_hovered)
|
:style("pressed", style_borderless_hovered)
|
||||||
:onclick(function()
|
:onclick(function()
|
||||||
|
|
@ -157,8 +173,15 @@ return function(state)
|
||||||
return imfs.end_()
|
return imfs.end_()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if state.detail() then
|
||||||
|
imfs.button(1, 2, 3, 0.75, "Back")
|
||||||
|
:onclick(function()
|
||||||
|
state.detail(false)
|
||||||
|
end)
|
||||||
|
else
|
||||||
local content = state.content_shown()
|
local content = state.content_shown()
|
||||||
local num_per_page = math.floor((size.x + 0.5) / 5.5) * math.floor((size.y - 1.05) / 3.5)
|
local num_per_page =
|
||||||
|
math.floor((size.x + 0.5) / 5.5) * math.floor((size.y - 1.05) / 3.5)
|
||||||
local excess_x = (size.x + 0.5) % 5.5
|
local excess_x = (size.x + 0.5) % 5.5
|
||||||
local excess_y = (size.y - 1.05) % 3.5
|
local excess_y = (size.y - 1.05) % 3.5
|
||||||
imfs.scroll_container(0, 1.05, "100%", "100% - 1.55", "horizontal", 0, "")
|
imfs.scroll_container(0, 1.05, "100%", "100% - 1.55", "horizontal", 0, "")
|
||||||
|
|
@ -214,7 +237,7 @@ return function(state)
|
||||||
bgcolor = "#0004"
|
bgcolor = "#0004"
|
||||||
})
|
})
|
||||||
:onclick(function()
|
:onclick(function()
|
||||||
|
state.detail(pkg)
|
||||||
end)
|
end)
|
||||||
imfs.group_end()
|
imfs.group_end()
|
||||||
x = x + 5.5
|
x = x + 5.5
|
||||||
|
|
@ -226,6 +249,7 @@ return function(state)
|
||||||
end
|
end
|
||||||
|
|
||||||
imfs.scroll_container_end()
|
imfs.scroll_container_end()
|
||||||
|
end
|
||||||
|
|
||||||
return imfs.end_()
|
return imfs.end_()
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -127,6 +127,17 @@ local function refresh_server_list(state)
|
||||||
nil,
|
nil,
|
||||||
function(result)
|
function(result)
|
||||||
local list = table.copy(state.favorite_servers)
|
local list = table.copy(state.favorite_servers)
|
||||||
|
local num_servers = #result
|
||||||
|
local i = 0
|
||||||
|
while i < num_servers do
|
||||||
|
i = i + 1
|
||||||
|
-- Drop incompatible servers. You can't join them,
|
||||||
|
-- so showing them is rather pointless.
|
||||||
|
if (result[i].proto_max or version.proto_min) < version.proto_min then
|
||||||
|
table.remove(result, i)
|
||||||
|
num_servers = num_servers - 1
|
||||||
|
end
|
||||||
|
end
|
||||||
table.insert_all(list, result)
|
table.insert_all(list, result)
|
||||||
state.servers = list
|
state.servers = list
|
||||||
if state.search ~= "" then
|
if state.search ~= "" then
|
||||||
|
|
@ -280,19 +291,11 @@ return function(state)
|
||||||
imfs.scope("servers")
|
imfs.scope("servers")
|
||||||
local height = size.y * 0.8
|
local height = size.y * 0.8
|
||||||
local i = 0
|
local i = 0
|
||||||
local idx = state.scroll_pos()
|
for idx = state.scroll_pos(), state.scroll_pos() + height / 0.5 do
|
||||||
while true do
|
|
||||||
-- We must use a while loop here because we skip incompatible servers,
|
|
||||||
-- and we have no way of knowing how many there will be until we iterate.
|
|
||||||
if i > math.ceil(height / 0.5) then break end
|
|
||||||
|
|
||||||
local x = list[idx]
|
local x = list[idx]
|
||||||
-- End early if we've run out of list.
|
-- End early if we've run out of list.
|
||||||
if not x then break end
|
if not x then break end
|
||||||
|
|
||||||
-- Skip incompatible servers. You can't join them,
|
|
||||||
-- so showing them is rather pointless.
|
|
||||||
if (x.proto_max or version.proto_min) >= version.proto_min then
|
|
||||||
local ping_lvl = 0
|
local ping_lvl = 0
|
||||||
local lag = (x.lag or 0) * 1000 + (x.ping or 0) * 250
|
local lag = (x.lag or 0) * 1000 + (x.ping or 0) * 250
|
||||||
if lag <= 125 then
|
if lag <= 125 then
|
||||||
|
|
@ -307,7 +310,7 @@ return function(state)
|
||||||
|
|
||||||
local name = x.name and x.name:trim() or ""
|
local name = x.name and x.name:trim() or ""
|
||||||
if name == "" then
|
if name == "" then
|
||||||
name = core.colorize("#888", x.address..":"..x.port)
|
name = core.colorize(theme.styles.text_color_muted, x.address..":"..x.port)
|
||||||
end
|
end
|
||||||
|
|
||||||
imfs.button(0, i * 0.5, "100%", 0.5)
|
imfs.button(0, i * 0.5, "100%", 0.5)
|
||||||
|
|
@ -382,8 +385,6 @@ return function(state)
|
||||||
|
|
||||||
i = i + 1
|
i = i + 1
|
||||||
end
|
end
|
||||||
idx = idx + 1
|
|
||||||
end
|
|
||||||
|
|
||||||
imfs.scope_end()
|
imfs.scope_end()
|
||||||
|
|
||||||
|
|
@ -467,7 +468,7 @@ return function(state)
|
||||||
end
|
end
|
||||||
|
|
||||||
if joining == true then
|
if joining == true then
|
||||||
imfs.hypertext(0, 0, "100%", 0.75, "<global valign=middle halign=center color=#aaa>Connecting to server...")
|
imfs.hypertext(0, 0, "100%", 0.75, "<global valign=middle halign=center color=#aaa>Joining server...")
|
||||||
imfs.group(0, 0, "100%", 1.05)
|
imfs.group(0, 0, "100%", 1.05)
|
||||||
imfs.image(0, 0.3, "100%", "100% - 0.3", theme.get_background_image("field"))
|
imfs.image(0, 0.3, "100%", "100% - 0.3", theme.get_background_image("field"))
|
||||||
imfs.label(0.2, 0.125, "Address")
|
imfs.label(0.2, 0.125, "Address")
|
||||||
|
|
@ -489,7 +490,7 @@ return function(state)
|
||||||
end)
|
end)
|
||||||
imfs.group_end()
|
imfs.group_end()
|
||||||
else
|
else
|
||||||
imfs.hypertext(0, 0, "100%", 0.75, "<global valign=middle halign=center color=#aaa>Connecting to <b>"..core.hypertext_escape(joining.name or joining.address..":"..joining.port).."</b>...")
|
imfs.hypertext(0, 0, "100%", 0.75, "<global valign=middle halign=center color=#aaa>Joining <b>"..core.hypertext_escape(joining.name or joining.address..":"..joining.port).."</b>...")
|
||||||
end
|
end
|
||||||
|
|
||||||
theme.field(0, 0, "100%", 0.75, "Username", state.username)
|
theme.field(0, 0, "100%", 0.75, "Username", state.username)
|
||||||
|
|
|
||||||
|
|
@ -42,10 +42,19 @@ local function search_settings(state, search)
|
||||||
return state.settings, state.categories
|
return state.settings, state.categories
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local words = search:lower():trim():split(" ")
|
||||||
|
|
||||||
local out = {}
|
local out = {}
|
||||||
for category, settings in pairs(state.settings) do
|
for category, settings in pairs(state.settings) do
|
||||||
for i = 1, #settings do
|
for i = 1, #settings do
|
||||||
if settings[i].name:find(search, 1, true) then
|
for j = 1, #words do
|
||||||
|
local passed = true
|
||||||
|
if not (settings[i].readable_name:lower():find(words[j], 1, true)
|
||||||
|
or settings[i].name:find(words[j], 1, true)) then
|
||||||
|
passed = false
|
||||||
|
end
|
||||||
|
|
||||||
|
if passed then
|
||||||
if not out[category] then
|
if not out[category] then
|
||||||
out[category] = {settings[i]}
|
out[category] = {settings[i]}
|
||||||
else
|
else
|
||||||
|
|
@ -54,6 +63,7 @@ local function search_settings(state, search)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local categories = {}
|
local categories = {}
|
||||||
for i = 1, #state.categories do
|
for i = 1, #state.categories do
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue