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 @@