diff --git a/binaries/data/config/default.cfg b/binaries/data/config/default.cfg index 66d4a4ac0a..9493d2fca9 100644 --- a/binaries/data/config/default.cfg +++ b/binaries/data/config/default.cfg @@ -167,6 +167,7 @@ timeelapsedcounter.toggle = "F12" ; Toggle time elapsed counter session.showstatusbars = Tab ; Toggle display of status bars session.highlightguarding = PgDn ; Toggle highlight of guarding units session.highlightguarded = PgUp ; Toggle highlight of guarded units +session.toggleattackrange = "Alt+C" ; Toggle display of attack range overlays of selected defensive structures session.toggleaurarange = "Alt+V" ; Toggle display of aura range overlays of selected units and structures session.togglehealrange = "Alt+B" ; Toggle display of heal range overlays of selected units @@ -346,6 +347,7 @@ aidifficulty = 3 ; Difficulty level, from 0 (easiest) to 5 (har camerajump.threshold = 40 ; How close do we have to be to the actual location in order to jump back to the previous one? timeelapsedcounter = false ; Show the game duration in the top right corner batchtrainingsize = 5 ; Number of units to be trained per batch (when pressing the hotkey) +attackrange = true ; Display attack range overlays of selected defensive structures aurarange = true ; Display aura range overlays of selected units and structures healrange = true ; Display heal range overlays of selected units diff --git a/binaries/data/mods/public/gui/manual/intro.txt b/binaries/data/mods/public/gui/manual/intro.txt index dac92afb3d..3bc9fb7dce 100644 --- a/binaries/data/mods/public/gui/manual/intro.txt +++ b/binaries/data/mods/public/gui/manual/intro.txt @@ -112,6 +112,7 @@ Alt + D: Show/hide developer overlay (with developer options) Alt + W: Toggle wireframe mode (press once to get wireframes overlaid over the textured models, twice to get just the wireframes colored by the textures, thrice to get back to normal textured mode) Alt + S: Toggle unit silhouettes (might give a small performance boost) Alt + Z: Toggle sky +Alt + C: Toggle attack range visualizations of selected defensive structures Alt + V: Toggle aura range visualizations of selected units and structures Alt + B: Toggle heal range visualizations of selected units diff --git a/binaries/data/mods/public/gui/options/options.json b/binaries/data/mods/public/gui/options/options.json index 1ef40f3f00..83abd3feb7 100644 --- a/binaries/data/mods/public/gui/options/options.json +++ b/binaries/data/mods/public/gui/options/options.json @@ -102,6 +102,12 @@ "tooltip": "Show time that messages are posted in the lobby, gamesetup and ingame chat.", "config": "chat.timestamp" }, + { + "type": "boolean", + "label": "Attack Range Visualization", + "tooltip": "Display the attack range of selected defensive structures (can also be toggled in-game with the hotkey).", + "config": "gui.session.attackrange" + }, { "type": "boolean", "label": "Aura Range Visualization", diff --git a/binaries/data/mods/public/gui/session/hotkeys/misc.xml b/binaries/data/mods/public/gui/session/hotkeys/misc.xml index aee57683ee..575837aa48 100644 --- a/binaries/data/mods/public/gui/session/hotkeys/misc.xml +++ b/binaries/data/mods/public/gui/session/hotkeys/misc.xml @@ -97,6 +97,10 @@ clearSelection(); + + toggleRangeOverlay("Attack"); + + toggleRangeOverlay("Aura"); @@ -111,5 +115,4 @@ recalculateStatusBarDisplay(); - diff --git a/binaries/data/mods/public/gui/session/session.js b/binaries/data/mods/public/gui/session/session.js index 5cb74db27e..cec95a8f2a 100644 --- a/binaries/data/mods/public/gui/session/session.js +++ b/binaries/data/mods/public/gui/session/session.js @@ -798,7 +798,7 @@ function onSimulationUpdate() handleNotifications(); updateGUIObjects(); - for (let type of ["Aura", "Heal"]) + for (let type of ["Attack", "Aura", "Heal"]) Engine.GuiInterfaceCall("EnableVisualRangeOverlayType", { "type": type, "enabled": Engine.ConfigDB_GetValue("user", "gui.session." + type.toLowerCase() + "range") == "true" diff --git a/binaries/data/mods/public/simulation/components/Attack.js b/binaries/data/mods/public/simulation/components/Attack.js index 58187b8a93..bf0bee1fd3 100644 --- a/binaries/data/mods/public/simulation/components/Attack.js +++ b/binaries/data/mods/public/simulation/components/Attack.js @@ -124,6 +124,15 @@ Attack.prototype.Schema = ""+ "" + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + "" + "" + "" + @@ -608,4 +617,22 @@ Attack.prototype.OnValueModification = function(msg) cmpUnitAI.UpdateRangeQueries(); }; +Attack.prototype.GetRangeOverlays = function() +{ + if (!this.template.Ranged || !this.template.Ranged.RangeOverlay) + return []; + + let range = this.GetRange("Ranged"); + let rangeOverlays = []; + for (let i in range) + if ((i == "min" || i == "max") && range[i]) + rangeOverlays.push({ + "radius": range[i], + "texture": this.template.Ranged.RangeOverlay.LineTexture, + "textureMask": this.template.Ranged.RangeOverlay.LineTextureMask, + "thickness": +this.template.Ranged.RangeOverlay.LineThickness, + }); + return rangeOverlays; +}; + Engine.RegisterComponentType(IID_Attack, "Attack", Attack); diff --git a/binaries/data/mods/public/simulation/components/RangeVisualization.js b/binaries/data/mods/public/simulation/components/RangeVisualization.js index 7f5202575c..a77456c8b6 100644 --- a/binaries/data/mods/public/simulation/components/RangeVisualization.js +++ b/binaries/data/mods/public/simulation/components/RangeVisualization.js @@ -6,6 +6,7 @@ RangeVisualization.prototype.Init = function() { this.enabled = false; this.enabledRangeTypes = { + "Attack": false, "Aura": false, "Heal": false }; @@ -21,6 +22,13 @@ RangeVisualization.prototype.Deserialize = function(data) this.Init(); }; +RangeVisualization.prototype.UpdateVisualAttackRanges = function() +{ + let cmpAttack = Engine.QueryInterface(this.entity, IID_Attack); + if (cmpAttack) + this.rangeVisualizations.set("Attack", cmpAttack.GetRangeOverlays()); +}; + RangeVisualization.prototype.UpdateVisualAuraRanges = function() { let cmpAuras = Engine.QueryInterface(this.entity, IID_Auras); @@ -93,7 +101,9 @@ RangeVisualization.prototype.OnOwnershipChanged = function(msg) RangeVisualization.prototype.OnValueModification = function(msg) { - if (msg.valueNames.indexOf("Heal/Range") == -1) + if (msg.valueNames.indexOf("Heal/Range") == -1 && + msg.valueNames.indexOf("Attack/Ranged/MinRange") == -1 && + msg.valueNames.indexOf("Attack/Ranged/MaxRange") == -1) return; this["UpdateVisual" + msg.component + "Ranges"](); diff --git a/binaries/data/mods/public/simulation/templates/structures/rome_army_camp.xml b/binaries/data/mods/public/simulation/templates/structures/rome_army_camp.xml index aad5c967f7..491891e4ee 100644 --- a/binaries/data/mods/public/simulation/templates/structures/rome_army_camp.xml +++ b/binaries/data/mods/public/simulation/templates/structures/rome_army_camp.xml @@ -23,6 +23,11 @@ 2000 1.5 0 + + outline_border.png + outline_border_mask.png + 0.175 + diff --git a/binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml b/binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml index b8dec70f73..81c2863bcb 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_civic_civil_centre.xml @@ -27,6 +27,11 @@ 1.5 0 Human + + outline_border.png + outline_border_mask.png + 0.175 + diff --git a/binaries/data/mods/public/simulation/templates/template_structure_defense_tower.xml b/binaries/data/mods/public/simulation/templates/template_structure_defense_tower.xml index e956b230a9..8ba53094fc 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_defense_tower.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_defense_tower.xml @@ -12,6 +12,11 @@ 1.5 0 Human + + outline_border.png + outline_border_mask.png + 0.175 + diff --git a/binaries/data/mods/public/simulation/templates/template_structure_defense_wall_tower.xml b/binaries/data/mods/public/simulation/templates/template_structure_defense_wall_tower.xml index 644035e3b8..6b18a48357 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_defense_wall_tower.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_defense_wall_tower.xml @@ -14,6 +14,11 @@ 1.5 0 Human + + outline_border.png + outline_border_mask.png + 0.175 + diff --git a/binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml b/binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml index 79852d2eca..05bb9bbce7 100644 --- a/binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml +++ b/binaries/data/mods/public/simulation/templates/template_structure_military_fortress.xml @@ -19,6 +19,11 @@ 1.5 0 Human + + outline_border.png + outline_border_mask.png + 0.175 + diff --git a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_tower.xml b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_tower.xml index 819f327924..e9d6074ab3 100644 --- a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_tower.xml +++ b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_siege_tower.xml @@ -15,6 +15,11 @@ 2.0 0 Human + + outline_border.png + outline_border_mask.png + 0.175 +