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
@@ -288,7 +288,10 @@
"conflictsWith": ["Garrison"],
"getItems": function(unitEntStates)
{
- if (unitEntStates.some(state => !hasClass(state, "Unit")))
+ // hide panel if formations are forbidden for some class in selection
+ if (unitEntStates.some(state => !hasClass(state, "Unit")) ||
+ unitEntStates.some(state => hasClass(state, "Domestic") || hasClass(state, "FemaleCitizen") || hasClass(state, "Trader"))
+ )
return [];
if (!g_AvailableFormations.has(unitEntStates[0].player))
@@ -296,11 +299,8 @@
let availableFormations = g_AvailableFormations.get(unitEntStates[0].player);
- // Hide the panel if all formations are disabled
- if (availableFormations.some(formation => canMoveSelectionIntoFormation(formation)))
- return availableFormations;
+ return availableFormations;
- return [];
},
"setupButton": function(data)
{
Index: binaries/data/mods/public/simulation/components/Formation.js
===================================================================
--- binaries/data/mods/public/simulation/components/Formation.js
+++ binaries/data/mods/public/simulation/components/Formation.js
@@ -7,8 +7,12 @@
"" +
"" +
"" +
- "" +
- "" +
+ ""+
+ ""+
+ ""+
+ "2"+
+ ""+
+ ""+
"" +
"" +
"" +
@@ -75,6 +79,7 @@
Formation.prototype.Init = function()
{
+ this.requiredMemberCount = this.template.RequiredMemberCount;
this.formationShape = this.template.FormationShape;
this.sortingClasses = this.template.SortingClasses.split(/\s+/g);
this.sortingOrder = this.template.SortingOrder;
@@ -325,16 +330,16 @@
this.members = this.members.filter(function(e) { return ents.indexOf(e) == -1; });
this.inPosition = this.inPosition.filter(function(e) { return ents.indexOf(e) == -1; });
- for (var ent of ents)
+ for (let ent of ents)
{
- var cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI);
+ let cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI);
cmpUnitAI.UpdateWorkOrders();
cmpUnitAI.SetFormationController(INVALID_ENTITY);
}
- for (var ent of this.formationMembersWithAura)
+ for (let ent of this.formationMembersWithAura)
{
- var cmpAuras = Engine.QueryInterface(ent, IID_Auras);
+ let cmpAuras = Engine.QueryInterface(ent, IID_Auras);
cmpAuras.RemoveFormationBonus(ents);
// the unit with the aura is also removed from the formation
@@ -344,10 +349,10 @@
this.formationMembersWithAura = this.formationMembersWithAura.filter(function(e) { return ents.indexOf(e) == -1; });
- // If there's nobody left, destroy the formation
- if (this.members.length == 0)
+ // if there is not required count of members, disband formation
+ if (this.members.length < this.requiredMemberCount)
{
- Engine.DestroyEntity(this.entity);
+ this.Disband();
return;
}
Index: binaries/data/mods/public/simulation/templates/special/formations/null.xml
===================================================================
--- binaries/data/mods/public/simulation/templates/special/formations/null.xml
+++ binaries/data/mods/public/simulation/templates/special/formations/null.xml
@@ -3,5 +3,6 @@
formations/null.png
None
+
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
@@ -22,8 +22,8 @@
-->
- 1
-
+ 2
+ 2 units required
1
square
Hero Champion Cavalry Melee Ranged
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
@@ -11,7 +11,10 @@
100
- -ConquestCritical
+
+ -ConquestCritical
+ Trader
+
Trader Bribable
Trader
Trade resources between your own markets and those of your allies.