Changeset View
Changeset View
Standalone View
Standalone View
ps/trunk/binaries/data/mods/public/gui/session/menu.js
Show First 20 Lines • Show All 308 Lines • ▼ Show 20 Lines | |||||
{ | { | ||||
closeOpenDialogs(); | closeOpenDialogs(); | ||||
if (g_ViewedPlayer < 1) | if (g_ViewedPlayer < 1) | ||||
return; | return; | ||||
g_IsDiplomacyOpen = true; | g_IsDiplomacyOpen = true; | ||||
updateDiplomacyPanel(true); | |||||
} | |||||
function updateDiplomacyPanel(opening = false) | |||||
{ | |||||
if (g_ViewedPlayer < 1 || !g_IsDiplomacyOpen) | |||||
return; | |||||
let isCeasefireActive = GetSimState().ceasefireActive; | let isCeasefireActive = GetSimState().ceasefireActive; | ||||
let hasSharedLos = GetSimState().players[g_ViewedPlayer].hasSharedLos; | |||||
// Get offset for one line | // Get offset for one line | ||||
let onesize = Engine.GetGUIObjectByName("diplomacyPlayer[0]").size; | let onesize = Engine.GetGUIObjectByName("diplomacyPlayer[0]").size; | ||||
let rowsize = onesize.bottom - onesize.top; | let rowsize = onesize.bottom - onesize.top; | ||||
// We don't include gaia | // We don't include gaia | ||||
for (let i = 1; i < g_Players.length; ++i) | for (let i = 1; i < g_Players.length; ++i) | ||||
{ | { | ||||
let myself = i == g_ViewedPlayer; | let myself = i == g_ViewedPlayer; | ||||
let playerInactive = isPlayerObserver(g_ViewedPlayer) || isPlayerObserver(i); | let playerInactive = isPlayerObserver(g_ViewedPlayer) || isPlayerObserver(i); | ||||
let hasAllies = g_Players.filter(player => player.isMutualAlly[g_ViewedPlayer]).length > 1; | let hasAllies = g_Players.filter(player => player.isMutualAlly[g_ViewedPlayer]).length > 1; | ||||
diplomacySetupTexts(i, rowsize); | diplomacySetupTexts(i, rowsize); | ||||
diplomacyFormatStanceButtons(i, myself || playerInactive || isCeasefireActive || g_Players[g_ViewedPlayer].teamsLocked); | diplomacyFormatStanceButtons(i, myself || playerInactive || isCeasefireActive || g_Players[g_ViewedPlayer].teamsLocked); | ||||
// Tribute buttons do not need to be updated onTick, and should not because of massTributing | |||||
if (opening) | |||||
diplomacyFormatTributeButtons(i, myself || playerInactive); | diplomacyFormatTributeButtons(i, myself || playerInactive); | ||||
diplomacyFormatAttackRequestButton(i, myself || playerInactive || isCeasefireActive || !hasAllies || !g_Players[i].isEnemy[g_ViewedPlayer]); | diplomacyFormatAttackRequestButton(i, myself || playerInactive || isCeasefireActive || !hasAllies || !g_Players[i].isEnemy[g_ViewedPlayer]); | ||||
diplomacyFormatSpyRequestButton(i, myself || playerInactive || g_Players[i].isMutualAlly[g_ViewedPlayer] && hasSharedLos); | |||||
} | } | ||||
Engine.GetGUIObjectByName("diplomacyDialogPanel").hidden = false; | Engine.GetGUIObjectByName("diplomacyDialogPanel").hidden = false; | ||||
} | } | ||||
function diplomacySetupTexts(i, rowsize) | function diplomacySetupTexts(i, rowsize) | ||||
{ | { | ||||
// Apply offset | // Apply offset | ||||
let row = Engine.GetGUIObjectByName("diplomacyPlayer["+(i-1)+"]"); | let row = Engine.GetGUIObjectByName("diplomacyPlayer["+(i-1)+"]"); | ||||
▲ Show 20 Lines • Show All 102 Lines • ▼ Show 20 Lines | |||||
{ | { | ||||
let button = Engine.GetGUIObjectByName("diplomacyAttackRequest["+(i-1)+"]"); | let button = Engine.GetGUIObjectByName("diplomacyAttackRequest["+(i-1)+"]"); | ||||
button.hidden = hidden; | button.hidden = hidden; | ||||
if (hidden) | if (hidden) | ||||
return; | return; | ||||
button.enabled = controlsPlayer(g_ViewedPlayer); | button.enabled = controlsPlayer(g_ViewedPlayer); | ||||
button.tooltip = translate("Request your allies to attack this enemy"); | button.tooltip = translate("Request your allies to attack this enemy"); | ||||
button.onpress = (function(i) { return function() { | button.onPress = (function(i) { return function() { | ||||
Engine.PostNetworkCommand({ "type": "attack-request", "source": g_ViewedPlayer, "target": i }); | Engine.PostNetworkCommand({ "type": "attack-request", "source": g_ViewedPlayer, "player": i }); | ||||
}; })(i); | |||||
} | |||||
function diplomacyFormatSpyRequestButton(i, hidden) | |||||
{ | |||||
let button = Engine.GetGUIObjectByName("diplomacySpyRequest["+(i-1)+"]"); | |||||
let template = GetTemplateData("special/spy"); | |||||
button.hidden = hidden || !template || GetSimState().players[g_ViewedPlayer].disabledTemplates["special/spy"]; | |||||
if (button.hidden) | |||||
return; | |||||
button.enabled = controlsPlayer(g_ViewedPlayer); | |||||
let modifier = ""; | |||||
let tooltips = [translate("Bribe a random unit from this player and share its vision during a limited period.")]; | |||||
if (!button.enabled) | |||||
modifier = "color:0 0 0 127:grayscale:"; | |||||
else | |||||
{ | |||||
if (template.requiredTechnology) | |||||
{ | |||||
let technologyEnabled = Engine.GuiInterfaceCall("IsTechnologyResearched", { | |||||
"tech": template.requiredTechnology, | |||||
"player": g_ViewedPlayer | |||||
}); | |||||
if (!technologyEnabled) | |||||
{ | |||||
modifier = "color:0 0 0 127:grayscale:" | |||||
button.enabled = false; | |||||
tooltips.push(getRequiredTechnologyTooltip(technologyEnabled, template.requiredTechnology, GetSimState().players[g_ViewedPlayer].civ)); | |||||
} | |||||
} | |||||
if (template.cost) | |||||
{ | |||||
let neededResources = Engine.GuiInterfaceCall("GetNeededResources", { | |||||
"cost": template.cost, | |||||
"player": g_ViewedPlayer | |||||
}); | |||||
if (neededResources) | |||||
{ | |||||
if (button.enabled) | |||||
modifier = resourcesToAlphaMask(neededResources) +":"; | |||||
button.enabled = false; | |||||
tooltips.push(getNeededResourcesTooltip(neededResources)); | |||||
} | |||||
} | |||||
} | |||||
let icon = Engine.GetGUIObjectByName("diplomacySpyRequestImage["+(i-1)+"]"); | |||||
icon.sprite = modifier + "stretched:session/icons/economics.png"; | |||||
button.tooltip = tooltips.filter(tip => tip).join("\n"); | |||||
button.onPress = (function(i) { return function() { | |||||
Engine.PostNetworkCommand({ "type": "spy-request", "source": g_ViewedPlayer, "player": i }); | |||||
closeDiplomacy(); | |||||
}; })(i); | }; })(i); | ||||
} | } | ||||
function closeDiplomacy() | function closeDiplomacy() | ||||
{ | { | ||||
g_IsDiplomacyOpen = false; | g_IsDiplomacyOpen = false; | ||||
Engine.GetGUIObjectByName("diplomacyDialogPanel").hidden = true; | Engine.GetGUIObjectByName("diplomacyDialogPanel").hidden = true; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 73 Lines • ▼ Show 20 Lines | button[resCode] = { | ||||
"up": buttonUp, | "up": buttonUp, | ||||
"dn": buttonDn, | "dn": buttonDn, | ||||
"label": Engine.GetGUIObjectByName("tradeResourceText["+i+"]"), | "label": Engine.GetGUIObjectByName("tradeResourceText["+i+"]"), | ||||
"sel": Engine.GetGUIObjectByName("tradeResourceSelection["+i+"]") | "sel": Engine.GetGUIObjectByName("tradeResourceSelection["+i+"]") | ||||
}; | }; | ||||
let buttonResource = Engine.GetGUIObjectByName("tradeResourceButton["+i+"]"); | let buttonResource = Engine.GetGUIObjectByName("tradeResourceButton["+i+"]"); | ||||
buttonResource.enabled = controlsPlayer(g_ViewedPlayer); | buttonResource.enabled = controlsPlayer(g_ViewedPlayer); | ||||
buttonResource.onpress = (function(resource){ | buttonResource.onPress = (function(resource){ | ||||
return function() { | return function() { | ||||
if (Engine.HotkeyIsPressed("session.fulltradeswap")) | if (Engine.HotkeyIsPressed("session.fulltradeswap")) | ||||
{ | { | ||||
for (let res of resCodes) | for (let res of resCodes) | ||||
proba[res] = 0; | proba[res] = 0; | ||||
proba[resource] = 100; | proba[resource] = 100; | ||||
Engine.PostNetworkCommand({"type": "set-trading-goods", "tradingGoods": proba}); | Engine.PostNetworkCommand({"type": "set-trading-goods", "tradingGoods": proba}); | ||||
} | } | ||||
selec = resource; | selec = resource; | ||||
updateButtons(); | updateButtons(); | ||||
}; | }; | ||||
})(resCode); | })(resCode); | ||||
buttonUp.enabled = controlsPlayer(g_ViewedPlayer); | buttonUp.enabled = controlsPlayer(g_ViewedPlayer); | ||||
buttonUp.onpress = (function(resource){ | buttonUp.onPress = (function(resource){ | ||||
return function() { | return function() { | ||||
proba[resource] += Math.min(STEP, proba[selec]); | proba[resource] += Math.min(STEP, proba[selec]); | ||||
proba[selec] -= Math.min(STEP, proba[selec]); | proba[selec] -= Math.min(STEP, proba[selec]); | ||||
Engine.PostNetworkCommand({"type": "set-trading-goods", "tradingGoods": proba}); | Engine.PostNetworkCommand({"type": "set-trading-goods", "tradingGoods": proba}); | ||||
updateButtons(); | updateButtons(); | ||||
}; | }; | ||||
})(resCode); | })(resCode); | ||||
buttonDn.enabled = controlsPlayer(g_ViewedPlayer); | buttonDn.enabled = controlsPlayer(g_ViewedPlayer); | ||||
buttonDn.onpress = (function(resource){ | buttonDn.onPress = (function(resource){ | ||||
return function() { | return function() { | ||||
proba[selec] += Math.min(STEP, proba[resource]); | proba[selec] += Math.min(STEP, proba[resource]); | ||||
proba[resource] -= Math.min(STEP, proba[resource]); | proba[resource] -= Math.min(STEP, proba[resource]); | ||||
Engine.PostNetworkCommand({"type": "set-trading-goods", "tradingGoods": proba}); | Engine.PostNetworkCommand({"type": "set-trading-goods", "tradingGoods": proba}); | ||||
updateButtons(); | updateButtons(); | ||||
}; | }; | ||||
})(resCode); | })(resCode); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 358 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator