Ticket #1724: collectiveBehavior.patch

File collectiveBehavior.patch, 5.8 KB (added by mimo, 11 years ago)
  • binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_african_bush.xml

     
    4444  <Identity>
    4545    <Civ>gaia</Civ>
    4646    <Classes datatype="tokens">Elephant</Classes>
     47    <Species>Elephant</Species>
    4748    <SpecificName>African Bush Elephant</SpecificName>
    4849    <Icon>gaia/fauna_elephant_african_bush.png</Icon>
    4950  </Identity>
  • binaries/data/mods/public/simulation/templates/gaia/fauna_elephant.xml

     
    1111  <Identity>
    1212    <Civ>gaia</Civ>
    1313    <Classes datatype="tokens">Elephant</Classes>
     14    <Species>Elephant</Species>
    1415    <SpecificName>Elephant</SpecificName>
    1516    <Icon>gaia/fauna_elephant.png</Icon>
    1617  </Identity>
  • binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_north_african.xml

     
    3131  <Identity>
    3232    <Civ>gaia</Civ>
    3333    <Classes datatype="tokens">Elephant</Classes>
     34    <Species>Elephant</Species>
    3435    <SpecificName>North African Elephant</SpecificName>
    3536    <Icon>gaia/fauna_elephant_north_african.png</Icon>
    3637  </Identity>
  • binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_asian.xml

     
    4444  <Identity>
    4545    <Civ>gaia</Civ>
    4646    <Classes datatype="tokens">Elephant</Classes>
     47    <Species>Elephant</Species>
    4748    <SpecificName>Asian Elephant</SpecificName>
    4849    <Icon>gaia/fauna_elephant_african_bush.png</Icon>
    4950  </Identity>
  • binaries/data/mods/public/simulation/templates/gaia/fauna_elephant_african_infant.xml

     
    1212  <Identity>
    1313    <Civ>gaia</Civ>
    1414    <Classes datatype="tokens">Elephant</Classes>
     15    <Species>Elephant</Species>
    1516    <SpecificName>African Elephant (Infant)</SpecificName>
    1617    <Icon>gaia/fauna_elephant_african_infant.png</Icon>
    1718  </Identity>
  • binaries/data/mods/public/simulation/components/Identity.js

     
    1515        "<text/>" +
    1616    "</element>" +
    1717    "<optional>" +
     18        "<element name='Species' a:help='Species for this class of unit'>" +
     19            "<text/>" +
     20        "</element>" +
     21    "</optional>" +
     22    "<optional>" +
    1823        "<element name='SpecificName' a:help='Specific native-language name for this unit type'>" +
    1924            "<text/>" +
    2025        "</element>" +
  • binaries/data/mods/public/simulation/components/UnitAI.js

     
    20962096                this.template.NaturalBehaviour == "passive")
    20972097            {
    20982098                this.Flee(msg.data.attacker, false);
     2099                this.NearbyAnimalsRespondToAttack(msg.data.attacker);
    20992100            }
    21002101            else if (this.IsDangerousAnimal() || this.template.NaturalBehaviour == "defensive")
    21012102            {
    21022103                if (this.CanAttack(msg.data.attacker))
    21032104                    this.Attack(msg.data.attacker, false);
     2105                this.NearbyAnimalsRespondToAttack(msg.data.attacker);
    21042106            }
    21052107            else if (this.template.NaturalBehaviour == "domestic")
    21062108            {
     
    42074209    );
    42084210};
    42094211
     4212/**
     4213 * All wild animals in a given distance respond to the attack :
     4214 * If skittish behaviour, they flee
     4215 * If defensive behaviour, they attack if it is a member of their specy which is involved
     4216 */
     4217UnitAI.prototype.NearbyAnimalsRespondToAttack = function(attacker)
     4218{
     4219    var thisIdentity = Engine.QueryInterface(this.entity, IID_Identity);
     4220    // Look for other animal (gaia player = 0) nearby (dist=24, to be tuned)
     4221    var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
     4222    var nearby = cmpRangeManager.ExecuteQuery(this.entity, 0, 24, [0], IID_UnitAI);
     4223    for each (var ent in nearby)
     4224    {
     4225        var cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI);
     4226        if (cmpUnitAI.template.NaturalBehaviour == "skittish" ||
     4227            cmpUnitAI.template.NaturalBehaviour == "passive")
     4228        {
     4229            cmpUnitAI.Flee(attacker, false);
     4230        }
     4231        else if (cmpUnitAI.IsDangerousAnimal() || cmpUnitAI.template.NaturalBehaviour == "defensive")
     4232        {
     4233            var cmpIdentity = Engine.QueryInterface(ent, IID_Identity);
     4234            if ((cmpIdentity.template.Species && cmpIdentity.template.Species == thisIdentity.template.Species) ||
     4235                (cmpIdentity.template.SpecificName && cmpIdentity.template.SpecificName == thisIdentity.template.SpecificName))
     4236            {
     4237                if(cmpUnitAI.CanAttack(attacker))
     4238                    cmpUnitAI.Attack(attacker, false);
     4239            }
     4240        }
     4241    }
     4242};
     4243
    42104244Engine.RegisterComponentType(IID_UnitAI, "UnitAI", UnitAI);