Index: binaries/data/mods/mod/gui/common/modern/sprites.xml
===================================================================
--- binaries/data/mods/mod/gui/common/modern/sprites.xml
+++ binaries/data/mods/mod/gui/common/modern/sprites.xml
@@ -153,6 +153,59 @@
/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: binaries/data/mods/public/gui/session/selection_details.js
===================================================================
--- binaries/data/mods/public/gui/session/selection_details.js
+++ binaries/data/mods/public/gui/session/selection_details.js
@@ -302,6 +302,8 @@
// TODO: we should require all entities to have icons
Engine.GetGUIObjectByName("icon").sprite = template.icon ? ("stretched:session/portraits/" + template.icon) : "BackgroundBlack";
+ if (template.icon)
+ Engine.GetGUIObjectByName("iconBorder").onpressright = function () { showTemplateDetails(entState.template, playerState.civ); };
Engine.GetGUIObjectByName("attackAndArmorStats").tooltip = [
getAttackTooltip,
@@ -326,7 +328,8 @@
iconTooltips = iconTooltips.concat([
getVisibleEntityClassesFormatted,
getAurasTooltip,
- getEntityTooltip
+ getEntityTooltip,
+ getRightClickMessage
].map(func => func(template)));
Engine.GetGUIObjectByName("iconBorder").tooltip = iconTooltips.filter(tip => tip).join("\n");
Index: binaries/data/mods/public/gui/session/selection_panels.js
===================================================================
--- binaries/data/mods/public/gui/session/selection_panels.js
+++ binaries/data/mods/public/gui/session/selection_panels.js
@@ -262,6 +262,7 @@
template.auras = GetTemplateData(template.wallSet.templates.long).auras;
data.button.onPress = function () { startBuildingPlacement(data.item, data.playerState); };
+ data.button.onPressRight = function () { showTemplateDetails(data.item, data.playerState.civ); };
let tooltips = [
getEntityNamesFormatted,
@@ -270,7 +271,8 @@
getEntityTooltip,
getEntityCostTooltip,
getGarrisonTooltip,
- getPopulationBonusTooltip
+ getPopulationBonusTooltip,
+ getRightClickMessage
].map(func => func(template));
let limits = getEntityLimitAndCount(data.playerState, data.item);
@@ -760,7 +762,8 @@
let tooltips = [
getEntityNamesFormatted,
getEntityTooltip,
- getEntityCostTooltip
+ getEntityCostTooltip,
+ getRightClickMessage
].map(func => func(template));
if (!requirementsPassed)
@@ -811,6 +814,8 @@
addResearchToQueue(data.item.researchFacilityId, tech);
};
+ button.onPressRight = function () { showTemplateDetails("tech/"+data.item.tech, data.playerState.civ); };
+
if (data.item.tech.pair)
{
// On mouse enter, show a cross over the other icon
@@ -998,6 +1003,7 @@
data.button.onPress = function() {
addTrainingToQueue(data.unitEntStates.map(state => state.id), data.item, data.playerState);
};
+ data.button.onPressRight = function () { showTemplateDetails(data.item, data.playerState.civ); };
data.countDisplay.caption = trainNum > 1 ? trainNum : "";
@@ -1023,7 +1029,8 @@
getArmorTooltip,
getGarrisonTooltip,
getProjectilesTooltip,
- getSpeedTooltip
+ getSpeedTooltip,
+ getRightClickMessage
].map(func => func(template)));
tooltips.push(
@@ -1121,7 +1128,8 @@
getEntityCostTooltip(data.item),
formatLimitString(limits.entLimit, limits.entCount, limits.entLimitChangers),
getRequiredTechnologyTooltip(technologyEnabled, data.item.requiredTechnology, GetSimState().players[data.player].civ),
- getNeededResourcesTooltip(neededResources));
+ getNeededResourcesTooltip(neededResources),
+ getRightClickMessage());
tooltip = tooltips.filter(tip => tip).join("\n");
@@ -1140,6 +1148,8 @@
data.button.enabled = controlsPlayer(data.player);
data.button.tooltip = tooltip;
+ data.button.onPressRight = function () { showTemplateDetails(data.item.entity, data.playerState.civ); };
+
let modifier = "";
if (!isUpgrading)
{
@@ -1177,6 +1187,20 @@
};
/**
+ * Pauses game and opens the entity details viewer on a given entity
+ */
+function showTemplateDetails(templateName, civ = "athen")
+{
+ pauseGame();
+ let data = {
+ "templateName" : templateName,
+ "callback": "resumeGame",
+ "civ": civ,
+ };
+ Engine.PushGuiPage("page_viewer.xml", data);
+}
+
+/**
* If two panels need the same space, so they collide,
* the one appearing first in the order is rendered.
*
Index: binaries/data/mods/public/gui/session/selection_panels_helpers.js
===================================================================
--- binaries/data/mods/public/gui/session/selection_panels_helpers.js
+++ binaries/data/mods/public/gui/session/selection_panels_helpers.js
@@ -84,6 +84,11 @@
}
}
+function getRightClickMessage()
+{
+ return translate("Right-click for more information.");
+}
+
/**
* Format entity count/limit message for the tooltip
*/
Index: binaries/data/mods/public/gui/session/selection_panels_middle/single_details_area.xml
===================================================================
--- binaries/data/mods/public/gui/session/selection_panels_middle/single_details_area.xml
+++ binaries/data/mods/public/gui/session/selection_panels_middle/single_details_area.xml
@@ -67,7 +67,7 @@
-
+
Index: binaries/data/mods/public/l10n/messages.json
===================================================================
--- binaries/data/mods/public/l10n/messages.json
+++ binaries/data/mods/public/l10n/messages.json
@@ -243,6 +243,7 @@
"gui/pregame/**.js",
"gui/reference/common/**.js",
"gui/reference/structree/**.js",
+ "gui/reference/viewer/**.js",
"gui/replaymenu/**.js",
"gui/savedgames/**.js",
"gui/splashscreen/**.js",
@@ -277,6 +278,7 @@
"gui/options/**.xml",
"gui/pregame/**.xml",
"gui/reference/structree/**.xml",
+ "gui/reference/viewer/**.xml",
"gui/replaymenu/**.xml",
"gui/savedgames/**.xml",
"gui/splashscreen/**.xml",
@@ -386,6 +388,7 @@
"keywords": {
"GenericName": {},
"SpecificName": {},
+ "History": {},
"VisibleClasses": {
"splitOnWhitespace": true
},
@@ -417,6 +420,7 @@
"keywords": {
"GenericName": {},
"SpecificName": {},
+ "History": {},
"VisibleClasses": {
"splitOnWhitespace": true
},
@@ -455,6 +459,7 @@
"keywords": {
"GenericName": {},
"SpecificName": {},
+ "History": {},
"VisibleClasses": {
"splitOnWhitespace": true
},