Ticket #3412: ship-template.diff

File ship-template.diff, 6.8 KB (added by smitec, 8 years ago)
  • binaries/data/mods/public/gui/session/unit_actions.js

    diff --git a/binaries/data/mods/public/gui/session/unit_actions.js b/binaries/data/mods/public/gui/session/unit_actions.js
    index 45cb732..21ea868 100644
    a b var unitActions =  
    367367        {
    368368            if (!hasClass(entState, "Unit") || !targetState.garrisonHolder)
    369369                return false;
     370            if (!entState.unitAI || !entState.unitAI.canGarrison)
     371                return false;
    370372            if (!playerCheck(entState, targetState, ["Player", "Ally"]))
    371373                return false;
    372374            var tooltip = sprintf(translate("Current garrison: %(garrisoned)s/%(capacity)s"), {
    var g_EntityCommands =  
    749751     "garrison": {
    750752        "getInfo": function(entState)
    751753        {
    752             if (!entState.unitAI || entState.turretParent)
     754            if (!entState.unitAI || !entState.unitAI.canGarrison || entState.turretParent)
    753755                return false;
    754756            return {
    755757                "tooltip": translate("Garrison"),
  • binaries/data/mods/public/simulation/components/GuiInterface.js

    diff --git a/binaries/data/mods/public/simulation/components/GuiInterface.js b/binaries/data/mods/public/simulation/components/GuiInterface.js
    index d55ffae..55eefa2 100644
    a b GuiInterface.prototype.GetEntityState = function(player, ent)  
    351351            "orders": cmpUnitAI.GetOrders(),
    352352            "hasWorkOrders": cmpUnitAI.HasWorkOrders(),
    353353            "canGuard": cmpUnitAI.CanGuard(),
     354            "canGarrison": cmpUnitAI.IsGarrisonable(),
    354355            "isGuarding": cmpUnitAI.IsGuardOf(),
    355356            "possibleStances": cmpUnitAI.GetPossibleStances(),
    356357            "isIdle":cmpUnitAI.IsIdle(),
  • binaries/data/mods/public/simulation/components/UnitAI.js

    diff --git a/binaries/data/mods/public/simulation/components/UnitAI.js b/binaries/data/mods/public/simulation/components/UnitAI.js
    index 5d88429..5c4686e 100644
    a b UnitAI.prototype.Schema =  
    2424    "<element name='CanGuard'>" +
    2525        "<data type='boolean'/>" +
    2626    "</element>" +
     27    "<element name='CanGarrison'>" +
     28        "<data type='boolean'/>" +
     29    "</element>" +
    2730    "<optional>" +
    2831        "<interleave>" +
    2932            "<element name='NaturalBehaviour' a:help='Behaviour of the unit in the absence of player commands (intended for animals)'>" +
    UnitAI.prototype.CanAttack = function(target, forceResponse)  
    56255628    return false;
    56265629};
    56275630
     5631UnitAI.prototype.IsGarrisonable = function() {
     5632    return (this.template.CanGarrison == "true");
     5633}
     5634
    56285635UnitAI.prototype.CanGarrison = function(target)
    56295636{
    56305637    // Formation controllers should always respond to commands
    56315638    // (then the individual units can make up their own minds)
    56325639    if (this.IsFormationController())
    56335640        return true;
    5634 
    5635     var cmpGarrisonHolder = Engine.QueryInterface(target, IID_GarrisonHolder);
    5636     if (!cmpGarrisonHolder)
    5637         return false;
    5638 
    5639     // Verify that the target is owned by this entity's player or a mutual ally of this player
    5640     var cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership);
    5641     if (!cmpOwnership || !(IsOwnedByPlayer(cmpOwnership.GetOwner(), target) || IsOwnedByMutualAllyOfPlayer(cmpOwnership.GetOwner(), target)))
    5642         return false;
    5643 
    5644     // Don't let animals garrison for now
    5645     // (If we want to support that, we'll need to change Order.Garrison so it
    5646     // doesn't move the animal into an INVIDIDUAL.* state)
    5647     if (this.IsAnimal())
    5648         return false;
     5641   
     5642    // Check if the unit is able to Garrison based on their template
     5643    if (!this.isGarrisonable())
     5644        return false;
     5645
     5646    var cmpGarrisonHolder = Engine.QueryInterface(target, IID_GarrisonHolder);
     5647    if (!cmpGarrisonHolder)
     5648        return false;
     5649
     5650    // Verify that the target is owned by this entity's player or a mutual ally of this player
     5651    var cmpOwnership = Engine.QueryInterface(this.entity, IID_Ownership);
     5652    if (!cmpOwnership || !(IsOwnedByPlayer(cmpOwnership.GetOwner(), target) || IsOwnedByMutualAllyOfPlayer(cmpOwnership.GetOwner(), target)))
     5653        return false;
    56495654
    56505655    return true;
    56515656};
  • binaries/data/mods/public/simulation/templates/template_formation.xml

    diff --git a/binaries/data/mods/public/simulation/templates/template_formation.xml b/binaries/data/mods/public/simulation/templates/template_formation.xml
    index c310825..655ecf8 100644
    a b  
    3434    <FleeDistance>12.0</FleeDistance>
    3535    <FormationController>true</FormationController>
    3636    <CanGuard>true</CanGuard>
     37    <CanGarrison>true</CanGarrison>
    3738  </UnitAI>
    3839  <UnitMotion>
    3940    <FormationController>true</FormationController>
  • binaries/data/mods/public/simulation/templates/template_unit.xml

    diff --git a/binaries/data/mods/public/simulation/templates/template_unit.xml b/binaries/data/mods/public/simulation/templates/template_unit.xml
    index 3654f4b..23d8d58 100644
    a b  
    101101    <FleeDistance>12.0</FleeDistance>
    102102    <FormationController>false</FormationController>
    103103    <CanGuard>true</CanGuard>
     104    <CanGarrison>true</CanGarrison>
    104105  </UnitAI>
    105106  <Guard/>
    106107  <UnitMotion>
  • binaries/data/mods/public/simulation/templates/template_unit_fauna.xml

    diff --git a/binaries/data/mods/public/simulation/templates/template_unit_fauna.xml b/binaries/data/mods/public/simulation/templates/template_unit_fauna.xml
    index b15d93a..873cc64 100644
    a b  
    2828    <RoamTimeMax>8000</RoamTimeMax>
    2929    <FeedTimeMin>15000</FeedTimeMin>
    3030    <FeedTimeMax>60000</FeedTimeMax>
     31    <CanGarrison>false</CanGarrison>
    3132  </UnitAI>
    3233  <Guard disable=""/>
    3334  <UnitMotion>
  • binaries/data/mods/public/simulation/templates/template_unit_fauna_decorative.xml

    diff --git a/binaries/data/mods/public/simulation/templates/template_unit_fauna_decorative.xml b/binaries/data/mods/public/simulation/templates/template_unit_fauna_decorative.xml
    index 9ede543..ecd13dd 100644
    a b  
    3131    <RoamTimeMax>100000</RoamTimeMax>
    3232    <FeedTimeMin>1</FeedTimeMin>
    3333    <FeedTimeMax>2</FeedTimeMax>
     34    <CanGarrison>false</CanGarrison>
    3435  </UnitAI>
    3536  <UnitMotion>
    3637    <FormationController>false</FormationController>
  • binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship.xml

    diff --git a/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship.xml b/binaries/data/mods/public/simulation/templates/template_unit_mechanical_ship.xml
    index 32379af..7c61cd1 100644
    a b  
    7070  <Vision>
    7171    <Range>90</Range>
    7272  </Vision>
     73  <UnitAI>
     74    <CanGarrison>false</CanGarrison>
     75  </UnitAI>
    7376</Entity>