diff --git a/builtin/mainmenu/tab_online.lua b/builtin/mainmenu/tab_online.lua index 51beacd..20f037f 100644 --- a/builtin/mainmenu/tab_online.lua +++ b/builtin/mainmenu/tab_online.lua @@ -16,41 +16,54 @@ --51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 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 = { - fav = {}, - public = {}, + fav = serverlistmgr.get_favorites(), + public = {main_serv}, incompatible = {} } - local favs = serverlistmgr.get_favorites() - local taken_favs = {} - local result = menudata.search_result or serverlistmgr.servers - for _, server in ipairs(result) do - server.is_favorite = false - for index, fav in ipairs(favs) do - if server.address == fav.address and server.port == fav.port then - taken_favs[index] = true - server.is_favorite = true - break - end - end - server.is_compatible = is_server_protocol_compat(server.proto_min, server.proto_max) - if server.is_favorite then - table.insert(servers.fav, server) - elseif server.is_compatible then - table.insert(servers.public, server) - else - table.insert(servers.incompatible, server) - end - end - - if not menudata.search_result then - for index, fav in ipairs(favs) do - if not taken_favs[index] then - table.insert(servers.fav, fav) - end - end - end + --local favs = serverlistmgr.get_favorites() + --local taken_favs = {} + --local result = menudata.search_result or serverlistmgr.servers + --for _, server in ipairs(result) do + -- server.is_favorite = false + -- for index, fav in ipairs(favs) do + -- if server.address == fav.address and server.port == fav.port then + -- taken_favs[index] = true + -- server.is_favorite = true + -- break + -- end + -- end + -- server.is_compatible = is_server_protocol_compat(server.proto_min, server.proto_max) + -- if server.is_favorite then + -- table.insert(servers.fav, server) + -- elseif server.is_compatible then + -- table.insert(servers.public, server) + -- else + -- table.insert(servers.incompatible, server) + -- end + --end +-- + --if not menudata.search_result then + -- for index, fav in ipairs(favs) do + -- if not taken_favs[index] then + -- table.insert(servers.fav, fav) + -- end + -- end + --end return servers end @@ -80,11 +93,11 @@ local function get_formspec(tabview, name, tabdata) "box[0,0;5.75,7;#666666]" .. -- Address / Port - "label[0.25,0.35;" .. fgettext("Address") .. "]" .. - "label[4.25,0.35;" .. fgettext("Port") .. "]" .. - "field[0.25,0.5;4,0.75;te_address;;" .. + "label[0.25,0.30;" .. fgettext("Address") .. "]" .. + "label[4,0.30;" .. fgettext("Port") .. "]" .. + "field[0.25,0.5;3.75,0.75;te_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")) .. "]" .. -- Description Background @@ -186,60 +199,60 @@ end -------------------------------------------------------------------------------- -local function search_server_list(input) - menudata.search_result = nil - if #serverlistmgr.servers < 2 then - return - end - - -- setup the keyword list - local keywords = {} - for word in input:gmatch("%S+") do - word = word:gsub("(%W)", "%%%1") - table.insert(keywords, word) - end - - if #keywords == 0 then - return - end - - menudata.search_result = {} - - -- Search the serverlist - local search_result = {} - for i = 1, #serverlistmgr.servers do - local server = serverlistmgr.servers[i] - local found = 0 - for k = 1, #keywords do - local keyword = keywords[k] - if server.name then - local sername = server.name:lower() - local _, count = sername:gsub(keyword, keyword) - found = found + count * 4 - end - - if server.description then - local desc = server.description:lower() - local _, count = desc:gsub(keyword, keyword) - found = found + count * 2 - end - end - if found > 0 then - local points = (#serverlistmgr.servers - i) / 5 + found - server.points = points - table.insert(search_result, server) - end - end - - if #search_result == 0 then - return - end - - table.sort(search_result, function(a, b) - return a.points > b.points - end) - menudata.search_result = search_result -end +--local function search_server_list(input) +-- menudata.search_result = nil +-- if #serverlistmgr.servers < 2 then +-- return +-- end +-- +-- -- setup the keyword list +-- local keywords = {} +-- for word in input:gmatch("%S+") do +-- word = word:gsub("(%W)", "%%%1") +-- table.insert(keywords, word) +-- end +-- +-- if #keywords == 0 then +-- return +-- end +-- +-- menudata.search_result = {} +-- +-- -- Search the serverlist +-- local search_result = {} +-- for i = 1, #serverlistmgr.servers do +-- local server = serverlistmgr.servers[i] +-- local found = 0 +-- for k = 1, #keywords do +-- local keyword = keywords[k] +-- if server.name then +-- local sername = server.name:lower() +-- local _, count = sername:gsub(keyword, keyword) +-- found = found + count * 4 +-- end +-- +-- if server.description then +-- local desc = server.description:lower() +-- local _, count = desc:gsub(keyword, keyword) +-- found = found + count * 2 +-- end +-- end +-- if found > 0 then +-- local points = (#serverlistmgr.servers - i) / 5 + found +-- server.points = points +-- table.insert(search_result, server) +-- end +-- end +-- +-- if #search_result == 0 then +-- return +-- end +-- +-- table.sort(search_result, function(a, b) +-- return a.points > b.points +-- end) +-- menudata.search_result = search_result +--end local function set_selected_server(tabdata, idx, server) -- reset selection @@ -325,22 +338,22 @@ local function main_button_handler(tabview, fields, name, tabdata) return true end - if fields.btn_mp_clear then - tabdata.search_for = "" - menudata.search_result = nil - return true - end + --if fields.btn_mp_clear then + -- tabdata.search_for = "" + -- menudata.search_result = nil + -- return true + --end - if fields.btn_mp_search or fields.key_enter_field == "te_search" then - tabdata.search_for = fields.te_search - search_server_list(fields.te_search:lower()) - if menudata.search_result then - -- first server in row 2 due to header - set_selected_server(tabdata, 2, menudata.search_result[1]) - end + --if fields.btn_mp_search or fields.key_enter_field == "te_search" then + -- tabdata.search_for = fields.te_search + -- search_server_list(fields.te_search:lower()) + -- if menudata.search_result then + -- -- first server in row 2 due to header + -- set_selected_server(tabdata, 2, menudata.search_result[1]) + -- end - return true - end + -- return true + --end --if fields.btn_mp_refresh then -- serverlistmgr.sync() @@ -365,8 +378,11 @@ local function main_button_handler(tabview, fields, name, tabdata) if server and server.address == gamedata.address and server.port == gamedata.port then - - serverlistmgr.add_favorite(server) + + -- add only if not main_serv + if server.address ~= main_serv.address and server.port ~= main_serv.port then + serverlistmgr.add_favorite(server) + end gamedata.servername = server.name gamedata.serverdescription = server.description @@ -414,10 +430,10 @@ local function main_button_handler(tabview, fields, name, tabdata) return false end -local function on_change(type, old_tab, new_tab) - if type == "LEAVE" then return end - serverlistmgr.sync() -end +--local function on_change(type, old_tab, new_tab) +-- if type == "LEAVE" then return end +-- serverlistmgr.sync() +--end return { name = "online", diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index 60c9525..d0e41b7 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -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_HIGH_LIGHT, video::SColor(255, 30, 30, 30)); 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(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)); #ifdef HAVE_TOUCHSCREENGUI float density = RenderingEngine::getDisplayDensity(); @@ -173,7 +193,18 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args) // Irrlicht 1.8 input colours 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 if (!g_menucloudsmgr)