Ticket #1724: animal.patch

File animal.patch, 2.3 KB (added by mimo, 12 years ago)
  • binaries/data/mods/public/simulation/components/UnitAI.js

     
    17221722                this.template.NaturalBehaviour == "passive")
    17231723            {
    17241724                this.Flee(msg.data.attacker, false);
     1725                this.NearbyRespondToAttack(msg.data.attacker);
    17251726            }
    17261727            else if (this.IsDangerousAnimal() || this.template.NaturalBehaviour == "defensive")
    17271728            {
    17281729                if (this.CanAttack(msg.data.attacker))
    17291730                    this.Attack(msg.data.attacker, false);
     1731                this.NearbyRespondToAttack(msg.data.attacker);
    17301732            }
    17311733            else if (this.template.NaturalBehaviour == "domestic")
    17321734            {
     
    36743676    );
    36753677};
    36763678
     3679/**
     3680 * All wild animals in a given distance respond to the attack :
     3681 * If skittish behaviour, they flee
     3682 * If defensive behaviour, they attack if it is a member of their specy which is involved
     3683 */
     3684UnitAI.prototype.NearbyRespondToAttack = function(attacker)
     3685{
     3686    var cmpTemplateManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_TemplateManager);
     3687    var thisTemplateName = cmpTemplateManager.GetCurrentTemplateName(this.entity);
     3688    var thisSpecificName = (cmpTemplateManager.GetTemplate(thisTemplateName)).Identity.SpecificName;
     3689    // Look for other animal (gaia player = 0) nearby (dist=32, to be tuned)
     3690    var cmpRangeManager = Engine.QueryInterface(SYSTEM_ENTITY, IID_RangeManager);
     3691    var nearby = cmpRangeManager.ExecuteQuery(this.entity, 0, 32, [0], IID_UnitAI);
     3692    for each (var ent in nearby)
     3693    {
     3694        var cmpUnitAI = Engine.QueryInterface(ent, IID_UnitAI);
     3695        if (cmpUnitAI.template.NaturalBehaviour == "skittish" ||
     3696            cmpUnitAI.template.NaturalBehaviour == "passive")
     3697        {
     3698                    Engine.QueryInterface(ent, IID_UnitAI).Flee(attacker, false);
     3699        }
     3700        else if (cmpUnitAI.IsDangerousAnimal() || cmpUnitAI.template.NaturalBehaviour == "defensive")
     3701                {
     3702            var templateName = cmpTemplateManager.GetCurrentTemplateName(ent);
     3703            var template = cmpTemplateManager.GetTemplate(templateName);
     3704            if(thisSpecificName == template.Identity.SpecificName && cmpUnitAI.CanAttack(attacker))
     3705                cmpUnitAI.Attack(attacker, false);
     3706        }
     3707    }
     3708};
     3709
    36773710Engine.RegisterComponentType(IID_UnitAI, "UnitAI", UnitAI);