| 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 | */ |
| 3684 | UnitAI.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 | |