Index: binaries/data/mods/public/gui/session/messages.js =================================================================== --- binaries/data/mods/public/gui/session/messages.js +++ binaries/data/mods/public/gui/session/messages.js @@ -66,6 +66,8 @@ handleClientsLoadingMessage(msg.guids); }, "rejoined": msg => { + g_Players[g_PlayerAssignments[msg.guid].player].rejoining = false; + updateViewedPlayerDropdown(); addChatMessage({ "type": "rejoined", "guid": msg.guid @@ -761,8 +763,10 @@ { g_Players[playerID].guid = guid; g_Players[playerID].name = g_PlayerAssignments[guid].name; + g_Players[playerID].rejoining = !!g_Players[playerID].offline; g_Players[playerID].offline = false; } + updateViewedPlayerDropdown(); addChatMessage({ "type": "connect", @@ -777,6 +781,7 @@ for (let id in g_Players) if (g_Players[id].guid == guid) g_Players[id].offline = true; + updateViewedPlayerDropdown(); addChatMessage({ "type": "disconnect", Index: binaries/data/mods/public/gui/session/session.js =================================================================== --- binaries/data/mods/public/gui/session/session.js +++ binaries/data/mods/public/gui/session/session.js @@ -79,6 +79,17 @@ var g_PausingClients = []; /** + * Player selection in observer dropdown style. + */ +var g_DropdownPlayerStyle = { + "defeated": { "color": "128 128 128" }, + "offline": { "color": "red" }, + "rejoining": { "color": "orange" }, + "offlinedefeated": { "color": "128 0 0" }, + "online": { "color": "255 255 255" } +}; + +/** * The playerID selected in the change perspective tool. */ var g_ViewedPlayer = Engine.GetPlayerID(); @@ -439,7 +450,12 @@ let viewPlayer = Engine.GetGUIObjectByName("viewPlayer"); viewPlayer.list_data = [-1].concat(g_Players.map((player, i) => i)); viewPlayer.list = [translate("Observer")].concat(g_Players.map( - (player, i) => colorizePlayernameHelper("■", i) + " " + player.name + (player, i) => colorizePlayernameHelper("■", i) + " " + + setStringTags(player.name, g_DropdownPlayerStyle[g_Players[i].state == "defeated" && + !!g_Players[i].offline ? "offlinedefeated" : + !!g_Players[i].rejoining ? "rejoining" : + g_Players[i].state == "defeated" ? + "defeated" : !!g_Players[i].offline ? "offline" : "online"]) )); } @@ -540,6 +556,7 @@ updatePlayerData(); updateChatAddressees(); updateGameSpeedControl(); + updateViewedPlayerDropdown(); if (players.indexOf(g_ViewedPlayer) == -1) return;