Alvaro Cassinelli / Mbed 2 deprecated skinGames_forktest

Dependencies:   mbed

Fork of scoreLight_Advanced by Alvaro Cassinelli

Committer:
mbedalvaro
Date:
Mon Apr 02 05:33:44 2012 +0000
Revision:
3:b44ff6de81bd
Parent:
2:34157ebbf56b
Child:
4:f9d364f10335
working but needs a lot of calibration and optimization. In particular the laser renderer - I am going to modify it, that's why I commit now.

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 3:b44ff6de81bd 95 pBlob->createBlob(blobArray.size(), SPOT_BOUNCING, vector2D(CENTER_AD_MIRROR_X+100*blobArray.size(), CENTER_AD_MIRROR_Y+100*blobArray.size()));
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 3:b44ff6de81bd 148 if (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