Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 10349 in orxonox.OLD


Ignore:
Timestamp:
Jan 24, 2007, 6:55:21 PM (17 years ago)
Author:
tfahrni
Message:
 
Location:
branches/ai/src
Files:
14 edited

Legend:

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

    r10266 r10349  
    5050}
    5151
    52 void AIEngine::addAI(int teamNumber, int swarmNumber, WorldEntity* npc)
     52void AIEngine::addAI(int teamNumber, int swarmNumber, WorldEntity* npc, float maxSpeed, float attackDistance)
    5353{
    5454        std::pair<std::map<int,AITeam*>::iterator,bool> p;
     
    5656        p=teams.insert(std::make_pair(teamNumber,newTeam));
    5757        if(!p.second)delete newTeam;
    58         p.first->second->addAI(swarmNumber, npc);
     58        p.first->second->addAI(swarmNumber, npc, maxSpeed, attackDistance);
    5959}
    6060
  • branches/ai/src/ai/ai_engine.h

    r10226 r10349  
    1414
    1515   void tick(float dt);
    16         void addAI(int teamNumber, int swarmNumber, WorldEntity* npc);
     16        void addAI(int teamNumber, int swarmNumber, WorldEntity* npc, float maxSpeed, float attackDistance);
    1717        void removeAI(int teamNumber, int swarmNumber, WorldEntity* npc);
    1818
  • branches/ai/src/ai/ai_module.cc

    r10226 r10349  
    4343        this->target = other->getTarget();
    4444        this->weight = other->getWeight();
    45         this->speedMax = other->getMaxSpeed();
     45        this->maxSpeed = other->getMaxSpeed();
     46        this->attackDistance = other->getAttackDistance();
    4647        this->accelerationMax = other->getMaxAcceleration();
    4748}
  • branches/ai/src/ai/ai_module.h

    r10244 r10349  
    1616        inline void setTarget(WorldEntity* target){this->target=target;}
    1717        inline void setNPC(WorldEntity* npc){this->npc=npc;}
     18        inline void setMaxSpeed(float maxSpeed){this->maxSpeed=maxSpeed;}
     19        inline void setAttackDistance(float attackDistance){this->attackDistance=attackDistance;}
    1820
    1921        inline Vector getPosition(){return npc->getAbsCoor();}
     
    2426        inline float getWeight(){return weight;}
    2527        inline float getMaxAcceleration(){return accelerationMax;}
    26         inline float getMaxSpeed(){return speedMax;}
     28        inline float getMaxSpeed(){return maxSpeed;}
     29        inline float getAttackDistance(){return attackDistance;}
    2730        inline float getNPCRadius(){return getRadius(npc);}
    2831
     
    4649
    4750        float weight;
    48         float speedMax;
     51        float maxSpeed;
     52        float attackDistance;
    4953        float accelerationMax;
    5054};
  • branches/ai/src/ai/ai_team.cc

    r10290 r10349  
    3030
    3131                if(it->second->taskDone()){
    32                         std::cout << "Swarm Task Complete!\n";
     32                        //std::cout << "Swarm Task Complete!\n";
    3333
    3434                        if(enemyList->size()==0){
     
    5151                        //find new Position
    5252                        if(isPlayer){
     53                                float attackDistance=it->second->getAttackDistance();
     54
    5355                                Vector targetPos=target->getAbsCoor();
    5456                                int zNorm=(position.z>targetPos.z)?1:-1;
    5557
    5658                                if((position.z-targetPos.z)*zNorm>60){  //go to start position
    57                                         std::cout << "Go Start Position\n";
     59                                        //std::cout << "Go Start Position\n";
    5860                                        changeSwarmModule(it, new SwarmGoRel);
    5961                                        zNorm=1-(rand()%2)*2;   //1 or -1
    60                                         newPosition=Vector(190,0,zNorm*10);
     62                                        newPosition=Vector(attackDistance+60,0,zNorm*10);
    6163                                        speed=60;
    62                                 }else if(position.x > targetPos.x+160){ //go to attack position
    63                                         std::cout << "Go Attack Position\n";
     64                                }else if(position.x > targetPos.x+attackDistance+40){   //go to attack position
     65                                        //std::cout << "Go Attack Position\n";
    6466                                        changeSwarmModule(it, new SwarmGoRel);
    65                                         newPosition=Vector(130,0,0);
     67                                        newPosition=Vector(attackDistance+30,0,0);
    6668                                        speed=60;
    67                                 }else if(position.x > targetPos.x+120){ //go to attack mode
    68                                         std::cout << "Go Attack Mode\n";
     69                                }else if(position.x > targetPos.x+attackDistance+20){   //go to attack mode
     70                                        //std::cout << "Go Attack Mode\n";
    6971                                        changeSwarmModule(it, new SwarmAttack);
    70                                         newPosition=Vector(110,0,0);
     72                                        newPosition=Vector(attackDistance,0,0);
    7173                                        speed=60;
    7274                                        maxTime=(rand()%11)+4;//4-14 Sekunden
    7375                                }else{                                                                                          //go to fallback point
    74                                         std::cout << "Go  Fallback Point\n";
     76                                        //std::cout << "Go  Fallback Point\n";
    7577                                        changeSwarmModule(it, new SwarmGoRel);
    7678                                        newPosition=Vector(80,0,zNorm*90);
     
    106108
    107109
    108 void AITeam::addAI(int swarmNumber, WorldEntity* npc)
     110void AITeam::addAI(int swarmNumber, WorldEntity* npc, float maxSpeed, float attackDistance)
    109111{
    110112        std::pair<std::map<int,SwarmModule*>::iterator,bool> p;
     
    112114        p=swarms.insert(std::make_pair(swarmNumber,newSwarm));
    113115        if(!p.second)delete newSwarm;
    114         p.first->second->addAI(npc);
     116        p.first->second->addAI(npc, maxSpeed, attackDistance);
    115117}
    116118
  • branches/ai/src/ai/ai_team.h

    r10244 r10349  
    1111        std::vector<WorldEntity*>* getEnemyList();
    1212        void process(float dt);
    13         void addAI(int swarmNumber, WorldEntity* npc);
     13        void addAI(int swarmNumber, WorldEntity* npc, float maxSpeed, float attackDistance);
    1414        void removeAI(int swarmNumber, WorldEntity* npc);
    1515        inline int getTeamSize(){ return swarms.size(); }
  • branches/ai/src/ai/attack_module.cc

    r10283 r10349  
    6262
    6363        weight=1;
    64         speedMax=1000.0f;
    65 
    6664
    6765        //get information about player
     
    7169        float playerRadius=getRadius( pl->getPlayable() );
    7270
    73 
    7471        //get information about myself
    7572        Vector myPosition = npc->getAbsCoor();
    7673        float myRadius = getRadius(npc);
    77 
     74        //float vMax=1000.0f/myRadius;
     75        float vMax=maxSpeed;
     76        float aMax=1000/myRadius;
    7877
    7978        //anti player collision
     
    117116        Vector vectorToDestination=destination-myPosition;
    118117
    119         Vector correction=              playerCollision*50*3
     118        Vector correction=              playerCollision*50*3 *6/myRadius
    120119                                                                +       npcCollision*50*3 *6/myRadius
    121120                                                                +       destinationMovement*2//-movement
     
    135134        //limit speed
    136135        float movementLen=movement.len();
    137         if(movementLen>speedMax)movement=movement/movementLen*speedMax;
     136        if(movementLen>vMax)movement=movement/movementLen*vMax;
    138137
    139138
     
    150149        view = view.cross( Vector(0,1,0) ).getNormalized();
    151150
    152         npc->setAbsDirSoft( Quaternion( view, Vector(0,1,0)),1);
     151        npc->setAbsDirSoft( Quaternion( view, Vector(0,1,0)),8/myRadius);
    153152
    154153
  • branches/ai/src/ai/movement_module.cc

    r10283 r10349  
    5151}
    5252
     53MovementModule::MovementModule(WorldEntity* object)
     54{
     55        this->npc=object;
     56}
    5357
    5458void MovementModule::process(float dt)
     
    7983
    8084        float aMax=maxAccleration;
    81         float vMax=800.0f/myRadius;
    82 
     85        //float vMax=1000.0f/myRadius;
     86        float vMax=maxSpeed;
    8387
    8488        //anti player collision
     
    111115        Vector vectorToDestination=destination-myPosition;
    112116
    113         Vector correction=              playerCollision*50*3
     117        Vector correction=              playerCollision*50*3 *6/myRadius
    114118                                                                +       npcCollision*50*3 *6/myRadius
    115119                                                                +       Vector(0,0,0)
     
    137141        //rotate NPC
    138142        view = movement.cross( Vector(0,1,0) ).getNormalized();
    139         npc->setAbsDirSoft( Quaternion( view, Vector(0,1,0)),3);
     143        npc->setAbsDirSoft( Quaternion( view, Vector(0,1,0)),10/myRadius);
    140144
    141145}
  • branches/ai/src/ai/movement_module.h

    r10226 r10349  
    1414        public:
    1515                MovementModule();
    16                 inline MovementModule(WorldEntity* object){this->npc=object;}
     16                MovementModule(WorldEntity* object);
    1717                virtual ~MovementModule(){}
    1818                virtual void process(float dt);
  • branches/ai/src/ai/swarm_gorel.cc

    r10290 r10349  
    2929        averageRadius=averageRadius/members.size();
    3030        aMax=80;//400/averageRadius;
    31         vMax=80;//300/averageRadius;
     31        vMax=maxSpeed;//1000/averageRadius;//300/averageRadius;
    3232        viewChangeMax=90/averageRadius;
    3333
  • branches/ai/src/ai/swarm_module.cc

    r10249 r10349  
    2424
    2525
    26 void SwarmModule::addAI(WorldEntity* npc)
     26void SwarmModule::addAI(WorldEntity* npc, float maxSpeed, float attackDistance)
    2727{
    2828        std::pair< std::map<WorldEntity*,AIModule*>::iterator , bool > p;
    2929        AIModule* newAIModule=new MovementModule(npc);
     30        newAIModule->setAttackDistance(attackDistance);
     31        newAIModule->setMaxSpeed(maxSpeed);
     32        this->attackDistance=attackDistance;
     33        this->maxSpeed=maxSpeed;
    3034        p=members.insert(std::make_pair(npc,newAIModule));
    3135        if(!p.second)delete newAIModule;
    32        
     36
    3337        this->initialize();
    3438}
     
    4044        delete it->second;                                      //delete AIModule
    4145        members.erase(it);                                      //remove AIModule from members
    42        
     46
    4347        this->initialize();
    4448}
     
    7781        this->enemys=other->getEnemyList();
    7882        this->position=other->getPosition();
    79        
     83        this->maxSpeed=other->getMaxSpeed();
     84        this->attackDistance=other->getAttackDistance();
     85
    8086        this->initialize();
    8187}
  • branches/ai/src/ai/swarm_module.h

    r10249 r10349  
    1010        virtual ~SwarmModule(){}
    1111        virtual void process(float dt){}
    12        
    13         void addAI(WorldEntity*);
     12
     13        void addAI(WorldEntity*, float maxSpeed, float attackDistance);
    1414        void removeAI(WorldEntity*);
    1515        void getAttributesFrom(SwarmModule* oldModule);
    1616        virtual void initialize(){}
    1717        inline bool taskDone(){return taskComplete;}
    18        
    19         inline void setEnemyList(std::vector<WorldEntity*>* enemys){this->enemys=enemys;}       
    20        
     18
     19        inline void setEnemyList(std::vector<WorldEntity*>* enemys){this->enemys=enemys;}
     20
    2121        inline void newOrder(){this->taskComplete=false;}
    2222        inline void orderRelPos(Vector taskRelPos){this->taskRelPos=taskRelPos;}
     
    3434        inline std::vector<WorldEntity*>* getEnemyList(){return enemys;}
    3535        inline std::map<WorldEntity*,AIModule*> getMembers(){return members;}
    36        
     36        inline float getMaxSpeed(){return maxSpeed;}
     37        inline float getAttackDistance(){return attackDistance;}
     38
    3739 protected:
    3840        float getRadius(WorldEntity* object);
     
    4547        bool taskComplete;
    4648        float taskMaxTime;
    47        
     49
    4850        Vector view;
    4951        Vector position;
    5052        float speed;
    51        
    52         std::map<WorldEntity*,AIModule*> members;       
     53
     54        float maxSpeed;
     55        float attackDistance;
     56
     57        std::map<WorldEntity*,AIModule*> members;
    5358        std::vector<WorldEntity*>* enemys;
    5459};
  • branches/ai/src/world_entities/npcs/npc.cc

    r10275 r10349  
    5555  std::cout << "Swarm Number:" << swarmNumber << "\n";
    5656
    57   AIEngine::getInstance()->addAI(teamNumber,swarmNumber,(WorldEntity*)this);
     57  AIEngine::getInstance()->addAI(teamNumber,swarmNumber,(WorldEntity*)this,maxSpeed,attackDistance);
    5858
    5959  this->bFire = false;
     
    132132  LoadParam(root, "swarm", this, NPC, setSwarmNumber)
    133133  .describe("this sets the swarm number")
     134  .defaultValues(0);
     135
     136  LoadParam(root, "maxSpeed", this, NPC, setMaxSpeed)
     137  .describe("this sets the NPC max Speed")
     138  .defaultValues(0);
     139
     140  LoadParam(root, "attackDistance", this, NPC, setAttackDistance)
     141  .describe("this sets the NPC distance to target")
    134142  .defaultValues(0);
    135143}
  • branches/ai/src/world_entities/npcs/npc.h

    r10275 r10349  
    3636  inline void setTeamNumber(int number) { teamNumber=number; }
    3737  inline void setSwarmNumber(int number) { swarmNumber=number; }
    38 
     38  inline void setMaxSpeed(float number) { maxSpeed=number; }
     39  inline void setAttackDistance(float number) { attackDistance=number; }
    3940
    4041 private:
     
    4344  int                   swarmNumber;  //!< number of the swarm
    4445  int                   difficulty;   //!< difficulty
     46  float                                         maxSpeed;
     47  float                                         attackDistance;
    4548
    4649  WeaponManager         weaponMan;    //!< weapon manager
Note: See TracChangeset for help on using the changeset viewer.