Alvaro Cassinelli / Mbed 2 deprecated skinGames_forktest

Dependencies:   mbed

Fork of scoreLight_Advanced by Alvaro Cassinelli

Committer:
mbedalvaro
Date:
Sat Mar 31 08:19:31 2012 +0000
Revision:
1:a4050fee11f7
Parent:
0:345b3bc7a0ea
Child:
2:34157ebbf56b
new scorelight methods added. VERY STRANGE problem with oldPos and pos in Verlet method, that have strange behaviour depending on the value of damp factor...

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedalvaro 0:345b3bc7a0ea 1
mbedalvaro 0:345b3bc7a0ea 2 #include "blobConfig.h"
mbedalvaro 0:345b3bc7a0ea 3 #include "hardwareIO.h" // this is in fact only to get to know the initial position of the spots, as well as the mirror limits to set the bounding box for the blobs
mbedalvaro 0:345b3bc7a0ea 4
mbedalvaro 0:345b3bc7a0ea 5 blobConfig::blobConfig(): numBlobs(0) {
mbedalvaro 1:a4050fee11f7 6 //blobArray.clear();// there is no need to do this, the vector does not contains anything here.
mbedalvaro 1:a4050fee11f7 7
mbedalvaro 0:345b3bc7a0ea 8 }
mbedalvaro 0:345b3bc7a0ea 9
mbedalvaro 0:345b3bc7a0ea 10 blobConfig::~blobConfig() {
mbedalvaro 1:a4050fee11f7 11 clearConfig();
mbedalvaro 1:a4050fee11f7 12
mbedalvaro 0:345b3bc7a0ea 13 }
mbedalvaro 0:345b3bc7a0ea 14
mbedalvaro 0:345b3bc7a0ea 15 // =========================================== STANDARD CONFIGURATIONS =============================================================================
mbedalvaro 0:345b3bc7a0ea 16
mbedalvaro 0:345b3bc7a0ea 17 void blobConfig::computeBoundingBox() {
mbedalvaro 1:a4050fee11f7 18 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 19 blobArray[i]->computeBoundingBox();
mbedalvaro 1:a4050fee11f7 20 }
mbedalvaro 0:345b3bc7a0ea 21 }
mbedalvaro 0:345b3bc7a0ea 22
mbedalvaro 0:345b3bc7a0ea 23 void blobConfig::clearConfig() {
mbedalvaro 1:a4050fee11f7 24 for (int i=0; i<blobArray.size(); i++) delete blobArray[i]; // we must delete the pointer created with new, so the memory for the object is liberated (calls its destructor)
mbedalvaro 1:a4050fee11f7 25 blobArray.clear();
mbedalvaro 1:a4050fee11f7 26 numBlobs=0;// this is just equal to blobArray.size()
mbedalvaro 0:345b3bc7a0ea 27 }
mbedalvaro 0:345b3bc7a0ea 28
mbedalvaro 1:a4050fee11f7 29 void blobConfig::addOneElasticLoopRelax() {
mbedalvaro 1:a4050fee11f7 30 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 1:a4050fee11f7 31 pBlob->createBlob(blobArray.size(), RELAX, vector2D(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y));
mbedalvaro 1:a4050fee11f7 32 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 33 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 34
mbedalvaro 1:a4050fee11f7 35 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 36 numBlobs=blobArray.size();
mbedalvaro 1:a4050fee11f7 37
mbedalvaro 0:345b3bc7a0ea 38 }
mbedalvaro 0:345b3bc7a0ea 39
mbedalvaro 0:345b3bc7a0ea 40
mbedalvaro 1:a4050fee11f7 41 void blobConfig::addOneElasticLoopContract() {
mbedalvaro 1:a4050fee11f7 42 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 1:a4050fee11f7 43 pBlob->createBlob(blobArray.size(), CONTRACT, vector2D(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y));
mbedalvaro 1:a4050fee11f7 44 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 45 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 46
mbedalvaro 1:a4050fee11f7 47 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 48 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 49 }
mbedalvaro 0:345b3bc7a0ea 50
mbedalvaro 1:a4050fee11f7 51 void blobConfig::addOneElasticLoopContractCentral() {
mbedalvaro 1:a4050fee11f7 52 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 1:a4050fee11f7 53 pBlob->createBlob(blobArray.size(), CONTRACT_CENTRAL, vector2D(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y));
mbedalvaro 1:a4050fee11f7 54 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 55 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 56
mbedalvaro 1:a4050fee11f7 57 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 58 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 59 }
mbedalvaro 0:345b3bc7a0ea 60
mbedalvaro 1:a4050fee11f7 61 void blobConfig::addOneElasticContourFollowing() {
mbedalvaro 1:a4050fee11f7 62
mbedalvaro 1:a4050fee11f7 63 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 1:a4050fee11f7 64 pBlob->createBlob(blobArray.size(), CONTOUR_FOLLOWING, vector2D(CENTER_AD_MIRROR_X+100*blobArray.size(), CENTER_AD_MIRROR_Y+100*blobArray.size()));
mbedalvaro 1:a4050fee11f7 65 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 66 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 67
mbedalvaro 1:a4050fee11f7 68 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 69 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 70 }
mbedalvaro 0:345b3bc7a0ea 71
mbedalvaro 0:345b3bc7a0ea 72
mbedalvaro 1:a4050fee11f7 73 void blobConfig:: addOneElasticContourFollowingFAST() {
mbedalvaro 1:a4050fee11f7 74 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 1:a4050fee11f7 75 pBlob->createBlob(blobArray.size(), CONTOUR_FOLLOWING_FAST, vector2D(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y));
mbedalvaro 0:345b3bc7a0ea 76 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 77 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 78
mbedalvaro 1:a4050fee11f7 79 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 80 numBlobs=blobArray.size();
mbedalvaro 1:a4050fee11f7 81 }
mbedalvaro 1:a4050fee11f7 82
mbedalvaro 1:a4050fee11f7 83 void blobConfig::addOneElasticBouncing() {
mbedalvaro 1:a4050fee11f7 84 elasticLoop* pBlob= new elasticLoop();
mbedalvaro 1:a4050fee11f7 85 pBlob->createBlob(blobArray.size(), BOUNCING, vector2D(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y));
mbedalvaro 1:a4050fee11f7 86 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 87 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 88
mbedalvaro 1:a4050fee11f7 89 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 90 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 91 }
mbedalvaro 0:345b3bc7a0ea 92
mbedalvaro 1:a4050fee11f7 93 void blobConfig::addOneRigidLoopBouncing() {
mbedalvaro 1:a4050fee11f7 94 rigidLoop* pBlob= new rigidLoop();
mbedalvaro 1:a4050fee11f7 95 pBlob->createBlob(blobArray.size(), SPOT_BOUNCING, vector2D(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y));
mbedalvaro 0:345b3bc7a0ea 96 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 97 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 98
mbedalvaro 1:a4050fee11f7 99 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 100 numBlobs=blobArray.size();
mbedalvaro 0:345b3bc7a0ea 101 }
mbedalvaro 0:345b3bc7a0ea 102
mbedalvaro 1:a4050fee11f7 103 void blobConfig::addOneRigidLoopFollowing() {
mbedalvaro 1:a4050fee11f7 104 rigidLoop* pBlob= new rigidLoop();
mbedalvaro 1:a4050fee11f7 105 pBlob->createBlob(blobArray.size(), SPOT_FOLLOWING, vector2D(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y));
mbedalvaro 1:a4050fee11f7 106 // add this relaxing loop to the present config:
mbedalvaro 1:a4050fee11f7 107 blobArray.push_back(pBlob);
mbedalvaro 1:a4050fee11f7 108
mbedalvaro 1:a4050fee11f7 109 // update auxiliary variable numBlobs (just for easy reference):
mbedalvaro 1:a4050fee11f7 110 numBlobs=blobArray.size();
mbedalvaro 1:a4050fee11f7 111 }
mbedalvaro 0:345b3bc7a0ea 112
mbedalvaro 0:345b3bc7a0ea 113
mbedalvaro 0:345b3bc7a0ea 114 // ==================================================================================================================================================
mbedalvaro 0:345b3bc7a0ea 115
mbedalvaro 0:345b3bc7a0ea 116
mbedalvaro 1:a4050fee11f7 117 void blobConfig::allKill() { // this put all the blobs in "dead" mode, meaning that neither rendering nor update is done (but they are not deleted).
mbedalvaro 1:a4050fee11f7 118 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 119 blobArray[i]->render = false;
mbedalvaro 1:a4050fee11f7 120 blobArray[i]->standByMode = false;
mbedalvaro 1:a4050fee11f7 121 }
mbedalvaro 1:a4050fee11f7 122 }
mbedalvaro 0:345b3bc7a0ea 123 void blobConfig::allAlive() {
mbedalvaro 1:a4050fee11f7 124 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 125 blobArray[i]->render = true;
mbedalvaro 1:a4050fee11f7 126 blobArray[i]->standByMode = true;
mbedalvaro 1:a4050fee11f7 127 }
mbedalvaro 1:a4050fee11f7 128 }
mbedalvaro 1:a4050fee11f7 129
mbedalvaro 0:345b3bc7a0ea 130 void blobConfig::allStandBy() {
mbedalvaro 1:a4050fee11f7 131 for (int i=0; i<blobArray.size(); i++) blobArray[i]->standByMode = true;
mbedalvaro 0:345b3bc7a0ea 132 }
mbedalvaro 0:345b3bc7a0ea 133
mbedalvaro 0:345b3bc7a0ea 134 void blobConfig::allResume() {
mbedalvaro 1:a4050fee11f7 135 for (int i=0; i<blobArray.size(); i++) blobArray[i]->standByMode = false;
mbedalvaro 0:345b3bc7a0ea 136 }
mbedalvaro 0:345b3bc7a0ea 137
mbedalvaro 1:a4050fee11f7 138 void blobConfig::allVisible() {
mbedalvaro 1:a4050fee11f7 139 for (int i=0; i<blobArray.size(); i++) blobArray[i]->render = true;
mbedalvaro 0:345b3bc7a0ea 140 }
mbedalvaro 0:345b3bc7a0ea 141
mbedalvaro 0:345b3bc7a0ea 142 void blobConfig::allInvisible() { // note that they may continue to evolve
mbedalvaro 1:a4050fee11f7 143 for (int i=0; i<blobArray.size(); i++) blobArray[i]->render = false;
mbedalvaro 0:345b3bc7a0ea 144 }
mbedalvaro 0:345b3bc7a0ea 145
mbedalvaro 1:a4050fee11f7 146 void blobConfig::update() { // update dynamics of the blob
mbedalvaro 1:a4050fee11f7 147 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 148 if ((blobArray[i]->render==true)&&(blobArray[i]->standByMode==false)) blobArray[i]->update();
mbedalvaro 1:a4050fee11f7 149 }
mbedalvaro 0:345b3bc7a0ea 150 }
mbedalvaro 0:345b3bc7a0ea 151
mbedalvaro 1:a4050fee11f7 152 void blobConfig::draw() { // draw uses the opengl like renderer (if any), and save projected trajectory in the LaserSensingTrajectory object of each blob
mbedalvaro 1:a4050fee11f7 153 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 154 if (blobArray[i]->render==true) blobArray[i]->draw();
mbedalvaro 1:a4050fee11f7 155 }
mbedalvaro 0:345b3bc7a0ea 156 }
mbedalvaro 0:345b3bc7a0ea 157
mbedalvaro 1:a4050fee11f7 158 void blobConfig::sendConfData() {
mbedalvaro 1:a4050fee11f7 159 // For the time being, only "per blob" data sending:
mbedalvaro 1:a4050fee11f7 160 // (b) Per-spot sending of data (note: both are NOT exclusive; so if we want just packaged data, we need to make all the spot STOP sending data.
mbedalvaro 1:a4050fee11f7 161 for (int i=0; i<blobArray.size(); i++) {
mbedalvaro 1:a4050fee11f7 162 if (blobArray[i]->render==true) blobArray[i]->sendData(); // a blob that is in stand-by mode may send data (good for testing with a fixed loop)
mbedalvaro 1:a4050fee11f7 163 }
mbedalvaro 0:345b3bc7a0ea 164 }
mbedalvaro 0:345b3bc7a0ea 165
mbedalvaro 0:345b3bc7a0ea 166
mbedalvaro 0:345b3bc7a0ea 167
mbedalvaro 0:345b3bc7a0ea 168