Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 10244 in orxonox.OLD for branches/ai


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

tired

Location:
branches/ai/src/ai
Files:
6 added
9 edited

Legend:

Unmodified
Added
Removed
  • branches/ai/src/ai/Makefile.am

    r10226 r10244  
    88                        ai_module.cc \
    99                        ai_team.cc \
    10                         ai_swarm.cc \
    1110                        ai_team_member.cc \
    1211                        movement_module.cc \
    1312                        shooting_module.cc \
    14                         attack_module.cc
     13                        attack_module.cc\
     14                        swarm_module.cc\
     15                        swarm_wait.cc\
     16                        swarm_gorel.cc
    1517
    1618noinst_HEADERS =        \
     
    1820                        ai_module.h \
    1921                        ai_team.h \
    20                         ai_swarm.h \
    2122                        ai_team_member.h \
    2223                        movement_module.h \
    2324                        shooting_module.h \
    24                         attack_module.h
     25                        attack_module.h\
     26                        swarm_module.h\
     27                        swarm_wait.h\
     28                        swarm_gorel.h
  • branches/ai/src/ai/ai_engine.cc

    r10226 r10244  
    3030        for (it=teams.begin(); it!= teams.end(); it++ )
    3131        {
    32                 //find enemys for the team
    33                 for(ObjectList<NPC2>::const_iterator npc = NPC2::objectList().begin(); npc != NPC2::objectList().end(); ++npc)
    34                         if((*npc)->getTeam() != it->first)enemyList->push_back(*npc);
    35 
    3632                //add player to enemys (player belongs to team 0)
    3733                if(it->first!=0){
    38                         //std::cout << "adding player to enemyList\n";
    3934                        Player* pl = State::getPlayer();
    4035                        if(pl != NULL)enemyList->push_back(pl->getPlayable());
    4136                }
     37       
     38                //find other enemys for this team
     39                for(ObjectList<NPC2>::const_iterator npc = NPC2::objectList().begin(); npc != NPC2::objectList().end(); ++npc)
     40                        if((*npc)->getTeam() != it->first)enemyList->push_back(*npc);
    4241
    4342                //process the team
  • branches/ai/src/ai/ai_module.h

    r10226 r10244  
    77class AIModule {
    88 public:
    9         AIModule(){}
     9        inline AIModule(){taskComplete=false;}
    1010   virtual ~AIModule(){}
    1111   virtual void process(float dt){}
     
    2525        inline float getMaxAcceleration(){return accelerationMax;}
    2626        inline float getMaxSpeed(){return speedMax;}
     27        inline float getNPCRadius(){return getRadius(npc);}
     28
     29        inline bool done(){return taskComplete;}
    2730
    2831        void getAttributesFrom(AIModule* oldModule);
     
    3538        Vector destinationView;
    3639
    37 
     40        bool taskComplete;
    3841        Vector movement;
    3942        Vector view;
  • 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 }
  • branches/ai/src/ai/ai_swarm.h

    r10226 r10244  
    55#include "world_entity.h"
    66#include "ai_module.h"
     7#include "swarm_module.h"
    78
    89
    9 
    10 class AISwarm{
     10class AISwarm : public SwarmModule{
    1111        public:
    1212                AISwarm();
    13                 ~AISwarm(){}
    14                 void process(float dt);
    15                 void addAI(WorldEntity*);
    16                 void removeAI(WorldEntity*);
     13                virtual ~AISwarm(){}
     14                virtual void process(float dt);
    1715
    18                 inline int getSwarmSize(){return members.size();}
    1916                inline void setDestination(Vector destination){this->destination=destination;}
    2017                inline void setTarget(WorldEntity* target){this->target=target;}
    21                 Vector getPosition();
    2218
    2319                enum statusType{ATTACKING,MOVING,WAITING};
    2420
    2521        private:
    26                 float getRadius(WorldEntity* object);
    27 
    28 
    2922                Vector destination;
    3023                Vector movement;
    3124                WorldEntity* target;
    3225                statusType status;
    33 
    34                 std::map<WorldEntity*,AIModule*> members;
    3526
    3627                int tickCount;
  • branches/ai/src/ai/ai_team.cc

    r10226 r10244  
    1515#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_AI
    1616#include "ai_team.h"
     17#include "swarm_gorel.h"
     18#include "swarm_module.h"
    1719#include "debug.h"
    1820
    1921void AITeam::process(float dt)
    2022{
    21         std::map<int,AISwarm*>::iterator it;
     23        std::map<int,SwarmModule*>::iterator it;
    2224        for (it= swarms.begin(); it!= swarms.end(); it++ ){
    23                 if(enemyList->size()>0){
    24                         it->second->setTarget(enemyList->at(0));
    25                         it->second->setDestination(enemyList->at(0)->getAbsCoor());
     25       
     26                if(it->second->taskDone()){
     27                        std::cout << "Task Done!\n";
     28                        changeSwarmModule(it, new SwarmGoRel);
     29               
     30                        if(enemyList->size()>0){
     31                                it->second->setEnemyList(enemyList);
     32                                it->second->orderRelObject(enemyList->at(0));
     33                                it->second->orderRelPos(Vector(60,0,0));
     34                                it->second->orderSpeed(50);
     35                                it->second->orderView(Vector(0,0,1));
     36                                it->second->orderMaxTime(5);
     37                        }
    2638                }
    2739                it->second->process(dt);
     
    2941}
    3042
     43void AITeam::changeSwarmModule(std::map<int,SwarmModule*>::iterator it,SwarmModule* newAI)
     44{
     45                        SwarmModule* oldAI = it->second;
     46                        newAI->getAttributesFrom(oldAI);
     47                        it->second=newAI;
     48                        delete oldAI;
     49}
     50
    3151
    3252void AITeam::addAI(int swarmNumber, WorldEntity* npc)
    3353{
    34         std::pair<std::map<int,AISwarm*>::iterator,bool> p;
    35         AISwarm* newSwarm=new AISwarm();
     54        std::pair<std::map<int,SwarmModule*>::iterator,bool> p;
     55        SwarmModule* newSwarm=new SwarmGoRel();
    3656        p=swarms.insert(std::make_pair(swarmNumber,newSwarm));
    3757        if(!p.second)delete newSwarm;
     
    4262void AITeam::removeAI(int swarmNumber, WorldEntity* npc)
    4363{
    44         std::map<int,AISwarm*>::iterator it = swarms.find(swarmNumber);
     64        std::map<int,SwarmModule*>::iterator it = swarms.find(swarmNumber);
    4565        if(it==swarms.end())return;
    4666        it->second->removeAI(npc);
  • branches/ai/src/ai/ai_team.h

    r10226 r10244  
    33#define _AI_TEAM_H
    44
    5 #include "ai_swarm.h"
     5#include "swarm_module.h"
    66
    77class AITeam{
     
    1717 private:
    1818        std::vector<WorldEntity*>* enemyList;
    19         std::map<int,AISwarm*> swarms;
     19        std::map<int,SwarmModule*> swarms;
     20        void changeSwarmModule(std::map<int,SwarmModule*>::iterator it,SwarmModule* newAI);
    2021};
    2122
  • branches/ai/src/ai/attack_module.cc

    r10227 r10244  
    4545{
    4646        tickCount=0;
    47         randomFreq=60;
     47        randomFreq=40;
    4848}
    4949
     
    100100        //random movement
    101101        //randomFreq=testValue2;
    102         if(++tickCount>=randomFreq && movement.len()<60){
     102        if(++tickCount>=randomFreq){
    103103                tickCount=0;
    104104                int x = (rand()%101)-50;                        //-50-50
  • branches/ai/src/ai/movement_module.cc

    r10226 r10244  
    3232float MovementModule::distanceToPlayer=15;
    3333float MovementModule::distanceToNPC=2;
    34 float MovementModule::maxAccleration=300.0f;
     34float MovementModule::maxAccleration=250.0f;
    3535float MovementModule::testValue=2;
    3636float MovementModule::testValue2=40;
Note: See TracChangeset for help on using the changeset viewer.