Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 10135 in orxonox.OLD for branches/ai/src/ai/movement_module.cc


Ignore:
Timestamp:
Dec 20, 2006, 7:47:45 PM (17 years ago)
Author:
tfahrni
Message:
 
File:
1 edited

Legend:

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

    r10112 r10135  
    2525
    2626#include "shell_command.h"
    27 SHELL_COMMAND(setDistanceToPlayer, MovementModule, setDistanceToPlayer);
    28 SHELL_COMMAND(setDistanceToNPC, MovementModule, setDistanceToNPC);
    29 SHELL_COMMAND(setMaxAccleartion, MovementModule, setMaxAccleartion);
    30 
    31 float MovementModule::distanceToPlayer=15;
    32 float MovementModule::distanceToNPC=2;
    33 float MovementModule::maxAccleration=200.0f;
    34 
    35 void MovementModule::setDistanceToPlayer(float newValue){ distanceToPlayer=newValue; }
    36 void MovementModule::setDistanceToNPC(float newValue){ distanceToNPC=newValue; }
    37 void MovementModule::setMaxAccleartion(float newValue){ maxAccleration=newValue; }
    38 
    39 
    40 
    41 
    42 
    43 
    44 std::vector<Vector>     MovementModule::hidingPoint;
    45 std::vector<float>      MovementModule::hidingPointSize;
    46 
    47 std::vector<NPC2*> MovementModule::npcList;
    48 std::vector<Vector> MovementModule::npcPosition;
    49 std::vector<float> MovementModule::npcRadius;
    50 std::vector<int> MovementModule::npcSwarm;
    51 std::vector<int> MovementModule::npcTeam;
    52 
    53 Vector MovementModule::playerPosition;
    54 Vector MovementModule::playerMovement;
    55 float MovementModule::playerRadius;
    56 
    57 std::vector<Vector> MovementModule::swarmCenter;
    58 std::vector<int> MovementModule::swarmMemberCount;
    59 
    60 
    61 
    62 
    63 
     27// SHELL_COMMAND(setDistanceToPlayer, MovementModule, setDistanceToPlayer);
     28// SHELL_COMMAND(setDistanceToNPC, MovementModule, setDistanceToNPC);
     29// SHELL_COMMAND(setMaxAccleartion, MovementModule, setMaxAccleartion);
     30//
     31// float MovementModule::distanceToPlayer=15;
     32// float MovementModule::distanceToNPC=2;
     33// float MovementModule::maxAccleration=200.0f;
     34//
     35// void MovementModule::setDistanceToPlayer(float newValue){ distanceToPlayer=newValue; }
     36// void MovementModule::setDistanceToNPC(float newValue){ distanceToNPC=newValue; }
     37// void MovementModule::setMaxAccleartion(float newValue){ maxAccleration=newValue; }
     38//
     39//
     40//
     41//
     42//
     43//
     44// std::vector<Vector>  MovementModule::hidingPoint;
     45// std::vector<float>   MovementModule::hidingPointSize;
     46//
     47// std::vector<NPC2*> MovementModule::npcList;
     48// std::vector<Vector> MovementModule::npcPosition;
     49// std::vector<float> MovementModule::npcRadius;
     50// std::vector<int> MovementModule::npcSwarm;
     51// std::vector<int> MovementModule::npcTeam;
     52//
     53// Vector MovementModule::playerPosition;
     54// Vector MovementModule::playerMovement;
     55// float MovementModule::playerRadius;
     56//
     57// std::vector<Vector> MovementModule::swarmCenter;
     58// std::vector<int> MovementModule::swarmMemberCount;
     59//
     60//
     61//
     62//
     63//
    6464MovementModule::MovementModule(NPC2* object){ this->myNPC=object; }
    6565MovementModule::~MovementModule(){}
     
    7272        AABB* aabb = object->getModelAABB();
    7373        if( aabb == NULL)return -1;
    74        
     74
    7575        float a = aabb->halfLength[0];
    7676        float b = aabb->halfLength[1];
     
    8787
    8888
    89 void MovementModule::collectInformation(float dt)
     89// void MovementModule::collectInformation(float dt)
     90// {
     91//      //return if already processed..
     92//      if(dt==this->oldDT)return;
     93//      this->oldDT=dt;
     94//
     95//
     96//      //clear old Information..
     97//      hidingPoint.clear();
     98//      hidingPointSize.clear();
     99//
     100//      npcList.clear();
     101//      npcPosition.clear();
     102//      npcRadius.clear();
     103//      npcSwarm.clear();
     104//      npcTeam.clear();
     105//
     106//      swarmCenter.clear();
     107//      swarmMemberCount.clear();
     108//
     109//
     110//      //get all NPCs..
     111//      for(ObjectList<NPC2>::const_iterator it = NPC2::objectList().begin(); it != NPC2::objectList().end(); ++it)
     112//      {
     113//              npcList.push_back(*it);
     114//              npcRadius.push_back(getRadius(*it));
     115//              npcPosition.push_back((*it)->getAbsCoor());
     116//              npcSwarm.push_back((*it)->swarm);
     117//              npcTeam.push_back((*it)->team);
     118//      }
     119//
     120//
     121//      //Swarm Information
     122//      unsigned int tmpSwarm;
     123//      for(unsigned int i=0;i<npcList.size();i++){
     124//              tmpSwarm = npcSwarm.at(i);
     125//              if(tmpSwarm > swarmMemberCount.size()){
     126//                      //swarmMemberCount.insert(swarmMemberCount.size(), tmpSwarm - swarmMemberCount.size(), 0);
     127//                      //swarmCenter.insert(swarmCenter.size(), tmpSwarm - swarmCenter.size(), Vector(0,0,0));
     128//              }
     129//              //swarmMemberCount.at(tmpSwarm)++;
     130//              //swarmCenter.at(tmpSwarm)=swarmCenter.at(tmpSwarm)+npcPosition.at(i);
     131//      }
     132//      for(unsigned int i=0;i<swarmCenter.size();i++){
     133//              //swarmCenter.at(i)=swarmCenter.at(i)/swarmMemberCount.at(i);
     134//      }
     135//
     136//
     137//      //get information about Player
     138//      Player* pl = State::getPlayer();
     139//      if( pl != NULL){
     140//              playerPosition = pl->getPlayable()->getAbsCoor();
     141//              playerRadius=getRadius( pl->getPlayable() );
     142//              //PRINTF(0)("Player Radius: %f\n",playerRadius);
     143//      }
     144//
     145//
     146//      //calculate hiding Points..
     147//
     148// }
     149
     150
     151void MovementModule::process(float dt)
    90152{
    91         //return if already processed..
    92         if(dt==this->oldDT)return;
    93         this->oldDT=dt;
    94        
    95        
    96         //clear old Information..
    97         hidingPoint.clear();
    98         hidingPointSize.clear();
    99 
    100         npcList.clear();
    101         npcPosition.clear();
    102         npcRadius.clear();
    103         npcSwarm.clear();
    104         npcTeam.clear();
    105        
    106         swarmCenter.clear();
    107         swarmMemberCount.clear();
    108        
    109        
    110         //get all NPCs..
    111         for(ObjectList<NPC2>::const_iterator it = NPC2::objectList().begin(); it != NPC2::objectList().end(); ++it)
    112         {
    113                 npcList.push_back(*it);
    114                 npcRadius.push_back(getRadius(*it));
    115                 npcPosition.push_back((*it)->getAbsCoor());
    116                 npcSwarm.push_back((*it)->swarm);
    117                 npcTeam.push_back((*it)->team);
    118         }
    119        
    120        
    121         //Swarm Information
    122         unsigned int tmpSwarm;
    123         for(unsigned int i=0;i<npcList.size();i++){
    124                 tmpSwarm = npcSwarm.at(i);
    125                 if(tmpSwarm > swarmMemberCount.size()){
    126                         //swarmMemberCount.insert(swarmMemberCount.size(), tmpSwarm - swarmMemberCount.size(), 0);
    127                         //swarmCenter.insert(swarmCenter.size(), tmpSwarm - swarmCenter.size(), Vector(0,0,0));
    128                 }
    129                 //swarmMemberCount.at(tmpSwarm)++;
    130                 //swarmCenter.at(tmpSwarm)=swarmCenter.at(tmpSwarm)+npcPosition.at(i);
    131         }
    132         for(unsigned int i=0;i<swarmCenter.size();i++){
    133                 //swarmCenter.at(i)=swarmCenter.at(i)/swarmMemberCount.at(i);
    134         }
    135        
    136        
     153        if(myNPC == NULL)return;
     154
    137155        //get information about Player
    138156        Player* pl = State::getPlayer();
    139         if( pl != NULL){
    140                 playerPosition = pl->getPlayable()->getAbsCoor();
    141                 playerRadius=getRadius( pl->getPlayable() );
    142                 //PRINTF(0)("Player Radius: %f\n",playerRadius);
    143         }
    144        
    145        
    146         //calculate hiding Points..
    147        
    148 }
    149 
    150 
    151 
    152 
    153 
    154 
    155 
    156 
    157 
    158 
    159 
    160 
    161 
    162 
    163 void MovementModule::process()
    164 {
    165         this->process(AIEngine::getInstance()->dtS);
    166 }
    167 
    168 
    169 void MovementModule::process(float dt)
    170 {
    171         collectInformation(dt);
    172        
    173         if(myNPC == NULL)return;
    174        
     157        if( pl == NULL)return;
     158
     159        Vector playerPosition = pl->getPlayable()->getAbsCoor();
     160        float playerRadius=getRadius( pl->getPlayable() );
     161
     162
     163// collectInformation(dt);
     164
    175165        Vector myPosition = myNPC->getAbsCoor();
    176166        float myRadius = getRadius(myNPC);
    177         int mySwarm = myNPC->swarm;
    178         int myTeam = myNPC->team;
    179        
     167
     168
    180169        Vector vectorToPlayer = playerPosition - myPosition;
    181        
     170
    182171        Vector tmpVector;
    183172        float tmpFloat;
    184        
    185         Vector npcCollision;
    186         Vector swarmVector;
     173
     174//      Vector npcCollision;
     175//      Vector swarmVector;
    187176        Vector playerCollision;
    188        
     177
    189178
    190179
    191180        //float a=200.0f;
    192181        float vMax=200.0f;
     182        float maxAccleration=300.0f;
    193183        //float safetyDistance=2.0f;
    194184
    195185
    196186        //Anti Player Collision
    197         tmpFloat=vectorToPlayer.len()-playerRadius-myRadius-distanceToPlayer;
     187        tmpFloat=vectorToPlayer.len()-playerRadius-myRadius-30;//distanceToPlayer;
    198188        if(tmpFloat<0.1)tmpFloat=0.1;
    199189        playerCollision=vectorToPlayer/(tmpFloat*tmpFloat)*(-1);
    200        
    201        
    202        
    203         for (unsigned int i=0;i<npcList.size();i++)
    204         {
    205                 if(npcList.at(i)==myNPC)continue;
    206                
    207                 //Anti NPC Collision
    208                 tmpVector=myPosition-npcPosition.at(i);
    209                 tmpFloat=tmpVector.len()-myRadius-npcRadius.at(i)-distanceToNPC;
    210                
    211                 if(tmpFloat<0.1)tmpFloat=0.1;
    212                 tmpVector=tmpVector/(tmpFloat*tmpFloat);
    213                
    214                 npcCollision=npcCollision+tmpVector;
    215                
    216                 //Schwarmverhalten
    217                 if(npcSwarm.at(i) == mySwarm){
    218                
    219                
    220                 }
    221         }
    222 
    223 
    224 
    225        
    226        
    227         Vector correction=playerCollision*50+npcCollision*50+vectorToPlayer-myMovement;
     190
     191
     192
     193//      for (unsigned int i=0;i<npcList.size();i++)
     194//      {
     195//              if(npcList.at(i)==myNPC)continue;
     196//
     197//              //Anti NPC Collision
     198//              tmpVector=myPosition-npcPosition.at(i);
     199//              tmpFloat=tmpVector.len()-myRadius-npcRadius.at(i)-distanceToNPC;
     200//
     201//              if(tmpFloat<0.1)tmpFloat=0.1;
     202//              tmpVector=tmpVector/(tmpFloat*tmpFloat);
     203//
     204//              npcCollision=npcCollision+tmpVector;
     205//
     206//              //Schwarmverhalten
     207//              if(npcSwarm.at(i) == mySwarm){
     208//
     209//
     210//              }
     211//      }
     212
     213
     214
     215
     216
     217        //Vector correction=playerCollision*50+npcCollision*50+vectorToPlayer+Vector(70,0,0)-myMovement;
     218        Vector correction=playerCollision*50+vectorToPlayer+Vector(50,0,0)-myMovement;
     219
    228220        correction.y=0;
    229221        float correctionLen=correction.len();
Note: See TracChangeset for help on using the changeset viewer.