Changeset View
Changeset View
Standalone View
Standalone View
binaries/data/mods/public/gui/session/selection_panels.js
Show First 20 Lines • Show All 1,014 Lines • ▼ Show 20 Lines | "setupButton": function(data) | ||||
let index = data.i + getNumberOfRightPanelButtons(); | let index = data.i + getNumberOfRightPanelButtons(); | ||||
setPanelObjectPosition(data.button, index, data.rowLength); | setPanelObjectPosition(data.button, index, data.rowLength); | ||||
return true; | return true; | ||||
} | } | ||||
}; | }; | ||||
g_SelectionPanels.GroupTraining = { | |||||
"getMaxNumberOfItems": function() | |||||
{ | |||||
return 24 - getNumberOfRightPanelButtons(); | |||||
}, | |||||
"getItems": function() | |||||
{ | |||||
return getAllTrainableGroupsFromSelection(); | |||||
}, | |||||
"setupButton": function(data) | |||||
{ | |||||
let template = GetGroupTemplateData(data.item); | |||||
if (!template) | |||||
return false; | |||||
let technologyEnabled = true; | |||||
for (let entry in template.Entries) | |||||
{ | |||||
technologyEnabled = Engine.GuiInterfaceCall("IsTechnologyResearched", { | |||||
"tech": template.Entries[entry].templateData.requiredTechnology, | |||||
"player": data.player | |||||
}); | |||||
if (!technologyEnabled) | |||||
break; | |||||
} | |||||
let unitIds = data.unitEntStates.map(status => status.id); | |||||
let trainNum = 0; | |||||
let tooltips = []; | |||||
let maxNeededResources; | |||||
let entriesToRecruit = Object.keys(template.Entries); | |||||
if (template.MutuallyExclusive && entriesToRecruit.length > 1) | |||||
{ | |||||
let weightedListOfEntries = []; | |||||
let maxTrainNum = 0; | |||||
for (let entry in template.Entries) | |||||
{ | |||||
let entTemplate = template.Entries[entry].data.Template; | |||||
let [buildingsCountToTrainFullBatch, fullBatchSize, remainderBatch] = | |||||
getTrainingStatus(unitIds, entTemplate, data.playerState); | |||||
trainNum = buildingsCountToTrainFullBatch * fullBatchSize + remainderBatch; | |||||
maxTrainNum = Math.max(+(template.Entries[entry].data.Amount || 1) * trainNum, maxTrainNum); | |||||
let neededResources; | |||||
if (template.cost) | |||||
neededResources = Engine.GuiInterfaceCall("GetNeededResources", { | |||||
"cost": multiplyEntityCosts(template, trainNum), | |||||
"player": data.player | |||||
}); | |||||
maxNeededResources = neededResources; | |||||
warn("MNR: " + uneval(maxNeededResources)); // Needs to be split to check all resources seperately. | |||||
warn("MTN: " + uneval(maxTrainNum)); | |||||
let limits = getEntityLimitAndCount(data.playerState, entTemplate); | |||||
tooltips.push(formatLimitString(limits.entLimit, limits.entCount, limits.entLimitChangers)); | |||||
let chance = +(template.Entries[entry].data.Chance || 1); | |||||
for (let i = 0; i < chance; i++) | |||||
weightedListOfEntries.push(entry); | |||||
} | |||||
entriesToRecruit = pickRandom(weightedListOfEntries); | |||||
} | |||||
data.button.onPress = function() { | |||||
if (!maxNeededResources) | |||||
addTrainingToQueue(unitIds, template.Entries[entriesToRecruit].data.Template, data.playerState); | |||||
}; | |||||
// Not yet supported. | |||||
// data.button.onPressRight = function() { | |||||
// showTemplateDetails(data.item); | |||||
// }; | |||||
data.countDisplay.caption = trainNum > 1 ? trainNum : ""; | |||||
// Not yet supported | |||||
tooltips = [ | |||||
"[font=\"sans-bold-16\"]" + | |||||
colorizeHotkey("%(hotkey)s", "session.queueunit." + (data.i + 1)) + | |||||
"[/font]" + " " + template.Name //+ getEntityNamesFormatted(template), | |||||
// getVisibleEntityClassesFormatted(template), | |||||
// getAurasTooltip(template), | |||||
// getEntityTooltip(template), | |||||
// getEntityCostTooltip(template, unitIds[0], buildingsCountToTrainFullBatch, fullBatchSize, remainderBatch) | |||||
]; | |||||
// if (Engine.ConfigDB_GetValue("user", "showdetailedtooltips") === "true") | |||||
// tooltips = tooltips.concat([ | |||||
// getHealthTooltip, | |||||
// getAttackTooltip, | |||||
// getSplashDamageTooltip, | |||||
// getHealerTooltip, | |||||
// getArmorTooltip, | |||||
// getGarrisonTooltip, | |||||
// getProjectilesTooltip, | |||||
// getSpeedTooltip | |||||
// ].map(func => func(template))); | |||||
// tooltips.push(showTemplateViewerOnRightClickTooltip()); | |||||
// tooltips.push( | |||||
// formatBatchTrainingString(buildingsCountToTrainFullBatch, fullBatchSize, remainderBatch), | |||||
// getRequiredTechnologyTooltip(technologyEnabled, template.requiredTechnology, GetSimState().players[data.player].civ), | |||||
// getNeededResourcesTooltip(neededResources)); | |||||
data.button.tooltip = tooltips.filter(tip => tip).join("\n"); | |||||
let modifier = ""; | |||||
// if (!technologyEnabled || limits.canBeAddedCount == 0) | |||||
// { | |||||
// data.button.enabled = false; | |||||
// modifier = "color:0 0 0 127:grayscale:"; | |||||
// } | |||||
// else | |||||
{ | |||||
data.button.enabled = controlsPlayer(data.player); | |||||
if (maxNeededResources) | |||||
modifier = resourcesToAlphaMask(maxNeededResources) + ":"; | |||||
} | |||||
if (template.icon) | |||||
data.icon.sprite = modifier + "stretched:session/portraits/" + template.icon; | |||||
let index = data.i + getNumberOfRightPanelButtons(); | |||||
setPanelObjectPosition(data.button, index, data.rowLength); | |||||
warn("Called: " + uneval(template.Entries[entriesToRecruit].data.Template)); | |||||
//return false; | |||||
return true; | |||||
} | |||||
}; | |||||
g_SelectionPanels.Upgrade = { | g_SelectionPanels.Upgrade = { | ||||
"getMaxNumberOfItems": function() | "getMaxNumberOfItems": function() | ||||
{ | { | ||||
return 24 - getNumberOfRightPanelButtons(); | return 24 - getNumberOfRightPanelButtons(); | ||||
}, | }, | ||||
"getItems": function(unitEntStates) | "getItems": function(unitEntStates) | ||||
{ | { | ||||
// Interface becomes complicated with multiple different units and this is meant per-entity, so prevent it if the selection has multiple different units. | // Interface becomes complicated with multiple different units and this is meant per-entity, so prevent it if the selection has multiple different units. | ||||
▲ Show 20 Lines • Show All 135 Lines • ▼ Show 20 Lines | let g_PanelsOrder = [ | ||||
// RIGHT PANE | // RIGHT PANE | ||||
"Gate", // Must always be shown on gates | "Gate", // Must always be shown on gates | ||||
"Pack", // Must always be shown on packable entities | "Pack", // Must always be shown on packable entities | ||||
"Upgrade", // Must always be shown on upgradable entities | "Upgrade", // Must always be shown on upgradable entities | ||||
"Training", | "Training", | ||||
"Construction", | "Construction", | ||||
"Research", // Normal together with training | "Research", // Normal together with training | ||||
"GroupTraining", // Should fit together with training and research. | |||||
// UNIQUE PANES (importance doesn't matter) | // UNIQUE PANES (importance doesn't matter) | ||||
"Command", | "Command", | ||||
"AllyCommand", | "AllyCommand", | ||||
"Queue", | "Queue", | ||||
"Selection", | "Selection", | ||||
]; | ]; |
Wildfire Games · Phabricator