Changeset 10135 in orxonox.OLD for branches/ai/src/ai/movement_module.cc
- Timestamp:
- Dec 20, 2006, 7:47:45 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ai/src/ai/movement_module.cc
r10112 r10135 25 25 26 26 #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 // 64 64 MovementModule::MovementModule(NPC2* object){ this->myNPC=object; } 65 65 MovementModule::~MovementModule(){} … … 72 72 AABB* aabb = object->getModelAABB(); 73 73 if( aabb == NULL)return -1; 74 74 75 75 float a = aabb->halfLength[0]; 76 76 float b = aabb->halfLength[1]; … … 87 87 88 88 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 151 void MovementModule::process(float dt) 90 152 { 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 137 155 //get information about Player 138 156 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 175 165 Vector myPosition = myNPC->getAbsCoor(); 176 166 float myRadius = getRadius(myNPC); 177 int mySwarm = myNPC->swarm; 178 int myTeam = myNPC->team; 179 167 168 180 169 Vector vectorToPlayer = playerPosition - myPosition; 181 170 182 171 Vector tmpVector; 183 172 float tmpFloat; 184 185 Vector npcCollision;186 Vector swarmVector;173 174 // Vector npcCollision; 175 // Vector swarmVector; 187 176 Vector playerCollision; 188 177 189 178 190 179 191 180 //float a=200.0f; 192 181 float vMax=200.0f; 182 float maxAccleration=300.0f; 193 183 //float safetyDistance=2.0f; 194 184 195 185 196 186 //Anti Player Collision 197 tmpFloat=vectorToPlayer.len()-playerRadius-myRadius- distanceToPlayer;187 tmpFloat=vectorToPlayer.len()-playerRadius-myRadius-30;//distanceToPlayer; 198 188 if(tmpFloat<0.1)tmpFloat=0.1; 199 189 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 228 220 correction.y=0; 229 221 float correctionLen=correction.len();
Note: See TracChangeset
for help on using the changeset viewer.