Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/gui/session/session.js
Show First 20 Lines • Show All 122 Lines • ▼ Show 20 Lines | |||||
var g_ReplaySelectionData; | var g_ReplaySelectionData; | ||||
/** | /** | ||||
* Remembers which clients are assigned to which player slots. | * Remembers which clients are assigned to which player slots. | ||||
* The keys are guids or "local" in Singleplayer. | * The keys are guids or "local" in Singleplayer. | ||||
*/ | */ | ||||
var g_PlayerAssignments; | var g_PlayerAssignments; | ||||
/** | var g_DeveloperOverlay; | ||||
* Cache dev-mode settings that are frequently or widely used. | |||||
*/ | |||||
var g_DevSettings = { | |||||
"changePerspective": false, | |||||
"controlAll": false | |||||
}; | |||||
/** | /** | ||||
* Whether the entire UI should be hidden (useful for promotional screenshots). | * Whether the entire UI should be hidden (useful for promotional screenshots). | ||||
* Can be toggled with a hotkey. | * Can be toggled with a hotkey. | ||||
*/ | */ | ||||
var g_ShowGUI = true; | var g_ShowGUI = true; | ||||
/** | /** | ||||
▲ Show 20 Lines • Show All 125 Lines • ▼ Show 20 Lines | function init(initData, hotloadData) | ||||
{ | { | ||||
g_ReplaySelectionData = initData.replaySelectionData; | g_ReplaySelectionData = initData.replaySelectionData; | ||||
g_HasRejoined = initData.isRejoining; | g_HasRejoined = initData.isRejoining; | ||||
if (initData.savedGUIData) | if (initData.savedGUIData) | ||||
restoreSavedGameData(initData.savedGUIData); | restoreSavedGameData(initData.savedGUIData); | ||||
} | } | ||||
g_DeveloperOverlay = new DeveloperOverlay(); | |||||
elexis: -\n
good | |||||
Done Inline ActionsWhy? Isn't it logically separated? vladislavbelov: Why? Isn't it logically separated? | |||||
Done Inline Actionsall of these calls are logically separated, they share that they are 1 line init calls. ideally those would all be oneliners elexis: all of these calls are logically separated, they share that they are 1 line init calls. ideally… | |||||
LoadModificationTemplates(); | LoadModificationTemplates(); | ||||
updatePlayerData(); | updatePlayerData(); | ||||
initializeMusic(); // before changing the perspective | initializeMusic(); // before changing the perspective | ||||
initGUIObjects(); | initGUIObjects(); | ||||
if (hotloadData) | if (hotloadData) | ||||
g_Selection.selected = hotloadData.selection; | g_Selection.selected = hotloadData.selection; | ||||
▲ Show 20 Lines • Show All 228 Lines • ▼ Show 20 Lines | |||||
{ | { | ||||
let viewPlayer = Engine.GetGUIObjectByName("viewPlayer"); | let viewPlayer = Engine.GetGUIObjectByName("viewPlayer"); | ||||
viewPlayer.list_data = [-1].concat(g_Players.map((player, i) => i)); | viewPlayer.list_data = [-1].concat(g_Players.map((player, i) => i)); | ||||
viewPlayer.list = [translate("Observer")].concat(g_Players.map( | viewPlayer.list = [translate("Observer")].concat(g_Players.map( | ||||
(player, i) => colorizePlayernameHelper("■", i) + " " + player.name | (player, i) => colorizePlayernameHelper("■", i) + " " + player.name | ||||
)); | )); | ||||
} | } | ||||
function toggleChangePerspective(enabled) | |||||
{ | |||||
g_DevSettings.changePerspective = enabled; | |||||
selectViewPlayer(g_ViewedPlayer); | |||||
} | |||||
/** | /** | ||||
* Change perspective tool. | * Change perspective tool. | ||||
* Shown to observers or when enabling the developers option. | * Shown to observers or when enabling the developers option. | ||||
*/ | */ | ||||
function selectViewPlayer(playerID) | function selectViewPlayer(playerID) | ||||
{ | { | ||||
if (playerID < -1 || playerID > g_Players.length - 1) | if (playerID < -1 || playerID > g_Players.length - 1) | ||||
return; | return; | ||||
if (g_ShowAllStatusBars) | if (g_ShowAllStatusBars) | ||||
recalculateStatusBarDisplay(true); | recalculateStatusBarDisplay(true); | ||||
g_IsObserver = isPlayerObserver(Engine.GetPlayerID()); | g_IsObserver = isPlayerObserver(Engine.GetPlayerID()); | ||||
if (g_IsObserver || g_DevSettings.changePerspective) | if (g_IsObserver || g_DeveloperOverlay.isChangePerspective()) | ||||
{ | { | ||||
if (g_ViewedPlayer != playerID) | if (g_ViewedPlayer != playerID) | ||||
clearSelection(); | clearSelection(); | ||||
g_ViewedPlayer = playerID; | g_ViewedPlayer = playerID; | ||||
} | } | ||||
if (g_DevSettings.changePerspective) | if (g_DeveloperOverlay.isChangePerspective()) | ||||
{ | { | ||||
Engine.SetPlayerID(g_ViewedPlayer); | Engine.SetPlayerID(g_ViewedPlayer); | ||||
g_IsObserver = isPlayerObserver(g_ViewedPlayer); | g_IsObserver = isPlayerObserver(g_ViewedPlayer); | ||||
} | } | ||||
Engine.SetViewedPlayer(g_ViewedPlayer); | Engine.SetViewedPlayer(g_ViewedPlayer); | ||||
updateDisplayedPlayerColors(); | updateDisplayedPlayerColors(); | ||||
updateTopPanel(); | updateTopPanel(); | ||||
▲ Show 20 Lines • Show All 98 Lines • ▼ Show 20 Lines | Engine.GetGUIObjectByName("civIconOverlay").tooltip = | ||||
"hotkey_structree": colorizeHotkey("%(hotkey)s", "structree") | "hotkey_structree": colorizeHotkey("%(hotkey)s", "structree") | ||||
}); | }); | ||||
} | } | ||||
// Following gaia can be interesting on scripted maps | // Following gaia can be interesting on scripted maps | ||||
Engine.GetGUIObjectByName("optionFollowPlayer").hidden = !g_IsObserver || g_ViewedPlayer == -1; | Engine.GetGUIObjectByName("optionFollowPlayer").hidden = !g_IsObserver || g_ViewedPlayer == -1; | ||||
let viewPlayer = Engine.GetGUIObjectByName("viewPlayer"); | let viewPlayer = Engine.GetGUIObjectByName("viewPlayer"); | ||||
viewPlayer.hidden = !g_IsObserver && !g_DevSettings.changePerspective; | viewPlayer.hidden = !g_IsObserver && !g_DeveloperOverlay.isChangePerspective(); | ||||
let followPlayerLabel = Engine.GetGUIObjectByName("followPlayerLabel"); | let followPlayerLabel = Engine.GetGUIObjectByName("followPlayerLabel"); | ||||
followPlayerLabel.hidden = Engine.GetTextWidth(followPlayerLabel.font, followPlayerLabel.caption + " ") + | followPlayerLabel.hidden = Engine.GetTextWidth(followPlayerLabel.font, followPlayerLabel.caption + " ") + | ||||
followPlayerLabel.getComputedSize().left > viewPlayer.getComputedSize().left; | followPlayerLabel.getComputedSize().left > viewPlayer.getComputedSize().left; | ||||
let resCodes = g_ResourceData.GetCodes(); | let resCodes = g_ResourceData.GetCodes(); | ||||
let r = 0; | let r = 0; | ||||
for (let res of resCodes) | for (let res of resCodes) | ||||
▲ Show 20 Lines • Show All 260 Lines • ▼ Show 20 Lines | function updateGUIObjects() | ||||
if (g_ShowGuarding || g_ShowGuarded) | if (g_ShowGuarding || g_ShowGuarded) | ||||
updateAdditionalHighlight(); | updateAdditionalHighlight(); | ||||
updatePanelEntities(); | updatePanelEntities(); | ||||
displayPanelEntities(); | displayPanelEntities(); | ||||
updateGroups(); | updateGroups(); | ||||
updateDebug(); | |||||
updatePlayerDisplay(); | updatePlayerDisplay(); | ||||
updateResearchDisplay(); | updateResearchDisplay(); | ||||
updateSelectionDetails(); | updateSelectionDetails(); | ||||
updateBuildingPlacementPreview(); | updateBuildingPlacementPreview(); | ||||
updateTimeNotifications(); | updateTimeNotifications(); | ||||
updateIdleWorkerButton(); | updateIdleWorkerButton(); | ||||
if (g_IsTradeOpen) | if (g_IsTradeOpen) | ||||
{ | { | ||||
updateTraderTexts(); | updateTraderTexts(); | ||||
updateBarterButtons(); | updateBarterButtons(); | ||||
} | } | ||||
if (g_ViewedPlayer > 0) | if (g_ViewedPlayer > 0) | ||||
{ | { | ||||
let playerState = GetSimState().players[g_ViewedPlayer]; | let playerState = GetSimState().players[g_ViewedPlayer]; | ||||
g_DevSettings.controlAll = playerState && playerState.controlsAll; | g_DeveloperOverlay.setControlAll(playerState && playerState.controlsAll); | ||||
Engine.GetGUIObjectByName("devControlAll").checked = g_DevSettings.controlAll; | |||||
} | } | ||||
if (!g_IsObserver) | if (!g_IsObserver) | ||||
{ | { | ||||
// Update music state on basis of battle state. | // Update music state on basis of battle state. | ||||
let battleState = Engine.GuiInterfaceCall("GetBattleState", g_ViewedPlayer); | let battleState = Engine.GuiInterfaceCall("GetBattleState", g_ViewedPlayer); | ||||
if (battleState) | if (battleState) | ||||
global.music.setState(global.music.states[battleState]); | global.music.setState(global.music.states[battleState]); | ||||
} | } | ||||
updateViewedPlayerDropdown(); | updateViewedPlayerDropdown(); | ||||
updateDiplomacy(); | updateDiplomacy(); | ||||
g_DeveloperOverlay.update(); | |||||
} | } | ||||
Done Inline Actions-\n elexis: -\n | |||||
Done Inline ActionsAnd here? vladislavbelov: And here? | |||||
Done Inline Actionsjust because one uses OOP and the other procedural doesn't mean that that these calls are less related than before I don't want to lose much time arguing on \n though :P elexis: just because one uses OOP and the other procedural doesn't mean that that these calls are less… | |||||
function onReplayFinished() | function onReplayFinished() | ||||
{ | { | ||||
closeOpenDialogs(); | closeOpenDialogs(); | ||||
pauseGame(); | pauseGame(); | ||||
messageBox(400, 200, | messageBox(400, 200, | ||||
translateWithContext("replayFinished", "The replay has finished. Do you want to quit?"), | translateWithContext("replayFinished", "The replay has finished. Do you want to quit?"), | ||||
▲ Show 20 Lines • Show All 172 Lines • ▼ Show 20 Lines | if (g_Groups.groups[i].getTotalCount() > 0) | ||||
Engine.GetGUIObjectByName("unitGroupIcon[" + i + "]").sprite = | Engine.GetGUIObjectByName("unitGroupIcon[" + i + "]").sprite = | ||||
icon ? ("stretched:session/portraits/" + icon) : "groupsIcon"; | icon ? ("stretched:session/portraits/" + icon) : "groupsIcon"; | ||||
} | } | ||||
setPanelObjectPosition(button, i, 1); | setPanelObjectPosition(button, i, 1); | ||||
} | } | ||||
} | } | ||||
function updateDebug() | |||||
{ | |||||
let debug = Engine.GetGUIObjectByName("debugEntityState"); | |||||
if (!Engine.GetGUIObjectByName("devDisplayState").checked) | |||||
{ | |||||
debug.hidden = true; | |||||
return; | |||||
} | |||||
debug.hidden = false; | |||||
let conciseSimState = clone(GetSimState()); | |||||
conciseSimState.players = "<<<omitted>>>"; | |||||
let text = "simulation: " + uneval(conciseSimState); | |||||
let selection = g_Selection.toList(); | |||||
if (selection.length) | |||||
{ | |||||
let entState = GetEntityState(selection[0]); | |||||
if (entState) | |||||
{ | |||||
let template = GetTemplateData(entState.template); | |||||
text += "\n\nentity: {\n"; | |||||
for (let k in entState) | |||||
text += " " + k + ":" + uneval(entState[k]) + "\n"; | |||||
text += "}\n\ntemplate: " + uneval(template); | |||||
} | |||||
} | |||||
debug.caption = text.replace(/\[/g, "\\["); | |||||
} | |||||
/** | /** | ||||
Done Inline ActionsIsn't this developer overlay code as well? There may be more, I didn't look. elexis: Isn't this developer overlay code as well? There may be more, I didn't look. | |||||
Done Inline ActionsI think yes, it's a debug overlay. I can move it too. vladislavbelov: I think yes, it's a debug overlay. I can move it too. | |||||
Done Inline ActionsI don't know, after having packaged everything into containers, it usually becomes more apparent. If we're not sure, can postpone it. (Or one can investigate a bit more, I don't mind.) elexis: I don't know, after having packaged everything into containers, it usually becomes more… | |||||
Done Inline ActionsIt's not bad to do this in separate patches I think. vladislavbelov: It's not bad to do this in separate patches I think. | |||||
* Create ally player stat tooltip. | * Create ally player stat tooltip. | ||||
* @param {string} resource - Resource type, on which values will be sorted. | * @param {string} resource - Resource type, on which values will be sorted. | ||||
* @param {object} playerStates - Playerstates from players whos stats are viewed in the tooltip. | * @param {object} playerStates - Playerstates from players whos stats are viewed in the tooltip. | ||||
* @param {number} sort - 0 no order, -1 descending, 1 ascending order. | * @param {number} sort - 0 no order, -1 descending, 1 ascending order. | ||||
* @returns {string} Tooltip string. | * @returns {string} Tooltip string. | ||||
*/ | */ | ||||
function getAllyStatTooltip(resource, playerStates, sort) | function getAllyStatTooltip(resource, playerStates, sort) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 253 Lines • ▼ Show 20 Lines | function updateAdditionalHighlight() | ||||
g_AdditionalHighlight = entsAdd; | g_AdditionalHighlight = entsAdd; | ||||
} | } | ||||
function playAmbient() | function playAmbient() | ||||
{ | { | ||||
Engine.PlayAmbientSound(pickRandom(g_Ambient), true); | Engine.PlayAmbientSound(pickRandom(g_Ambient), true); | ||||
} | } | ||||
function showTimeWarpMessageBox() | |||||
{ | |||||
messageBox( | |||||
500, 250, | |||||
translate("Note: time warp mode is a developer option, and not intended for use over long periods of time. Using it incorrectly may cause the game to run out of memory or crash."), | |||||
translate("Time warp mode") | |||||
); | |||||
} | |||||
/** | /** | ||||
* Adds the ingame time and ceasefire counter to the global FPS and | * Adds the ingame time and ceasefire counter to the global FPS and | ||||
* realtime counters shown in the top right corner. | * realtime counters shown in the top right corner. | ||||
*/ | */ | ||||
function appendSessionCounters(counters) | function appendSessionCounters(counters) | ||||
{ | { | ||||
let simState = GetSimState(); | let simState = GetSimState(); | ||||
▲ Show 20 Lines • Show All 274 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator
-\n
good