Index: binaries/data/mods/public/gui/session/unit_actions.js =================================================================== --- binaries/data/mods/public/gui/session/unit_actions.js +++ binaries/data/mods/public/gui/session/unit_actions.js @@ -258,7 +258,7 @@ }, "getActionInfo": function(entState, targetState) { - if (!entState.unitAI || !entState.unitAI.canPatrol) + if (!entState.unitAI || !entState.patrol) return false; return { "possible": true }; @@ -713,7 +713,7 @@ { if (!targetState.guard || !playerCheck(entState, targetState, ["Player", "Ally"]) || - !entState.unitAI || !entState.unitAI.canGuard || + !entState.unitAI || !entState.guard || targetState.unitAI && targetState.unitAI.isGuarding) return false; @@ -1212,7 +1212,7 @@ "getInfo": function(entStates) { if (entStates.every(entState => - !entState.unitAI || !entState.unitAI.canGuard || entState.unitAI.isGuarding)) + !entState.unitAI || !entState.guard || entState.unitAI.isGuarding)) return false; return { @@ -1265,7 +1265,7 @@ "patrol": { "getInfo": function(entStates) { - if (!entStates.some(entState => entState.unitAI && entState.unitAI.canPatrol)) + if (!entStates.some(entState => entState.unitAI && !!entState.patrol)) return false; return { @@ -1431,7 +1431,7 @@ { return entities.some(ent => { let entState = GetEntityState(ent); - return entState && entState.unitAI && entState.unitAI.canPatrol; + return entState && entState.unitAI && !!entState.patrol; }); } Index: binaries/data/mods/public/simulation/ai/common-api/entity.js =================================================================== --- binaries/data/mods/public/simulation/ai/common-api/entity.js +++ binaries/data/mods/public/simulation/ai/common-api/entity.js @@ -540,7 +540,7 @@ "isCapturable": function() { return this.get("Capturable") !== undefined; }, - "canGuard": function() { return this.get("UnitAI/CanGuard") === "true"; }, + "canGuard": function() { return this.get("Guard") !== undefined; }, "canGarrison": function() { return "Garrisonable" in this._template; }, }); Index: binaries/data/mods/public/simulation/components/GuiInterface.js =================================================================== --- binaries/data/mods/public/simulation/components/GuiInterface.js +++ binaries/data/mods/public/simulation/components/GuiInterface.js @@ -350,13 +350,15 @@ "state": cmpUnitAI.GetCurrentState(), "orders": cmpUnitAI.GetOrders(), "hasWorkOrders": cmpUnitAI.HasWorkOrders(), - "canGuard": cmpUnitAI.CanGuard(), "isGuarding": cmpUnitAI.IsGuardOf(), - "canPatrol": cmpUnitAI.CanPatrol(), "selectableStances": cmpUnitAI.GetSelectableStances(), "isIdle": cmpUnitAI.IsIdle(), }; + let cmpPatrol = Engine.QueryInterface(ent, IID_Patrol); + if (cmpPatrol) + ret.patrol = true; + let cmpGuard = Engine.QueryInterface(ent, IID_Guard); if (cmpGuard) ret.guard = { Index: binaries/data/mods/public/simulation/components/Patrol.js =================================================================== --- /dev/null +++ binaries/data/mods/public/simulation/components/Patrol.js @@ -0,0 +1,13 @@ +function Patrol() {} + +/** + * Placeholder component saying an entity can patrol. + */ +Patrol.prototype.Schema = + ""; + +Patrol.prototype.Init = function() {}; + +Patrol.prototype.Serialize = null; + +Engine.RegisterComponentType(IID_Patrol, "Patrol", Patrol); Index: binaries/data/mods/public/simulation/components/UnitAI.js =================================================================== --- binaries/data/mods/public/simulation/components/UnitAI.js +++ binaries/data/mods/public/simulation/components/UnitAI.js @@ -18,12 +18,6 @@ "" + "" + "" + - "" + - "" + - "" + - "" + - "" + - "" + "" + "" + "" + @@ -4985,18 +4979,16 @@ // Do not let a unit already guarded to guard. This would work in principle, // but would clutter the gui with too much buttons to take all cases into account - var cmpGuard = Engine.QueryInterface(this.entity, IID_Guard); - if (cmpGuard && cmpGuard.GetEntities().length) - return false; - - return this.template.CanGuard == "true"; + let cmpGuard = Engine.QueryInterface(this.entity, IID_Guard); + return cmpGuard && !cmpGuard.GetEntities().length; }; UnitAI.prototype.CanPatrol = function() { // Formation controllers should always respond to commands // (then the individual units can make up their own minds) - return this.IsFormationController() || this.template.CanPatrol == "true"; + let cmpPatrol = Engine.QueryInterface(this.entity, IID_Patrol); + return this.IsFormationController() || cmpPatrol; }; /** Index: binaries/data/mods/public/simulation/components/interfaces/Patrol.js =================================================================== --- /dev/null +++ binaries/data/mods/public/simulation/components/interfaces/Patrol.js @@ -0,0 +1 @@ +Engine.RegisterInterface("Patrol"); Index: binaries/data/mods/public/simulation/templates/template_bird.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_bird.xml +++ binaries/data/mods/public/simulation/templates/template_bird.xml @@ -24,8 +24,6 @@ passive passive false - false - false 1000.0 10.0 10000 Index: binaries/data/mods/public/simulation/templates/template_formation.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_formation.xml +++ binaries/data/mods/public/simulation/templates/template_formation.xml @@ -62,8 +62,6 @@ aggressive true 12.0 - true - true true Index: binaries/data/mods/public/simulation/templates/template_unit.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit.xml +++ binaries/data/mods/public/simulation/templates/template_unit.xml @@ -71,6 +71,7 @@ + 0 upright @@ -117,8 +118,6 @@ aggressive 12.0 false - true - true false Index: binaries/data/mods/public/simulation/templates/template_unit_fauna.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_fauna.xml +++ binaries/data/mods/public/simulation/templates/template_unit_fauna.xml @@ -18,10 +18,9 @@ food + - false - false 8.0 24.0 2000 Index: binaries/data/mods/public/simulation/templates/template_unit_ship_fishing.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_ship_fishing.xml +++ binaries/data/mods/public/simulation/templates/template_unit_ship_fishing.xml @@ -31,6 +31,7 @@ 10 true + FishingBoat -ConquestCritical @@ -42,6 +43,7 @@ 10 0 + 6.0 1.0 @@ -63,8 +65,6 @@ passive - false - false ship-small Index: binaries/data/mods/public/simulation/templates/template_unit_ship_merchant.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_ship_merchant.xml +++ binaries/data/mods/public/simulation/templates/template_unit_ship_merchant.xml @@ -20,6 +20,7 @@ 10 true + 400 @@ -36,6 +37,7 @@ 15 0 + 12.0 @@ -50,8 +52,6 @@ passive - false - false ship-small Index: binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml +++ binaries/data/mods/public/simulation/templates/template_unit_support_female_citizen.xml @@ -53,6 +53,7 @@ Citizen Worker + 2.0 1.0 @@ -88,9 +89,6 @@ resource/mining/mining.xml - - false - 32 Index: binaries/data/mods/public/simulation/templates/template_unit_support_trader.xml =================================================================== --- binaries/data/mods/public/simulation/templates/template_unit_support_trader.xml +++ binaries/data/mods/public/simulation/templates/template_unit_support_trader.xml @@ -7,6 +7,7 @@ 80 + 100 @@ -17,6 +18,7 @@ Trade resources between your own markets and those of your allies. + @@ -40,10 +42,6 @@ 0.75 - - false - false - 60 Index: binaries/data/mods/public/simulation/templates/units/maur_support_elephant.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/maur_support_elephant.xml +++ binaries/data/mods/public/simulation/templates/units/maur_support_elephant.xml @@ -38,6 +38,7 @@ 10 10 + pitch @@ -63,9 +64,6 @@ actor/fauna/animal/elephant_trained.xml - - false - large 0.6 Index: binaries/data/mods/public/simulation/templates/units/spart_support_female_citizen.xml =================================================================== --- binaries/data/mods/public/simulation/templates/units/spart_support_female_citizen.xml +++ binaries/data/mods/public/simulation/templates/units/spart_support_female_citizen.xml @@ -25,9 +25,7 @@ units/spart_support_female_citizen.png units/spart_support_female_citizen - - true - + units/spartans/female_citizen.xml