Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 10244 in orxonox.OLD for branches/ai/src/ai/ai_swarm.cc


Ignore:
Timestamp:
Jan 17, 2007, 12:43:30 AM (17 years ago)
Author:
tfahrni
Message:

tired

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ai/src/ai/ai_swarm.cc

    r10226 r10244  
    1414*/
    1515#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_AI
    16 #include "ai_swarm.h"
     16#include "swarm_gorel.h"
    1717#include "ai_module.h"
    1818#include "movement_module.h"
     
    3333        std::map<WorldEntity*,AIModule*>::iterator it;
    3434
     35        if(enemys==NULL || enemys->size()<1)return;
     36        target=enemys->at(0);
     37       
    3538        Vector swarmPosition=this->getPosition();
    3639        Vector targetPosition=target->getAbsCoor();
     
    7881
    7982
    80 
     83        destination=taskRelObject->getAbsCoor()+taskRelPos;
    8184        Vector correction=(destination+randomVector-swarmPosition)-movement;
    8285        correction.y=0;
     
    100103        }
    101104}
    102 
    103 
    104 
    105 void AISwarm::addAI(WorldEntity* npc)
    106 {
    107         std::pair< std::map<WorldEntity*,AIModule*>::iterator , bool > p;
    108         AIModule* newAIModule=new MovementModule(npc);
    109         p=members.insert(std::make_pair(npc,newAIModule));
    110         if(!p.second)delete newAIModule;
    111 }
    112 
    113 
    114 void AISwarm::removeAI(WorldEntity* npc)
    115 {
    116         std::map<WorldEntity*,AIModule*>::iterator it = members.find(npc);
    117         if(it==members.end())return;            //npc not found
    118         delete it->second;                                      //delete AIModule
    119         members.erase(it);                                      //remove AIModule from members
    120 }
    121 
    122 
    123 Vector AISwarm::getPosition()
    124 {
    125         Vector center=Vector(0,0,0);
    126         std::map<WorldEntity*,AIModule*>::iterator it;
    127         for (it= members.begin(); it!= members.end(); it++ )
    128                 center=center+it->second->getPosition();
    129 
    130         return center/members.size();
    131 }
    132 
    133 float AISwarm::getRadius(WorldEntity* object)
    134 {
    135         AABB* aabb = object->getModelAABB();
    136         if( aabb == NULL)return -1;
    137 
    138         float a = aabb->halfLength[0];
    139         float b = aabb->halfLength[1];
    140         float c = aabb->halfLength[2];
    141 
    142         if(a>b){
    143                 return (c>a)?c:a;
    144         }else{
    145                 return (c>b)?c:b;
    146         }
    147 }
Note: See TracChangeset for help on using the changeset viewer.