Changeset 426
- Timestamp:
- Dec 5, 2007, 10:08:12 PM (17 years ago)
- Location:
- code/branches/AI/src
- Files:
-
- 2 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/AI/src/Flocking.h
r326 r426 13 13 #include <Ogre.h> 14 14 #include <OgreVector3.h> 15 15 16 16 17 #include <iostream> … … 29 30 Vector3 speed; // speedvector of the element 30 31 Vector3 acceleration; // accelerationvector of the element 32 bool movable; // movability of the element 31 33 32 34 Element() { … … 34 36 speed = (0,0,0); 35 37 location = (0,0,0); 38 movable = true; 36 39 } 37 40 38 Element(Vector3 location_, Vector3 speed_, Vector3 acceleration_ ) {41 Element(Vector3 location_, Vector3 speed_, Vector3 acceleration_, bool movable_) { 39 42 acceleration = acceleration_; 40 43 speed = speed_; 41 44 location = location_; 45 movable = movable_; 42 46 } 43 47 44 void setValues(Vector3 location_, Vector3 speed_, Vector3 acceleration_ ) {48 void setValues(Vector3 location_, Vector3 speed_, Vector3 acceleration_, bool movable_) { 45 49 acceleration = acceleration_; 46 50 speed = speed_; 47 51 location = location_; 52 movable = movable_; 48 53 } 49 54 … … 54 59 } 55 60 56 //EINF [GEN DES ELEMENTS61 //EINFÜGEN DES ELEMENTS 57 62 void update(Element arrayOfElements[], const FrameEvent& time) { 58 calculateAcceleration(arrayOfElements); //updates the acceleration 59 calculateSpeed(time); //updates the speed 60 calculateLocation(time); //updates the location 63 if (this->movable == true) {calculateAcceleration(arrayOfElements);} 64 65 /* if (this->movable == true) { 66 calculateAcceleration(arrayOfElements); //updates the acceleration 67 calculateSpeed(time); //updates the speed 68 calculateLocation(time); //updates the location 69 } */ 61 70 } 62 71 63 //EINF [GEN DES ELEMENTS72 //EINFÜGEN DES ELEMENTS 64 73 void calculateAcceleration(Element arrayOfElements[]) { 65 74 //calculates the accelerationvector based on the steeringvectors of … … 79 88 Vector3 separation(Element arrayOfElements[]) { 80 89 Vector3* steering = new Vector3(0,0,0); //steeringvector 90 Vector3* inverseDistance = new Vector3(0,0,0); 81 91 int numberOfNeighbour = 0; //number of observed neighbours 92 float distance = 0; 82 93 //go through all elements 83 for(int i=0; i< 3; i++) { //just working with 3 elements at the moment94 for(int i=0; i<9; i++) { //just working with 3 elements at the moment 84 95 Element actual = arrayOfElements[i]; //get the actual element 85 floatdistance = getDistance(actual); //get distance between this and actual96 distance = getDistance(actual); //get distance between this and actual 86 97 //DUMMY SEPERATION DETECTION DISTANCE =100 87 if ((distance > 0) && (distance<100)) { //do only if actual is inside detectionradius 88 Vector3 inverseDistance = actual.location-location; //calculate the distancevector heading towards this 89 inverseDistance = inverseDistance.normalise(); //does this work correctly? //normalise the distancevector 90 inverseDistance = inverseDistance/*/distance*/; //devide distancevector by distance (the closer the bigger gets the distancevector -> steeringvector) 91 *steering = *steering + inverseDistance; //add up all significant steeringvectors 98 if ((distance > 0) && (distance < 200)) { //do only if actual is inside detectionradius 99 *inverseDistance = (0,0,0); 100 *inverseDistance = location-actual.location; //calculate the distancevector heading towards this 101 //*inverseDistance = inverseDistance->normalise(); //does this work correctly? //normalise the distancevector 102 if ((distance < 100) && (distance >= 80)) {*inverseDistance = *inverseDistance*2;} 103 if ((distance < 80) && (distance >= 60)) {*inverseDistance = *inverseDistance*5;} 104 if ((distance < 60) && (distance >= 40)) {*inverseDistance = *inverseDistance*10;} 105 if ((distance < 40) && (distance > 0)) {*inverseDistance = *inverseDistance*20;} 106 // *inverseDistance = *inverseDistance/distance; //devide distancevector by distance (the closer the bigger gets the distancevector -> steeringvector) 107 *steering = *steering + *inverseDistance; //add up all significant steeringvectors 92 108 numberOfNeighbour++; //counts the elements inside the detectionradius 93 109 } … … 96 112 *steering = *steering / (float)numberOfNeighbour; //devide the sum of steeringvectors by the number of elements -> separation steeringvector 97 113 } 114 cout<<*steering<<endl; 98 115 return *steering; 99 116 } … … 102 119 Vector3* steering = new Vector3(0,0,0); //steeringvector 103 120 int numberOfNeighbour = 0; //number of observed neighbours 121 float distance = 0; 104 122 //go through all elements 105 for(int i=0; i< 3; i++) { //just working with 3 elements at the moment123 for(int i=0; i<9; i++) { //just working with 3 elements at the moment 106 124 Element actual = arrayOfElements[i]; //get the actual element 107 125 float distance = getDistance(actual); //get distance between this and actual 108 126 //DUMMY ALIGNMENT DETECTION DISTANCE = 1000 109 if ((distance > 0) && (distance <1000)) { //check if actual element is inside detectionradius127 if ((distance > 0) && (distance < 300)) { //check if actual element is inside detectionradius 110 128 *steering = *steering + actual.speed; //add up all speedvectors inside the detectionradius 111 129 numberOfNeighbour++; //counts the elements inside the detectionradius … … 121 139 Vector3* steering = new Vector3(0,0,0); //steeringvector 122 140 int numberOfNeighbour = 0; //number of observed neighbours 141 float distance = 0; 123 142 //go through all elements 124 for(int i=0; i< 3; i++) { //just working with 3 elements at the moment143 for(int i=0; i<9; i++) { //just working with 3 elements at the moment 125 144 Element actual = arrayOfElements[i]; //get the actual element 126 145 float distance = getDistance(actual); //get distance between this and actual 127 146 // DUMMY COHESION DETECTION DISTANCE = 1000 128 if ((distance > 0) && (distance <1000)) { //check if actual element is inside detectionradius147 if ((distance > 0) && (distance < 5000)) { //check if actual element is inside detectionradius 129 148 *steering = *steering + actual.location; //add up all locations of elements inside the detectionradius 130 149 numberOfNeighbour++; //counts the elements inside the detectionradius … … 133 152 if(numberOfNeighbour > 0) { 134 153 *steering = *steering / (float)numberOfNeighbour; //devide the sum steeringvector by the number of elements -> cohesion steeringvector 154 *steering = *steering - this->location; // (?) Koordinatensystem? 135 155 } 136 156 return *steering; 137 157 } 138 139 158 }; 140 159 -
code/branches/AI/src/orxonox.cc
r325 r426 35 35 #include <CEGUI/CEGUI.h> 36 36 #include <OgreCEGUIRenderer.h> 37 #include <OgreMath.h> 37 38 38 39 #include <string> … … 42 43 #include "loader/LevelLoader.h" 43 44 #include "Flocking.h" 45 #include "AIClass.h" 44 46 45 47 // some tests to see if enet works without includsion … … 78 80 //my-stuff 79 81 //globale definition eines Arrays welches alle nodes enthält 80 Vector3 ElementLocationArray[3]; 81 Vector3 ElementSpeedArray[3]; 82 Vector3 ElementAccelerationArray[3]; 83 84 Element arrayOfElements[3]; 82 Vector3 ElementLocationArray[9]; 83 Vector3 ElementSpeedArray[9]; 84 Vector3 ElementAccelerationArray[9]; 85 86 Element arrayOfElements[9]; 87 88 // float time = 0; 85 89 86 90 … … 105 109 SceneManager *mgr = root_->getSceneManager("Default SceneManager"); 106 110 107 108 109 111 arrayOfElements[0].update(arrayOfElements, evt); 110 112 arrayOfElements[1].update(arrayOfElements, evt); 111 113 arrayOfElements[2].update(arrayOfElements, evt); 114 arrayOfElements[3].update(arrayOfElements, evt); 115 arrayOfElements[4].update(arrayOfElements, evt); 116 arrayOfElements[5].update(arrayOfElements, evt); 117 arrayOfElements[6].update(arrayOfElements, evt); 118 arrayOfElements[7].update(arrayOfElements, evt); 119 arrayOfElements[8].update(arrayOfElements, evt); 120 121 /* arrayOfElements[0].update(arrayOfElements, evt); 122 arrayOfElements[1].update(arrayOfElements, evt); 123 arrayOfElements[2].update(arrayOfElements, evt); 124 arrayOfElements[3].update(arrayOfElements, evt); 125 arrayOfElements[4].update(arrayOfElements, evt); */ 126 127 128 for(int i=0; i<9; i++) { 129 130 arrayOfElements[i].speed = 0.995*arrayOfElements[i].speed + arrayOfElements[i].acceleration*evt.timeSinceLastFrame; 131 132 arrayOfElements[i].location = arrayOfElements[i].location + arrayOfElements[i].speed*evt.timeSinceLastFrame; 133 134 arrayOfElements[i].acceleration = (0,0,0); 135 } 112 136 113 137 mgr->getSceneNode("HeadNode1")->setPosition(arrayOfElements[0].location); 114 138 mgr->getSceneNode("HeadNode2")->setPosition(arrayOfElements[1].location); 115 139 mgr->getSceneNode("HeadNode3")->setPosition(arrayOfElements[2].location); 140 mgr->getSceneNode("HeadNode4")->setPosition(arrayOfElements[3].location); 141 mgr->getSceneNode("HeadNode5")->setPosition(arrayOfElements[4].location); 142 mgr->getSceneNode("HeadNode6")->setPosition(arrayOfElements[5].location); 143 mgr->getSceneNode("HeadNode7")->setPosition(arrayOfElements[6].location); 144 mgr->getSceneNode("HeadNode8")->setPosition(arrayOfElements[7].location); 145 mgr->getSceneNode("HeadNode9")->setPosition(arrayOfElements[8].location); 146 147 148 /* 149 150 mgr->getSceneNode("HeadNode9")->setPosition(Vector3(200*cos(10*time),0,0)); 151 time = time + evt.timeSinceLastFrame; 152 153 */ 116 154 117 155 … … 292 330 Entity* ent2 = mgr->createEntity("Head2", "ogrehead.mesh"); 293 331 Entity* ent3 = mgr->createEntity("Head3", "ogrehead.mesh"); 294 SceneNode *node1 = mgr->getRootSceneNode()->createChildSceneNode("HeadNode1", Vector3(0,100,0)); 295 SceneNode *node2 = mgr->getRootSceneNode()->createChildSceneNode("HeadNode2", Vector3(100,0,0)); 296 SceneNode *node3 = mgr->getRootSceneNode()->createChildSceneNode("HeadNode3", Vector3(-100,0,0)); 332 Entity* ent4 = mgr->createEntity("Head4", "ogrehead.mesh"); 333 Entity* ent5 = mgr->createEntity("Head5", "ogrehead.mesh"); 334 Entity* ent6 = mgr->createEntity("Head6", "ogrehead.mesh"); 335 Entity* ent7 = mgr->createEntity("Head7", "ogrehead.mesh"); 336 Entity* ent8 = mgr->createEntity("Head8", "ogrehead.mesh"); 337 Entity* ent9 = mgr->createEntity("Head9", "ogrehead.mesh"); 338 SceneNode *node1 = mgr->getRootSceneNode()->createChildSceneNode("HeadNode1", Vector3(100,300,100)); 339 SceneNode *node2 = mgr->getRootSceneNode()->createChildSceneNode("HeadNode2", Vector3(300,0,200)); 340 SceneNode *node3 = mgr->getRootSceneNode()->createChildSceneNode("HeadNode3", Vector3(-300,0,-100)); 341 SceneNode *node4 = mgr->getRootSceneNode()->createChildSceneNode("HeadNode4", Vector3(-100,-300,150)); 342 SceneNode *node5 = mgr->getRootSceneNode()->createChildSceneNode("HeadNode5", Vector3(150,150,-100)); 343 SceneNode *node6 = mgr->getRootSceneNode()->createChildSceneNode("HeadNode6", Vector3(150,-150,-100)); 344 SceneNode *node7 = mgr->getRootSceneNode()->createChildSceneNode("HeadNode7", Vector3(-150,-150,0)); 345 SceneNode *node8 = mgr->getRootSceneNode()->createChildSceneNode("HeadNode8", Vector3(-150,150,0)); 346 SceneNode *node9 = mgr->getRootSceneNode()->createChildSceneNode("HeadNode9", Vector3(0,0,0)); 347 348 // follwing camera 349 350 // Camera *cam = mgr->getCamera("Camera"); 351 // node1->attachObject(cam); 352 353 354 355 297 356 node1->attachObject(ent1); 298 357 node2->attachObject(ent2); 299 358 node3->attachObject(ent3); 359 node4->attachObject(ent4); 360 node5->attachObject(ent5); 361 node6->attachObject(ent6); 362 node7->attachObject(ent7); 363 node8->attachObject(ent8); 364 node9->attachObject(ent9); 300 365 ElementLocationArray[0] = node1->getPosition(); 301 366 ElementLocationArray[1] = node2->getPosition(); 302 367 ElementLocationArray[2] = node3->getPosition(); 368 ElementLocationArray[3] = node4->getPosition(); 369 ElementLocationArray[4] = node5->getPosition(); 370 ElementLocationArray[5] = node6->getPosition(); 371 ElementLocationArray[6] = node7->getPosition(); 372 ElementLocationArray[7] = node8->getPosition(); 373 ElementLocationArray[8] = node9->getPosition(); 374 /* 375 ElementLocationArray[5] = node6->getPosition(); 376 ElementLocationArray[6] = node7->getPosition();*/ 303 377 ElementSpeedArray[0] = (0,0,0); 304 378 ElementSpeedArray[1] = (0,0,0); 305 379 ElementSpeedArray[2] = (0,0,0); 380 ElementSpeedArray[3] = (0,0,0); 381 ElementSpeedArray[4] = (0,0,0); 382 ElementSpeedArray[5] = (0,0,0); 383 ElementSpeedArray[6] = (0,0,0); 384 ElementSpeedArray[7] = (0,0,0); 385 ElementSpeedArray[8] = (0,0,0); 386 /* 387 ElementSpeedArray[5] = (0,0,0); 388 ElementSpeedArray[6] = (0,0,0); */ 306 389 ElementAccelerationArray[0] = (0,0,0); 307 390 ElementAccelerationArray[1] = (0,0,0); 308 391 ElementAccelerationArray[2] = (0,0,0); 309 arrayOfElements[0].setValues( ElementLocationArray[0], ElementSpeedArray[0], ElementAccelerationArray[0] ); 310 arrayOfElements[1].setValues( ElementLocationArray[1], ElementSpeedArray[1], ElementAccelerationArray[1] ); 311 arrayOfElements[2].setValues( ElementLocationArray[2], ElementSpeedArray[2], ElementAccelerationArray[2] ); 392 ElementAccelerationArray[3] = (0,0,0); 393 ElementAccelerationArray[4] = (0,0,0); 394 ElementAccelerationArray[5] = (0,0,0); 395 ElementAccelerationArray[6] = (0,0,0); 396 ElementAccelerationArray[7] = (0,0,0); 397 ElementAccelerationArray[8] = (0,0,0); 398 /* 399 ElementAccelerationArray[5] = (0,0,0); 400 ElementAccelerationArray[6] = (0,0,0); */ 401 arrayOfElements[0].setValues( ElementLocationArray[0], ElementSpeedArray[0], ElementAccelerationArray[0], true); 402 arrayOfElements[1].setValues( ElementLocationArray[1], ElementSpeedArray[1], ElementAccelerationArray[1], true); 403 arrayOfElements[2].setValues( ElementLocationArray[2], ElementSpeedArray[2], ElementAccelerationArray[2], true); 404 arrayOfElements[3].setValues( ElementLocationArray[3], ElementSpeedArray[3], ElementAccelerationArray[3], true); 405 arrayOfElements[4].setValues( ElementLocationArray[4], ElementSpeedArray[4], ElementAccelerationArray[4], true); 406 arrayOfElements[5].setValues( ElementLocationArray[5], ElementSpeedArray[5], ElementAccelerationArray[5], true); 407 arrayOfElements[6].setValues( ElementLocationArray[6], ElementSpeedArray[6], ElementAccelerationArray[6], true); 408 arrayOfElements[7].setValues( ElementLocationArray[7], ElementSpeedArray[7], ElementAccelerationArray[7], true); 409 arrayOfElements[8].setValues( ElementLocationArray[8], ElementSpeedArray[8], ElementAccelerationArray[8], false); 410 /* 411 arrayOfElements[5].setValues( ElementLocationArray[5], ElementSpeedArray[5], ElementAccelerationArray[5], false); 412 arrayOfElements[6].setValues( ElementLocationArray[6], ElementSpeedArray[6], ElementAccelerationArray[6], false);*/ 312 413 313 414 … … 320 421 arrayOfElements[i]->update(arrayOfElements); 321 422 } */ 423 424 //testing AIPilot -> function steer 425 // AIPilot temp; 426 // Vector3 foo = temp.steer(Vector3(0,0,1)); 427 428 322 429 } 323 430 };
Note: See TracChangeset
for help on using the changeset viewer.