new gui colors, multiplayer menu modified

This commit is contained in:
Looki2000 2023-04-25 23:24:58 +02:00
parent 25ecab3ad8
commit 19fa51c570
2 changed files with 158 additions and 111 deletions

View File

@ -16,41 +16,54 @@
--51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
local function get_sorted_servers() local function get_sorted_servers()
--local servers = {
-- fav = {},
-- public = {},
-- incompatible = {}
--}
main_serv = {
address = "test.test.test.test",
port = 30000,
name = "The official SussyCraft server"
}
local servers = { local servers = {
fav = {}, fav = serverlistmgr.get_favorites(),
public = {}, public = {main_serv},
incompatible = {} incompatible = {}
} }
local favs = serverlistmgr.get_favorites() --local favs = serverlistmgr.get_favorites()
local taken_favs = {} --local taken_favs = {}
local result = menudata.search_result or serverlistmgr.servers --local result = menudata.search_result or serverlistmgr.servers
for _, server in ipairs(result) do --for _, server in ipairs(result) do
server.is_favorite = false -- server.is_favorite = false
for index, fav in ipairs(favs) do -- for index, fav in ipairs(favs) do
if server.address == fav.address and server.port == fav.port then -- if server.address == fav.address and server.port == fav.port then
taken_favs[index] = true -- taken_favs[index] = true
server.is_favorite = true -- server.is_favorite = true
break -- break
end -- end
end -- end
server.is_compatible = is_server_protocol_compat(server.proto_min, server.proto_max) -- server.is_compatible = is_server_protocol_compat(server.proto_min, server.proto_max)
if server.is_favorite then -- if server.is_favorite then
table.insert(servers.fav, server) -- table.insert(servers.fav, server)
elseif server.is_compatible then -- elseif server.is_compatible then
table.insert(servers.public, server) -- table.insert(servers.public, server)
else -- else
table.insert(servers.incompatible, server) -- table.insert(servers.incompatible, server)
end -- end
end --end
--
if not menudata.search_result then --if not menudata.search_result then
for index, fav in ipairs(favs) do -- for index, fav in ipairs(favs) do
if not taken_favs[index] then -- if not taken_favs[index] then
table.insert(servers.fav, fav) -- table.insert(servers.fav, fav)
end -- end
end -- end
end --end
return servers return servers
end end
@ -80,11 +93,11 @@ local function get_formspec(tabview, name, tabdata)
"box[0,0;5.75,7;#666666]" .. "box[0,0;5.75,7;#666666]" ..
-- Address / Port -- Address / Port
"label[0.25,0.35;" .. fgettext("Address") .. "]" .. "label[0.25,0.30;" .. fgettext("Address") .. "]" ..
"label[4.25,0.35;" .. fgettext("Port") .. "]" .. "label[4,0.30;" .. fgettext("Port") .. "]" ..
"field[0.25,0.5;4,0.75;te_address;;" .. "field[0.25,0.5;3.75,0.75;te_address;;" ..
core.formspec_escape(core.settings:get("address")) .. "]" .. core.formspec_escape(core.settings:get("address")) .. "]" ..
"field[4.25,0.5;1.25,0.75;te_port;;" .. "field[4,0.5;1.5,0.75;te_port;;" ..
core.formspec_escape(core.settings:get("remote_port")) .. "]" .. core.formspec_escape(core.settings:get("remote_port")) .. "]" ..
-- Description Background -- Description Background
@ -186,60 +199,60 @@ end
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
local function search_server_list(input) --local function search_server_list(input)
menudata.search_result = nil -- menudata.search_result = nil
if #serverlistmgr.servers < 2 then -- if #serverlistmgr.servers < 2 then
return -- return
end -- end
--
-- setup the keyword list -- -- setup the keyword list
local keywords = {} -- local keywords = {}
for word in input:gmatch("%S+") do -- for word in input:gmatch("%S+") do
word = word:gsub("(%W)", "%%%1") -- word = word:gsub("(%W)", "%%%1")
table.insert(keywords, word) -- table.insert(keywords, word)
end -- end
--
if #keywords == 0 then -- if #keywords == 0 then
return -- return
end -- end
--
menudata.search_result = {} -- menudata.search_result = {}
--
-- Search the serverlist -- -- Search the serverlist
local search_result = {} -- local search_result = {}
for i = 1, #serverlistmgr.servers do -- for i = 1, #serverlistmgr.servers do
local server = serverlistmgr.servers[i] -- local server = serverlistmgr.servers[i]
local found = 0 -- local found = 0
for k = 1, #keywords do -- for k = 1, #keywords do
local keyword = keywords[k] -- local keyword = keywords[k]
if server.name then -- if server.name then
local sername = server.name:lower() -- local sername = server.name:lower()
local _, count = sername:gsub(keyword, keyword) -- local _, count = sername:gsub(keyword, keyword)
found = found + count * 4 -- found = found + count * 4
end -- end
--
if server.description then -- if server.description then
local desc = server.description:lower() -- local desc = server.description:lower()
local _, count = desc:gsub(keyword, keyword) -- local _, count = desc:gsub(keyword, keyword)
found = found + count * 2 -- found = found + count * 2
end -- end
end -- end
if found > 0 then -- if found > 0 then
local points = (#serverlistmgr.servers - i) / 5 + found -- local points = (#serverlistmgr.servers - i) / 5 + found
server.points = points -- server.points = points
table.insert(search_result, server) -- table.insert(search_result, server)
end -- end
end -- end
--
if #search_result == 0 then -- if #search_result == 0 then
return -- return
end -- end
--
table.sort(search_result, function(a, b) -- table.sort(search_result, function(a, b)
return a.points > b.points -- return a.points > b.points
end) -- end)
menudata.search_result = search_result -- menudata.search_result = search_result
end --end
local function set_selected_server(tabdata, idx, server) local function set_selected_server(tabdata, idx, server)
-- reset selection -- reset selection
@ -325,22 +338,22 @@ local function main_button_handler(tabview, fields, name, tabdata)
return true return true
end end
if fields.btn_mp_clear then --if fields.btn_mp_clear then
tabdata.search_for = "" -- tabdata.search_for = ""
menudata.search_result = nil -- menudata.search_result = nil
return true -- return true
end --end
if fields.btn_mp_search or fields.key_enter_field == "te_search" then --if fields.btn_mp_search or fields.key_enter_field == "te_search" then
tabdata.search_for = fields.te_search -- tabdata.search_for = fields.te_search
search_server_list(fields.te_search:lower()) -- search_server_list(fields.te_search:lower())
if menudata.search_result then -- if menudata.search_result then
-- first server in row 2 due to header -- -- first server in row 2 due to header
set_selected_server(tabdata, 2, menudata.search_result[1]) -- set_selected_server(tabdata, 2, menudata.search_result[1])
end -- end
return true -- return true
end --end
--if fields.btn_mp_refresh then --if fields.btn_mp_refresh then
-- serverlistmgr.sync() -- serverlistmgr.sync()
@ -366,7 +379,10 @@ local function main_button_handler(tabview, fields, name, tabdata)
if server and server.address == gamedata.address and if server and server.address == gamedata.address and
server.port == gamedata.port then server.port == gamedata.port then
-- add only if not main_serv
if server.address ~= main_serv.address and server.port ~= main_serv.port then
serverlistmgr.add_favorite(server) serverlistmgr.add_favorite(server)
end
gamedata.servername = server.name gamedata.servername = server.name
gamedata.serverdescription = server.description gamedata.serverdescription = server.description
@ -414,10 +430,10 @@ local function main_button_handler(tabview, fields, name, tabdata)
return false return false
end end
local function on_change(type, old_tab, new_tab) --local function on_change(type, old_tab, new_tab)
if type == "LEAVE" then return end -- if type == "LEAVE" then return end
serverlistmgr.sync() -- serverlistmgr.sync()
end --end
return { return {
name = "online", name = "online",

View File

@ -142,7 +142,27 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
skin->setColor(gui::EGDC_3D_LIGHT, video::SColor(0, 0, 0, 0)); skin->setColor(gui::EGDC_3D_LIGHT, video::SColor(0, 0, 0, 0));
skin->setColor(gui::EGDC_3D_HIGH_LIGHT, video::SColor(255, 30, 30, 30)); skin->setColor(gui::EGDC_3D_HIGH_LIGHT, video::SColor(255, 30, 30, 30));
skin->setColor(gui::EGDC_3D_SHADOW, video::SColor(255, 0, 0, 0)); skin->setColor(gui::EGDC_3D_SHADOW, video::SColor(255, 0, 0, 0));
skin->setColor(gui::EGDC_HIGH_LIGHT, video::SColor(255, 70, 120, 50));
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> distrib(0, 1);
// random gui color
bool gui_color = static_cast<bool>(distrib(gen));
// sus list highlight color
//skin->setColor(gui::EGDC_HIGH_LIGHT, video::SColor(255, 70, 120, 50)); // minetest green
//skin->setColor(gui::EGDC_HIGH_LIGHT, video::SColor(255, 120, 50, 50)); // dark sussy red
//skin->setColor(gui::EGDC_HIGH_LIGHT, video::SColor(255, 50, 50, 120)); // evening sky blue
if (gui_color)
skin->setColor(gui::EGDC_HIGH_LIGHT, video::SColor(255, 120, 50, 50)); // dark sussy red
else
skin->setColor(gui::EGDC_HIGH_LIGHT, video::SColor(255, 50, 50, 120)); // evening sky blue
skin->setColor(gui::EGDC_HIGH_LIGHT_TEXT, video::SColor(255, 255, 255, 255)); skin->setColor(gui::EGDC_HIGH_LIGHT_TEXT, video::SColor(255, 255, 255, 255));
#ifdef HAVE_TOUCHSCREENGUI #ifdef HAVE_TOUCHSCREENGUI
float density = RenderingEngine::getDisplayDensity(); float density = RenderingEngine::getDisplayDensity();
@ -173,7 +193,18 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args)
// Irrlicht 1.8 input colours // Irrlicht 1.8 input colours
skin->setColor(gui::EGDC_EDITABLE, video::SColor(255, 128, 128, 128)); skin->setColor(gui::EGDC_EDITABLE, video::SColor(255, 128, 128, 128));
skin->setColor(gui::EGDC_FOCUSED_EDITABLE, video::SColor(255, 96, 134, 49));
// sus field selected color
//skin->setColor(gui::EGDC_FOCUSED_EDITABLE, video::SColor(255, 96, 134, 49)); // minetest green
//skin->setColor(gui::EGDC_FOCUSED_EDITABLE, video::SColor(255, 135, 50, 50)); // dark sussy red
//skin->setColor(gui::EGDC_FOCUSED_EDITABLE, video::SColor(255, 50, 50, 135)); // evening sky blue
if (gui_color)
skin->setColor(gui::EGDC_FOCUSED_EDITABLE, video::SColor(255, 135, 50, 50)); // dark sussy red
else
skin->setColor(gui::EGDC_FOCUSED_EDITABLE, video::SColor(255, 50, 50, 135)); // evening sky blue
// Create the menu clouds // Create the menu clouds
if (!g_menucloudsmgr) if (!g_menucloudsmgr)