Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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


Ignore:
Timestamp:
Dec 21, 2006, 10:14:15 PM (19 years ago)
Author:
tfahrni
Message:

startet to implement swarming

File:
1 edited

Legend:

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

    r10135 r10138  
    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 //
     27SHELL_COMMAND(setDistanceToPlayer, MovementModule, setDistanceToPlayer);
     28SHELL_COMMAND(setDistanceToNPC, MovementModule, setDistanceToNPC);
     29SHELL_COMMAND(setMaxAccleartion, MovementModule, setMaxAccleartion);
     30
     31float MovementModule::distanceToPlayer=15;
     32float MovementModule::distanceToNPC=2;
     33float MovementModule::maxAccleration=200.0f;
     34
     35void MovementModule::setDistanceToPlayer(float newValue){ distanceToPlayer=newValue; }
     36void MovementModule::setDistanceToNPC(float newValue){ distanceToNPC=newValue; }
     37void MovementModule::setMaxAccleartion(float newValue){ maxAccleration=newValue; }
     38
     39
     40
     41
     42
     43
    4444// std::vector<Vector>  MovementModule::hidingPoint;
    4545// std::vector<float>   MovementModule::hidingPointSize;
     
    6262//
    6363//
    64 MovementModule::MovementModule(NPC2* object){ this->myNPC=object; }
    65 MovementModule::~MovementModule(){}
    66 
    6764
    6865
     
    156153        Player* pl = State::getPlayer();
    157154        if( pl == NULL)return;
    158 
    159155        Vector playerPosition = pl->getPlayable()->getAbsCoor();
    160156        float playerRadius=getRadius( pl->getPlayable() );
    161 
    162 
    163 // collectInformation(dt);
    164 
     157       
     158
     159        //get information about myself
    165160        Vector myPosition = myNPC->getAbsCoor();
    166161        float myRadius = getRadius(myNPC);
     
    171166        Vector tmpVector;
    172167        float tmpFloat;
    173 
    174 //      Vector npcCollision;
    175 //      Vector swarmVector;
     168       
     169        Vector npcCollision;
    176170        Vector playerCollision;
    177171
     
    180174        //float a=200.0f;
    181175        float vMax=200.0f;
    182         float maxAccleration=300.0f;
     176        //float maxAccleration=300.0f;
    183177        //float safetyDistance=2.0f;
    184178
    185179
    186180        //Anti Player Collision
    187         tmpFloat=vectorToPlayer.len()-playerRadius-myRadius-30;//distanceToPlayer;
     181        tmpFloat=vectorToPlayer.len()-playerRadius-myRadius-distanceToPlayer;
    188182        if(tmpFloat<0.1)tmpFloat=0.1;
    189183        playerCollision=vectorToPlayer/(tmpFloat*tmpFloat)*(-1);
    190184
    191185
    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;
     186        //Anti NPC Collision
     187        for(ObjectList<WorldEntity>::const_iterator it = WorldEntity::objectList().begin(); it != WorldEntity::objectList().end(); ++it)
     188        {
     189                if(*it==myNPC)continue;
     190
     191                tmpVector=myPosition-(*it)->getAbsCoor();
     192                tmpFloat=tmpVector.len()-myRadius-distanceToNPC-getRadius(*it);
     193
     194                if(tmpFloat<0.1)tmpFloat=0.1;
     195                tmpVector=tmpVector/(tmpFloat*tmpFloat);
     196
     197                npcCollision=npcCollision+tmpVector;
     198        }
     199
     200
     201
     202        Vector vectorToDestination=destination-myPosition;
     203
     204        Vector correction=playerCollision*50+npcCollision*50+vectorToDestination+Vector(0,0,0)-myMovement;
    219205
    220206        correction.y=0;
     
    234220        //      view = v.cross( Vector(0,1,0) ).getNormalized();
    235221        //}else{
    236         view = myMovement.cross( Vector(0,-1,0) ).getNormalized();
     222        view = myMovement.cross( Vector(0,1,0) ).getNormalized();
    237223        //}
    238224        //if(dist<keepDist)view=view*-1;
Note: See TracChangeset for help on using the changeset viewer.