Show
Ignore:
Timestamp:
11/22/08 00:35:41 (17 years ago)
Author:
yumileroy
Message:

Delete possessed AI only on creature delete.

Original author: gvcoman
Date: 2008-11-16 14:38:02-05:00

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/game/GridNotifiers.h

    r267 r272  
    699699    // Creature checks 
    700700 
    701     class NearestHostileUnitInAttackDistanceCheck 
    702     { 
    703         public: 
    704             explicit NearestHostileUnitInAttackDistanceCheck(Creature const* creature, float dist = 0) : m_creature(creature)  
    705             { 
    706                 m_range = (dist == 0 ? 9999 : dist); 
    707                 m_force = (dist == 0 ? false : true); 
    708             } 
    709             bool operator()(Unit* u) 
    710             { 
    711                 // TODO: addthreat for every enemy in range? 
    712                 if(!m_creature->IsWithinDistInMap(u, m_range)) 
    713                     return false; 
    714  
    715                 if(m_force) 
    716                 { 
    717                     if(!m_creature->canAttack(u)) 
    718                         return false; 
    719                 } 
    720                 else 
    721                 { 
    722                     if(!m_creature->canStartAttack(u)) 
    723                         return false; 
    724                 } 
    725  
    726                 m_range = m_creature->GetDistance(u); 
    727                 return true; 
    728             } 
    729             float GetLastRange() const { return m_range; } 
    730         private: 
    731             Creature const *m_creature; 
    732             float m_range; 
    733             bool m_force; 
    734             NearestHostileUnitInAttackDistanceCheck(NearestHostileUnitInAttackDistanceCheck const&); 
     701    class InAttackDistanceFromAnyHostileCreatureCheck 
     702    { 
     703        public: 
     704            explicit InAttackDistanceFromAnyHostileCreatureCheck(Unit* funit) : i_funit(funit) {} 
     705            bool operator()(Creature* u) 
     706            { 
     707                if(u->isAlive() && u->IsHostileTo(i_funit) && i_funit->IsWithinDistInMap(u, u->GetAttackDistance(i_funit))) 
     708                    return true; 
     709 
     710                return false; 
     711            } 
     712        private: 
     713            Unit* const i_funit; 
    735714    }; 
    736715