diff --git a/binaries/data/mods/public/gui/common/common_sprites.xml b/binaries/data/mods/public/gui/common/common_sprites.xml
index be8e08ea54..78b1098b1d 100644
--- a/binaries/data/mods/public/gui/common/common_sprites.xml
+++ b/binaries/data/mods/public/gui/common/common_sprites.xml
@@ -74,7 +74,17 @@
+
+
+
+
diff --git a/binaries/data/mods/public/gui/session/input.js b/binaries/data/mods/public/gui/session/input.js
index 73de380b34..e4ae2c804d 100644
--- a/binaries/data/mods/public/gui/session/input.js
+++ b/binaries/data/mods/public/gui/session/input.js
@@ -82,16 +82,20 @@ function updateCursorAndTooltip()
if (!tooltipSet)
informationTooltip.hidden = true;
- var wallDragTooltip = getGUIObjectByName("wallDragTooltip");
- if (placementSupport.wallDragTooltip)
+ var placementTooltip = getGUIObjectByName("placementTooltip");
+ if (placementSupport.tooltipMessage)
{
- wallDragTooltip.caption = placementSupport.wallDragTooltip;
- wallDragTooltip.hidden = false;
+ if (placementSupport.tooltipError)
+ placementTooltip.sprite = "BackgroundErrorTooltip";
+ else
+ placementTooltip.sprite = "BackgroundInformationTooltip";
+ placementTooltip.caption = placementSupport.tooltipMessage;
+ placementTooltip.hidden = false;
}
else
{
- wallDragTooltip.caption = "";
- wallDragTooltip.hidden = true;
+ placementTooltip.caption = "";
+ placementTooltip.hidden = true;
}
}
@@ -105,13 +109,18 @@ function updateBuildingPlacementPreview()
{
if (placementSupport.template && placementSupport.position)
{
- return Engine.GuiInterfaceCall("SetBuildingPlacementPreview", {
+ var result = Engine.GuiInterfaceCall("SetBuildingPlacementPreview", {
"template": placementSupport.template,
"x": placementSupport.position.x,
"z": placementSupport.position.z,
"angle": placementSupport.angle,
"actorSeed": placementSupport.actorSeed
});
+
+ // Show placement info tooltip if invalid position
+ placementSupport.tooltipError = !result.success;
+ placementSupport.tooltipMessage = result.success ? "" : result.message;
+ return result.success;
}
}
else if (placementSupport.mode === "wall")
@@ -862,10 +871,10 @@ function handleInputBeforeGui(ev, hoveredObject)
if (result && result.cost)
{
- placementSupport.wallDragTooltip = getEntityCostTooltip(result);
+ placementSupport.tooltipMessage = getEntityCostTooltip(result);
var neededResources = Engine.GuiInterfaceCall("GetNeededResources", result.cost);
if (neededResources)
- placementSupport.wallDragTooltip += getNeededResourcesTooltip(neededResources);
+ placementSupport.tooltipMessage += getNeededResourcesTooltip(neededResources);
}
break;
@@ -892,7 +901,7 @@ function handleInputBeforeGui(ev, hoveredObject)
}
else
{
- placementSupport.wallDragTooltip = "Cannot build wall here!";
+ placementSupport.tooltipMessage = "Cannot build wall here!";
}
updateBuildingPlacementPreview();
diff --git a/binaries/data/mods/public/gui/session/placement.js b/binaries/data/mods/public/gui/session/placement.js
index 0b429bcaf9..189d765d7e 100644
--- a/binaries/data/mods/public/gui/session/placement.js
+++ b/binaries/data/mods/public/gui/session/placement.js
@@ -13,11 +13,12 @@ PlacementSupport.prototype.Reset = function()
this.mode = null;
this.position = null;
this.template = null;
+ this.tooltipMessage = ""; // tooltip text to show while the user is placing a building
+ this.tooltipError = false;
this.wallSet = null; // maps types of wall pieces ("tower", "long", "short", ...) to template names
this.wallSnapEntities = null; // list of candidate entities to snap the starting and (!) ending positions to when building walls
this.wallEndPosition = null;
this.wallSnapEntitiesIncludeOffscreen = false; // should the next update of the snap candidate list include offscreen towers?
- this.wallDragTooltip = null; // tooltip text while the user is draggin the wall. Used to indicate the current cost to build the wall.
this.SetDefaultAngle();
this.RandomizeActorSeed();
diff --git a/binaries/data/mods/public/gui/session/session.xml b/binaries/data/mods/public/gui/session/session.xml
index 243f620f47..92594b2c52 100644
--- a/binaries/data/mods/public/gui/session/session.xml
+++ b/binaries/data/mods/public/gui/session/session.xml
@@ -688,9 +688,9 @@
-
+
-
+
diff --git a/binaries/data/mods/public/gui/session/styles.xml b/binaries/data/mods/public/gui/session/styles.xml
index 420e26efd4..ffa93185d5 100644
--- a/binaries/data/mods/public/gui/session/styles.xml
+++ b/binaries/data/mods/public/gui/session/styles.xml
@@ -206,7 +206,7 @@