Differential D2577 Diff 11115 binaries/data/mods/public/gui/gamesetup/Pages/AIConfigPage/AIConfigPage.js
Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/gui/gamesetup/Pages/AIConfigPage/AIConfigPage.js
- This file was moved from binaries/data/mods/public/gui/aiconfig/aiconfig.js.
/** | /** | ||||
* Is this user in control of game settings (i.e. is a network server, or offline player). | * This class contains all controls modifying the AI settings of a player. | ||||
*/ | */ | ||||
const g_IsController = !Engine.HasNetClient() || Engine.HasNetServer(); | class AIGameSettingControls | ||||
{ | |||||
} | |||||
SetupWindowPages.AIConfigPage = class | |||||
{ | |||||
constructor(setupWindow) | |||||
{ | |||||
this.gameSettingsControl = setupWindow.controls.gameSettingsControl; | |||||
var g_PlayerSlot; | this.playerIndex = undefined; | ||||
this.row = 0; | |||||
this.openPageHandlers = new Set(); | |||||
this.AIGameSettingControls = {}; | |||||
var g_AIDescriptions = [{ | for (let name of this.AIGameSettingControlOrder) | ||||
"id": "", | this.AIGameSettingControls[name] = | ||||
"data": { | new AIGameSettingControls[name](this, undefined, undefined, setupWindow); | ||||
"name": translateWithContext("ai", "None"), | |||||
"description": translate("AI will be disabled for this player.") | this.aiDescription = new AIDescription(this, setupWindow); | ||||
} | |||||
}].concat(g_Settings.AIDescriptions); | this.aiConfigPage = Engine.GetGUIObjectByName("aiConfigPage"); | ||||
Engine.GetGUIObjectByName("aiConfigOkButton").onPress = this.closePage.bind(this); | |||||
var g_AIControls = { | this.gameSettingsControl.registerGameAttributesBatchChangeHandler( | ||||
"aiSelection": { | this.onGameAttributesBatchChange.bind(this)); | ||||
"labels": g_AIDescriptions.map(ai => ai.data.name), | |||||
"selected": settings => g_AIDescriptions.findIndex(ai => ai.id == settings.id) | |||||
}, | |||||
"aiDifficulty": { | |||||
"labels": prepareForDropdown(g_Settings.AIDifficulties).Title, | |||||
"selected": settings => settings.difficulty | |||||
}, | |||||
"aiBehavior": { | |||||
"labels": prepareForDropdown(g_Settings.AIBehaviors).Title, | |||||
"selected": settings => g_Settings.AIBehaviors.findIndex(b => b.Name == settings.behavior) | |||||
} | } | ||||
}; | |||||
function init(settings) | registerOpenPageHandler(handler) | ||||
{ | { | ||||
// Remember the player ID that we change the AI settings for | this.openPageHandlers.add(handler); | ||||
g_PlayerSlot = settings.playerSlot; | } | ||||
let enabled = g_IsController && !settings.fixed; | getRow() | ||||
{ | |||||
return this.row++; | |||||
} | |||||
for (let name in g_AIControls) | openPage(playerIndex) | ||||
{ | { | ||||
let control = Engine.GetGUIObjectByName(name); | this.playerIndex = playerIndex; | ||||
control.list = g_AIControls[name].labels; | |||||
control.selected = g_AIControls[name].selected(settings); | |||||
control.hidden = !enabled; | |||||
let label = Engine.GetGUIObjectByName(name + "Text"); | for (let handler of this.openPageHandlers) | ||||
label.caption = control.list[control.selected]; | handler(playerIndex); | ||||
label.hidden = enabled; | |||||
} | |||||
checkBehavior(); | this.aiConfigPage.hidden = false; | ||||
} | } | ||||
function selectAI(idx) | onGameAttributesBatchChange() | ||||
{ | { | ||||
Engine.GetGUIObjectByName("aiDescription").caption = g_AIDescriptions[idx].data.description; | let pData = this.gameSettingsControl.getPlayerData(g_GameAttributes, this.playerIndex); | ||||
if (!pData) | |||||
this.closePage(); | |||||
} | } | ||||
/** Behavior choice does not apply for Sandbox level */ | closePage() | ||||
function checkBehavior() | |||||
{ | { | ||||
if (g_Settings.AIDifficulties[Engine.GetGUIObjectByName("aiDifficulty").selected].Name != "sandbox") | this.aiConfigPage.hidden = true; | ||||
{ | |||||
Engine.GetGUIObjectByName("aiBehavior").enabled = true; | |||||
return; | |||||
} | } | ||||
let aiBehavior = Engine.GetGUIObjectByName("aiBehavior"); | |||||
aiBehavior.enabled = false; | |||||
aiBehavior.selected = g_Settings.AIBehaviors.findIndex(b => b.Name == "balanced"); | |||||
} | } | ||||
function returnAI(save = true) | SetupWindowPages.AIConfigPage.prototype.AIGameSettingControlOrder = [ | ||||
{ | "AISelection", | ||||
let idx = Engine.GetGUIObjectByName("aiSelection").selected; | "AIDifficulty", | ||||
Engine.PopGuiPage({ | "AIBehavior" | ||||
"save": save, | ]; | ||||
"id": g_AIDescriptions[idx].id, | |||||
"name": g_AIDescriptions[idx].data.name, | |||||
"difficulty": Engine.GetGUIObjectByName("aiDifficulty").selected, | |||||
"behavior": g_Settings.AIBehaviors[Engine.GetGUIObjectByName("aiBehavior").selected].Name, | |||||
"playerSlot": g_PlayerSlot | |||||
}); | |||||
} |
Wildfire Games · Phabricator