Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of scoreLight_Advanced by
blobConfig.cpp@32:52273c3291fe, 2012-10-29 (annotated)
- Committer:
- mbedalvaro
- Date:
- Mon Oct 29 14:28:47 2012 +0000
- Revision:
- 32:52273c3291fe
- Parent:
- 31:5f039cbddee8
- Child:
- 33:43e8bc451ef0
code for Tokyo design week (starting with two colored following spots, and NO standby mode)
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mbedalvaro | 0:345b3bc7a0ea | 1 | |
| mbedalvaro | 0:345b3bc7a0ea | 2 | #include "blobConfig.h" |
| mbedalvaro | 0:345b3bc7a0ea | 3 | |
| mbedalvaro | 0:345b3bc7a0ea | 4 | blobConfig::blobConfig(): numBlobs(0) { |
| mbedalvaro | 1:a4050fee11f7 | 5 | //blobArray.clear();// there is no need to do this, the vector does not contains anything here. |
| mbedalvaro | 0:345b3bc7a0ea | 6 | } |
| mbedalvaro | 0:345b3bc7a0ea | 7 | |
| mbedalvaro | 0:345b3bc7a0ea | 8 | blobConfig::~blobConfig() { |
| mbedalvaro | 1:a4050fee11f7 | 9 | clearConfig(); |
| mbedalvaro | 0:345b3bc7a0ea | 10 | } |
| mbedalvaro | 0:345b3bc7a0ea | 11 | |
| mbedalvaro | 0:345b3bc7a0ea | 12 | // =========================================== STANDARD CONFIGURATIONS ============================================================================= |
| mbedalvaro | 0:345b3bc7a0ea | 13 | |
| mbedalvaro | 30:d8af03f01cd4 | 14 | |
| mbedalvaro | 0:345b3bc7a0ea | 15 | |
| mbedalvaro | 0:345b3bc7a0ea | 16 | void blobConfig::clearConfig() { |
| mbedalvaro | 1:a4050fee11f7 | 17 | 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 | 18 | blobArray.clear(); |
| mbedalvaro | 1:a4050fee11f7 | 19 | numBlobs=0;// this is just equal to blobArray.size() |
| mbedalvaro | 0:345b3bc7a0ea | 20 | } |
| mbedalvaro | 0:345b3bc7a0ea | 21 | |
| mbedalvaro | 31:5f039cbddee8 | 22 | void blobConfig::initConfig(configType cfType, int numblobs) { |
| mbedalvaro | 30:d8af03f01cd4 | 23 | myConfigType=cfType; |
| mbedalvaro | 31:5f039cbddee8 | 24 | int i; |
| mbedalvaro | 30:d8af03f01cd4 | 25 | switch(myConfigType) { |
| mbedalvaro | 30:d8af03f01cd4 | 26 | case ONE_ELASTIC_FOLLOWING: |
| mbedalvaro | 30:d8af03f01cd4 | 27 | // computeBoundingBox(); |
| mbedalvaro | 30:d8af03f01cd4 | 28 | clearConfig(); |
| mbedalvaro | 30:d8af03f01cd4 | 29 | addOneElasticContourFollowing(); |
| mbedalvaro | 30:d8af03f01cd4 | 30 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 31 | case ONE_ELASTIC_MOUTH: |
| mbedalvaro | 30:d8af03f01cd4 | 32 | // computeBoundingBox(); |
| mbedalvaro | 30:d8af03f01cd4 | 33 | clearConfig(); |
| mbedalvaro | 30:d8af03f01cd4 | 34 | addOneElasticLoopContractCentral(); |
| mbedalvaro | 30:d8af03f01cd4 | 35 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 36 | case ONE_ELASTIC_MOUTH_SMALL: |
| mbedalvaro | 30:d8af03f01cd4 | 37 | // computeBoundingBox(); |
| mbedalvaro | 30:d8af03f01cd4 | 38 | clearConfig(); |
| mbedalvaro | 30:d8af03f01cd4 | 39 | addOneElasticLoopContractCentralFast(); |
| mbedalvaro | 30:d8af03f01cd4 | 40 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 41 | case BOUNCING_SPOTS: |
| mbedalvaro | 30:d8af03f01cd4 | 42 | // computeBoundingBox(); |
| mbedalvaro | 30:d8af03f01cd4 | 43 | clearConfig(); |
| mbedalvaro | 31:5f039cbddee8 | 44 | for (i=0; i<numblobs ; i++) addOneRigidLoopBouncing(); |
| mbedalvaro | 30:d8af03f01cd4 | 45 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 46 | case LORENTZ_SPOTS: |
| mbedalvaro | 30:d8af03f01cd4 | 47 | // computeBoundingBox(); |
| mbedalvaro | 30:d8af03f01cd4 | 48 | clearConfig(); |
| mbedalvaro | 31:5f039cbddee8 | 49 | for (i=0; i<numblobs ; i++) addOneRigidLoopLorentz(); |
| mbedalvaro | 30:d8af03f01cd4 | 50 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 51 | case FOLLOWING_SPOTS: |
| mbedalvaro | 30:d8af03f01cd4 | 52 | // computeBoundingBox(); |
| mbedalvaro | 30:d8af03f01cd4 | 53 | clearConfig(); |
| mbedalvaro | 32:52273c3291fe | 54 | for (i=0; i<numblobs ; i++) addOneRigidLoopFollowing(vector2Df(CENTER_AD_MIRROR_X+i*200, CENTER_AD_MIRROR_Y+i*200), vector2Df(11,0)); |
| mbedalvaro | 32:52273c3291fe | 55 | |
| mbedalvaro | 31:5f039cbddee8 | 56 | break; |
| mbedalvaro | 31:5f039cbddee8 | 57 | case ONE_TRACKING_SPOT: |
| mbedalvaro | 31:5f039cbddee8 | 58 | clearConfig(); |
| mbedalvaro | 31:5f039cbddee8 | 59 | addOneRigidTrackingSpot(); |
| mbedalvaro | 31:5f039cbddee8 | 60 | break; |
| mbedalvaro | 31:5f039cbddee8 | 61 | case ONE_TRACKING_SPOT_DOT: |
| mbedalvaro | 31:5f039cbddee8 | 62 | clearConfig(); |
| mbedalvaro | 31:5f039cbddee8 | 63 | addOneRigidTrackingSpotDot(); |
| mbedalvaro | 30:d8af03f01cd4 | 64 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 65 | case AIR_HOCKEY_GAME: |
| mbedalvaro | 30:d8af03f01cd4 | 66 | // computeBoundingBox(); |
| mbedalvaro | 30:d8af03f01cd4 | 67 | clearConfig(); |
| mbedalvaro | 31:5f039cbddee8 | 68 | for (i=0; i<numblobs ; i++) addOneRigidLoopAirHockey(); |
| mbedalvaro | 30:d8af03f01cd4 | 69 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 70 | case CIRCULAR_PONG_GAME: |
| mbedalvaro | 30:d8af03f01cd4 | 71 | // computeBoundingBox(); |
| mbedalvaro | 30:d8af03f01cd4 | 72 | clearConfig(); |
| mbedalvaro | 30:d8af03f01cd4 | 73 | // (1) One SPOT_TRACK to track the background. It will be the number 0 in the config. |
| mbedalvaro | 31:5f039cbddee8 | 74 | addOneRigidTrackingSpotDot(); |
| mbedalvaro | 30:d8af03f01cd4 | 75 | // (2) Add bouncing spots: |
| mbedalvaro | 31:5f039cbddee8 | 76 | for (i=0; i<numblobs ; i++) { |
| mbedalvaro | 31:5f039cbddee8 | 77 | float anglaux=1.0*i/numblobs*2*PI; |
| mbedalvaro | 31:5f039cbddee8 | 78 | addOneRigidLoopBouncing(vector2Df(CENTER_AD_MIRROR_X+200*cos(anglaux), CENTER_AD_MIRROR_Y+200*sin(anglaux)), |
| mbedalvaro | 31:5f039cbddee8 | 79 | vector2Df(cos(anglaux),sin(anglaux))*10); |
| mbedalvaro | 31:5f039cbddee8 | 80 | } |
| mbedalvaro | 30:d8af03f01cd4 | 81 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 82 | case VERTICAL_PINBALL_GAME: |
| mbedalvaro | 30:d8af03f01cd4 | 83 | clearConfig(); |
| mbedalvaro | 32:52273c3291fe | 84 | // (1) one (or two) SPOT_TRACK or SPOT_TRACK_DOT to track the background - It will be the number 0 (and 1) in the config. |
| mbedalvaro | 31:5f039cbddee8 | 85 | addOneRigidTrackingSpotDot(vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y+600), |
| mbedalvaro | 31:5f039cbddee8 | 86 | vector2Df(0,0)); |
| mbedalvaro | 32:52273c3291fe | 87 | // addOneRigidTrackingSpot(vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y+600), |
| mbedalvaro | 32:52273c3291fe | 88 | // vector2Df(0,0)); |
| mbedalvaro | 31:5f039cbddee8 | 89 | // (2) one bouncing spot with gravity: |
| mbedalvaro | 31:5f039cbddee8 | 90 | addOneRigidLoopBouncingGravity(vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y-600), |
| mbedalvaro | 31:5f039cbddee8 | 91 | vector2Df(0,0)); |
| mbedalvaro | 30:d8af03f01cd4 | 92 | |
| mbedalvaro | 30:d8af03f01cd4 | 93 | break; |
| mbedalvaro | 32:52273c3291fe | 94 | case RAIN_MODE: |
| mbedalvaro | 32:52273c3291fe | 95 | clearConfig(); |
| mbedalvaro | 32:52273c3291fe | 96 | // Add bouncing spot with gravity: |
| mbedalvaro | 32:52273c3291fe | 97 | for (i=0; i<numblobs ; i++) { |
| mbedalvaro | 32:52273c3291fe | 98 | addOneRigidLoopBouncingGravity(vector2Df(CENTER_AD_MIRROR_X, 10), vector2Df(0,0)); |
| mbedalvaro | 32:52273c3291fe | 99 | } |
| mbedalvaro | 32:52273c3291fe | 100 | break; |
| mbedalvaro | 31:5f039cbddee8 | 101 | case FISH_NET_GAME: |
| mbedalvaro | 31:5f039cbddee8 | 102 | clearConfig(); |
| mbedalvaro | 31:5f039cbddee8 | 103 | // (1) one SPOT_TRACK_DOT to track the background - It will be the number 0 |
| mbedalvaro | 31:5f039cbddee8 | 104 | addOneRigidTrackingSpotDot(vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), // CENTERED |
| mbedalvaro | 31:5f039cbddee8 | 105 | vector2Df(0,0)); |
| mbedalvaro | 31:5f039cbddee8 | 106 | // (2) Add bouncing spots without gravity: |
| mbedalvaro | 31:5f039cbddee8 | 107 | for (i=0; i<numblobs ; i++) { |
| mbedalvaro | 31:5f039cbddee8 | 108 | float anglaux=1.0*i/numblobs*2*PI; |
| mbedalvaro | 31:5f039cbddee8 | 109 | addOneRigidLoopBouncing(vector2Df(CENTER_AD_MIRROR_X+400*cos(anglaux), CENTER_AD_MIRROR_Y+400*sin(anglaux)), |
| mbedalvaro | 31:5f039cbddee8 | 110 | vector2Df(cos(anglaux),sin(anglaux))*10); |
| mbedalvaro | 31:5f039cbddee8 | 111 | } |
| mbedalvaro | 31:5f039cbddee8 | 112 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 113 | case PAC_MAN_GAME: |
| mbedalvaro | 30:d8af03f01cd4 | 114 | clearConfig(); |
| mbedalvaro | 30:d8af03f01cd4 | 115 | //(1) add one very slowly slidind-bouncing spot, the PACMAN (number 0 in the config) |
| mbedalvaro | 31:5f039cbddee8 | 116 | // addOneRigidLoopPacman(vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(20,0)); |
| mbedalvaro | 31:5f039cbddee8 | 117 | // addOneRigidTrackingSpot(vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(0,0)); |
| mbedalvaro | 31:5f039cbddee8 | 118 | addOneRigidLoopFollowing(vector2Df(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y), vector2Df(10,0)); |
| mbedalvaro | 31:5f039cbddee8 | 119 | |
| mbedalvaro | 30:d8af03f01cd4 | 120 | // (2) Add some initial SPOT_FOLLOWING or SPOT_GHOST spots (the ghosts): |
| mbedalvaro | 30:d8af03f01cd4 | 121 | //for (int i=0; i<numBlobs; i++) |
| mbedalvaro | 31:5f039cbddee8 | 122 | //addOneRigidLoopFollowing(vector2Df(CENTER_AD_MIRROR_X-200, CENTER_AD_MIRROR_Y-200), vector2Df(0,0)); |
| mbedalvaro | 31:5f039cbddee8 | 123 | addOneRigidLoopGhost(vector2Df(CENTER_AD_MIRROR_X+500, CENTER_AD_MIRROR_Y-500), vector2Df(10,0)); |
| mbedalvaro | 31:5f039cbddee8 | 124 | addOneRigidLoopGhost(vector2Df(CENTER_AD_MIRROR_X-500, CENTER_AD_MIRROR_Y-500), vector2Df(10,0)); |
| mbedalvaro | 30:d8af03f01cd4 | 125 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 126 | default: |
| mbedalvaro | 30:d8af03f01cd4 | 127 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 128 | } |
| mbedalvaro | 30:d8af03f01cd4 | 129 | } |
| mbedalvaro | 30:d8af03f01cd4 | 130 | |
| mbedalvaro | 30:d8af03f01cd4 | 131 | // ==================== Template spots from which to create multi-spot configurations: ===================== |
| mbedalvaro | 30:d8af03f01cd4 | 132 | |
| mbedalvaro | 30:d8af03f01cd4 | 133 | void blobConfig::addOneElasticLoopRelax(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 1:a4050fee11f7 | 134 | elasticLoop* pBlob= new elasticLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 135 | pBlob->createBlob(blobArray.size(), RELAX, initpos, initspeed); |
| mbedalvaro | 1:a4050fee11f7 | 136 | // add this relaxing loop to the present config: |
| mbedalvaro | 1:a4050fee11f7 | 137 | blobArray.push_back(pBlob); |
| mbedalvaro | 1:a4050fee11f7 | 138 | |
| mbedalvaro | 1:a4050fee11f7 | 139 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 1:a4050fee11f7 | 140 | numBlobs=blobArray.size(); |
| mbedalvaro | 1:a4050fee11f7 | 141 | |
| mbedalvaro | 0:345b3bc7a0ea | 142 | } |
| mbedalvaro | 0:345b3bc7a0ea | 143 | |
| mbedalvaro | 0:345b3bc7a0ea | 144 | |
| mbedalvaro | 30:d8af03f01cd4 | 145 | void blobConfig::addOneElasticLoopContract(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 1:a4050fee11f7 | 146 | elasticLoop* pBlob= new elasticLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 147 | pBlob->createBlob(blobArray.size(), CONTRACT, initpos, initspeed); |
| mbedalvaro | 1:a4050fee11f7 | 148 | // add this relaxing loop to the present config: |
| mbedalvaro | 1:a4050fee11f7 | 149 | blobArray.push_back(pBlob); |
| mbedalvaro | 1:a4050fee11f7 | 150 | |
| mbedalvaro | 1:a4050fee11f7 | 151 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 1:a4050fee11f7 | 152 | numBlobs=blobArray.size(); |
| mbedalvaro | 0:345b3bc7a0ea | 153 | } |
| mbedalvaro | 0:345b3bc7a0ea | 154 | |
| mbedalvaro | 30:d8af03f01cd4 | 155 | void blobConfig::addOneElasticLoopContractCentral(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 1:a4050fee11f7 | 156 | elasticLoop* pBlob= new elasticLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 157 | pBlob->createBlob(blobArray.size(), CONTRACT_CENTRAL, initpos, initspeed); |
| mbedalvaro | 1:a4050fee11f7 | 158 | // add this relaxing loop to the present config: |
| mbedalvaro | 1:a4050fee11f7 | 159 | blobArray.push_back(pBlob); |
| mbedalvaro | 1:a4050fee11f7 | 160 | |
| mbedalvaro | 1:a4050fee11f7 | 161 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 1:a4050fee11f7 | 162 | numBlobs=blobArray.size(); |
| mbedalvaro | 0:345b3bc7a0ea | 163 | } |
| mbedalvaro | 0:345b3bc7a0ea | 164 | |
| mbedalvaro | 30:d8af03f01cd4 | 165 | void blobConfig::addOneElasticLoopContractCentralFast(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 19:228430f1350e | 166 | elasticLoop* pBlob= new elasticLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 167 | pBlob->createBlob(blobArray.size(), CONTRACT_CENTRAL_FAST, initpos, initspeed); |
| mbedalvaro | 19:228430f1350e | 168 | // add this relaxing loop to the present config: |
| mbedalvaro | 19:228430f1350e | 169 | blobArray.push_back(pBlob); |
| mbedalvaro | 19:228430f1350e | 170 | |
| mbedalvaro | 19:228430f1350e | 171 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 19:228430f1350e | 172 | numBlobs=blobArray.size(); |
| mbedalvaro | 19:228430f1350e | 173 | } |
| mbedalvaro | 19:228430f1350e | 174 | |
| mbedalvaro | 30:d8af03f01cd4 | 175 | void blobConfig::addOneElasticContourFollowing(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 1:a4050fee11f7 | 176 | |
| mbedalvaro | 1:a4050fee11f7 | 177 | elasticLoop* pBlob= new elasticLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 178 | pBlob->createBlob(blobArray.size(), CONTOUR_FOLLOWING, initpos, initspeed); |
| mbedalvaro | 1:a4050fee11f7 | 179 | // add this relaxing loop to the present config: |
| mbedalvaro | 1:a4050fee11f7 | 180 | blobArray.push_back(pBlob); |
| mbedalvaro | 1:a4050fee11f7 | 181 | |
| mbedalvaro | 1:a4050fee11f7 | 182 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 1:a4050fee11f7 | 183 | numBlobs=blobArray.size(); |
| mbedalvaro | 0:345b3bc7a0ea | 184 | } |
| mbedalvaro | 0:345b3bc7a0ea | 185 | |
| mbedalvaro | 0:345b3bc7a0ea | 186 | |
| mbedalvaro | 30:d8af03f01cd4 | 187 | void blobConfig:: addOneElasticContourFollowingFAST(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 1:a4050fee11f7 | 188 | elasticLoop* pBlob= new elasticLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 189 | pBlob->createBlob(blobArray.size(), CONTOUR_FOLLOWING_FAST, initpos, initspeed); |
| mbedalvaro | 30:d8af03f01cd4 | 190 | // add this relaxing loop to the present config: |
| mbedalvaro | 30:d8af03f01cd4 | 191 | blobArray.push_back(pBlob); |
| mbedalvaro | 30:d8af03f01cd4 | 192 | |
| mbedalvaro | 30:d8af03f01cd4 | 193 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 30:d8af03f01cd4 | 194 | numBlobs=blobArray.size(); |
| mbedalvaro | 30:d8af03f01cd4 | 195 | } |
| mbedalvaro | 30:d8af03f01cd4 | 196 | |
| mbedalvaro | 30:d8af03f01cd4 | 197 | void blobConfig::addOneElasticBouncing(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 30:d8af03f01cd4 | 198 | elasticLoop* pBlob= new elasticLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 199 | pBlob->createBlob(blobArray.size(), BOUNCING, initpos, initspeed); |
| mbedalvaro | 0:345b3bc7a0ea | 200 | // add this relaxing loop to the present config: |
| mbedalvaro | 1:a4050fee11f7 | 201 | blobArray.push_back(pBlob); |
| mbedalvaro | 1:a4050fee11f7 | 202 | |
| mbedalvaro | 1:a4050fee11f7 | 203 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 1:a4050fee11f7 | 204 | numBlobs=blobArray.size(); |
| mbedalvaro | 1:a4050fee11f7 | 205 | } |
| mbedalvaro | 31:5f039cbddee8 | 206 | void blobConfig::addOneRigidLoopBouncingGravity(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 31:5f039cbddee8 | 207 | rigidLoop* pBlob= new rigidLoop(); |
| mbedalvaro | 32:52273c3291fe | 208 | pBlob->createBlob(blobArray.size(), SPOT_BOUNCING_FACTOR, initpos, initspeed); |
| mbedalvaro | 31:5f039cbddee8 | 209 | // (We can use here methods of the child class, even if these are not declared virtual on the base class, because we are doing this BEFORE |
| mbedalvaro | 31:5f039cbddee8 | 210 | // adding this to the blobArray as a pointer). This is good to set parameters... |
| mbedalvaro | 32:52273c3291fe | 211 | pBlob->gravity.set(0,3.0); |
| mbedalvaro | 31:5f039cbddee8 | 212 | pBlob->centerMass.dampMotion = 0.002; |
| mbedalvaro | 32:52273c3291fe | 213 | pBlob->factorBouncingForce=0;//0.003; // this is because we will use a force on the central mass (not used in SPOT_BOUNCING_FACTOR) |
| mbedalvaro | 32:52273c3291fe | 214 | pBlob->factorAbsorptionShock=0.8; // coef elastic bouncing |
| mbedalvaro | 31:5f039cbddee8 | 215 | |
| mbedalvaro | 31:5f039cbddee8 | 216 | // add this relaxing loop to the present config: |
| mbedalvaro | 31:5f039cbddee8 | 217 | blobArray.push_back(pBlob); |
| mbedalvaro | 1:a4050fee11f7 | 218 | |
| mbedalvaro | 31:5f039cbddee8 | 219 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 31:5f039cbddee8 | 220 | numBlobs=blobArray.size(); |
| mbedalvaro | 31:5f039cbddee8 | 221 | } |
| mbedalvaro | 30:d8af03f01cd4 | 222 | void blobConfig::addOneRigidLoopBouncing(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 30:d8af03f01cd4 | 223 | rigidLoop* pBlob= new rigidLoop(); |
| mbedalvaro | 32:52273c3291fe | 224 | pBlob->createBlob(blobArray.size(), SPOT_BOUNCING_FACTOR, initpos, initspeed); |
| mbedalvaro | 1:a4050fee11f7 | 225 | // add this relaxing loop to the present config: |
| mbedalvaro | 1:a4050fee11f7 | 226 | blobArray.push_back(pBlob); |
| mbedalvaro | 1:a4050fee11f7 | 227 | |
| mbedalvaro | 1:a4050fee11f7 | 228 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 1:a4050fee11f7 | 229 | numBlobs=blobArray.size(); |
| mbedalvaro | 0:345b3bc7a0ea | 230 | } |
| mbedalvaro | 0:345b3bc7a0ea | 231 | |
| mbedalvaro | 30:d8af03f01cd4 | 232 | void blobConfig::addOneRigidLoopPacman(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 1:a4050fee11f7 | 233 | rigidLoop* pBlob= new rigidLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 234 | pBlob->createBlob(blobArray.size(), SPOT_PACMAN, initpos, initspeed); |
| mbedalvaro | 30:d8af03f01cd4 | 235 | // add this relaxing loop to the present config: |
| mbedalvaro | 30:d8af03f01cd4 | 236 | blobArray.push_back(pBlob); |
| mbedalvaro | 30:d8af03f01cd4 | 237 | |
| mbedalvaro | 30:d8af03f01cd4 | 238 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 30:d8af03f01cd4 | 239 | numBlobs=blobArray.size(); |
| mbedalvaro | 30:d8af03f01cd4 | 240 | } |
| mbedalvaro | 30:d8af03f01cd4 | 241 | void blobConfig::addOneRigidLoopGhost(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 30:d8af03f01cd4 | 242 | rigidLoop* pBlob= new rigidLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 243 | pBlob->createBlob(blobArray.size(), SPOT_GHOST, initpos, initspeed); |
| mbedalvaro | 0:345b3bc7a0ea | 244 | // add this relaxing loop to the present config: |
| mbedalvaro | 1:a4050fee11f7 | 245 | blobArray.push_back(pBlob); |
| mbedalvaro | 1:a4050fee11f7 | 246 | |
| mbedalvaro | 1:a4050fee11f7 | 247 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 1:a4050fee11f7 | 248 | numBlobs=blobArray.size(); |
| mbedalvaro | 0:345b3bc7a0ea | 249 | } |
| mbedalvaro | 0:345b3bc7a0ea | 250 | |
| mbedalvaro | 30:d8af03f01cd4 | 251 | |
| mbedalvaro | 30:d8af03f01cd4 | 252 | void blobConfig::addOneRigidLoopLorentz(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 27:1ce994629ffc | 253 | rigidLoop* pBlob= new rigidLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 254 | pBlob->createBlob(blobArray.size(), SPOT_LORENTZ_FORCE, initpos, initspeed); |
| mbedalvaro | 27:1ce994629ffc | 255 | // add this loop to the present config: |
| mbedalvaro | 27:1ce994629ffc | 256 | blobArray.push_back(pBlob); |
| mbedalvaro | 27:1ce994629ffc | 257 | |
| mbedalvaro | 27:1ce994629ffc | 258 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 27:1ce994629ffc | 259 | numBlobs=blobArray.size(); |
| mbedalvaro | 27:1ce994629ffc | 260 | } |
| mbedalvaro | 27:1ce994629ffc | 261 | |
| mbedalvaro | 30:d8af03f01cd4 | 262 | void blobConfig::addOneRigidLoopAirHockey(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 28:44b7b6e35548 | 263 | rigidLoop* pBlob= new rigidLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 264 | pBlob->createBlob(blobArray.size(), SPOT_AIR_HOCKEY, initpos, initspeed); |
| mbedalvaro | 28:44b7b6e35548 | 265 | // add this loop to the present config: |
| mbedalvaro | 28:44b7b6e35548 | 266 | blobArray.push_back(pBlob); |
| mbedalvaro | 28:44b7b6e35548 | 267 | |
| mbedalvaro | 28:44b7b6e35548 | 268 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 28:44b7b6e35548 | 269 | numBlobs=blobArray.size(); |
| mbedalvaro | 28:44b7b6e35548 | 270 | } |
| mbedalvaro | 28:44b7b6e35548 | 271 | |
| mbedalvaro | 30:d8af03f01cd4 | 272 | void blobConfig::addOneRigidLoopFollowing(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 1:a4050fee11f7 | 273 | rigidLoop* pBlob= new rigidLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 274 | pBlob->createBlob(blobArray.size(), SPOT_FOLLOWING, initpos, initspeed); |
| mbedalvaro | 1:a4050fee11f7 | 275 | // add this relaxing loop to the present config: |
| mbedalvaro | 1:a4050fee11f7 | 276 | blobArray.push_back(pBlob); |
| mbedalvaro | 1:a4050fee11f7 | 277 | |
| mbedalvaro | 1:a4050fee11f7 | 278 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 1:a4050fee11f7 | 279 | numBlobs=blobArray.size(); |
| mbedalvaro | 1:a4050fee11f7 | 280 | } |
| mbedalvaro | 0:345b3bc7a0ea | 281 | |
| mbedalvaro | 30:d8af03f01cd4 | 282 | void blobConfig::addOneRigidLoopTest(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 5:73cd58b58f95 | 283 | rigidLoop* pBlob= new rigidLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 284 | pBlob->createBlob(blobArray.size(), SPOT_TEST, initpos, initspeed); |
| mbedalvaro | 5:73cd58b58f95 | 285 | // add this relaxing loop to the present config: |
| mbedalvaro | 5:73cd58b58f95 | 286 | blobArray.push_back(pBlob); |
| mbedalvaro | 5:73cd58b58f95 | 287 | |
| mbedalvaro | 5:73cd58b58f95 | 288 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 5:73cd58b58f95 | 289 | numBlobs=blobArray.size(); |
| mbedalvaro | 5:73cd58b58f95 | 290 | } |
| mbedalvaro | 5:73cd58b58f95 | 291 | |
| mbedalvaro | 30:d8af03f01cd4 | 292 | void blobConfig::addOneRigidTrackingSpot(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 30:d8af03f01cd4 | 293 | rigidLoop* pBlob= new rigidLoop(); |
| mbedalvaro | 30:d8af03f01cd4 | 294 | pBlob->createBlob(blobArray.size(), SPOT_TRACK, initpos, initspeed); |
| mbedalvaro | 30:d8af03f01cd4 | 295 | // add this relaxing loop to the present config: |
| mbedalvaro | 30:d8af03f01cd4 | 296 | blobArray.push_back(pBlob); |
| mbedalvaro | 30:d8af03f01cd4 | 297 | |
| mbedalvaro | 30:d8af03f01cd4 | 298 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 30:d8af03f01cd4 | 299 | numBlobs=blobArray.size(); |
| mbedalvaro | 30:d8af03f01cd4 | 300 | } |
| mbedalvaro | 0:345b3bc7a0ea | 301 | |
| mbedalvaro | 31:5f039cbddee8 | 302 | void blobConfig::addOneRigidTrackingSpotDot(vector2Df initpos, vector2Df initspeed) { |
| mbedalvaro | 31:5f039cbddee8 | 303 | rigidLoop* pBlob= new rigidLoop(); |
| mbedalvaro | 31:5f039cbddee8 | 304 | pBlob->createBlob(blobArray.size(), SPOT_TRACK_DOT, initpos, initspeed); |
| mbedalvaro | 31:5f039cbddee8 | 305 | // add this relaxing loop to the present config: |
| mbedalvaro | 31:5f039cbddee8 | 306 | blobArray.push_back(pBlob); |
| mbedalvaro | 31:5f039cbddee8 | 307 | |
| mbedalvaro | 31:5f039cbddee8 | 308 | // update auxiliary variable numBlobs (just for easy reference): |
| mbedalvaro | 31:5f039cbddee8 | 309 | numBlobs=blobArray.size(); |
| mbedalvaro | 31:5f039cbddee8 | 310 | } |
| mbedalvaro | 0:345b3bc7a0ea | 311 | // ================================================================================================================================================== |
| mbedalvaro | 0:345b3bc7a0ea | 312 | |
| mbedalvaro | 0:345b3bc7a0ea | 313 | |
| mbedalvaro | 1:a4050fee11f7 | 314 | 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 | 315 | for (int i=0; i<blobArray.size(); i++) { |
| mbedalvaro | 1:a4050fee11f7 | 316 | blobArray[i]->render = false; |
| mbedalvaro | 1:a4050fee11f7 | 317 | blobArray[i]->standByMode = false; |
| mbedalvaro | 1:a4050fee11f7 | 318 | } |
| mbedalvaro | 1:a4050fee11f7 | 319 | } |
| mbedalvaro | 0:345b3bc7a0ea | 320 | void blobConfig::allAlive() { |
| mbedalvaro | 1:a4050fee11f7 | 321 | for (int i=0; i<blobArray.size(); i++) { |
| mbedalvaro | 1:a4050fee11f7 | 322 | blobArray[i]->render = true; |
| mbedalvaro | 1:a4050fee11f7 | 323 | blobArray[i]->standByMode = true; |
| mbedalvaro | 1:a4050fee11f7 | 324 | } |
| mbedalvaro | 1:a4050fee11f7 | 325 | } |
| mbedalvaro | 1:a4050fee11f7 | 326 | |
| mbedalvaro | 0:345b3bc7a0ea | 327 | void blobConfig::allStandBy() { |
| mbedalvaro | 1:a4050fee11f7 | 328 | for (int i=0; i<blobArray.size(); i++) blobArray[i]->standByMode = true; |
| mbedalvaro | 0:345b3bc7a0ea | 329 | } |
| mbedalvaro | 0:345b3bc7a0ea | 330 | |
| mbedalvaro | 0:345b3bc7a0ea | 331 | void blobConfig::allResume() { |
| mbedalvaro | 1:a4050fee11f7 | 332 | for (int i=0; i<blobArray.size(); i++) blobArray[i]->standByMode = false; |
| mbedalvaro | 0:345b3bc7a0ea | 333 | } |
| mbedalvaro | 0:345b3bc7a0ea | 334 | |
| mbedalvaro | 1:a4050fee11f7 | 335 | void blobConfig::allVisible() { |
| mbedalvaro | 1:a4050fee11f7 | 336 | for (int i=0; i<blobArray.size(); i++) blobArray[i]->render = true; |
| mbedalvaro | 0:345b3bc7a0ea | 337 | } |
| mbedalvaro | 0:345b3bc7a0ea | 338 | |
| mbedalvaro | 0:345b3bc7a0ea | 339 | void blobConfig::allInvisible() { // note that they may continue to evolve |
| mbedalvaro | 1:a4050fee11f7 | 340 | for (int i=0; i<blobArray.size(); i++) blobArray[i]->render = false; |
| mbedalvaro | 0:345b3bc7a0ea | 341 | } |
| mbedalvaro | 0:345b3bc7a0ea | 342 | |
| mbedalvaro | 25:74cb85b85fd2 | 343 | void blobConfig::allSetColor(unsigned char c) { |
| mbedalvaro | 25:74cb85b85fd2 | 344 | for (int i=0; i<blobArray.size(); i++) blobArray[i]->setColor(c); |
| mbedalvaro | 25:74cb85b85fd2 | 345 | } |
| mbedalvaro | 32:52273c3291fe | 346 | |
| mbedalvaro | 32:52273c3291fe | 347 | void blobConfig::allSetGreen(unsigned char c) { |
| mbedalvaro | 32:52273c3291fe | 348 | for (int i=0; i<blobArray.size(); i++) blobArray[i]->setGreenColor(c); |
| mbedalvaro | 32:52273c3291fe | 349 | } |
| mbedalvaro | 32:52273c3291fe | 350 | |
| mbedalvaro | 32:52273c3291fe | 351 | void blobConfig::allSetBlue(unsigned char c) { |
| mbedalvaro | 32:52273c3291fe | 352 | for (int i=0; i<blobArray.size(); i++) blobArray[i]->setBlueColor(c); |
| mbedalvaro | 32:52273c3291fe | 353 | } |
| mbedalvaro | 25:74cb85b85fd2 | 354 | |
| mbedalvaro | 30:d8af03f01cd4 | 355 | void blobConfig::update() { // update dynamics of the blob configuration: |
| mbedalvaro | 31:5f039cbddee8 | 356 | int i; |
| mbedalvaro | 31:5f039cbddee8 | 357 | float minDist=5000, dist; |
| mbedalvaro | 31:5f039cbddee8 | 358 | bool win; |
| mbedalvaro | 31:5f039cbddee8 | 359 | // Depending on the config type, perform some special test and updates: |
| mbedalvaro | 30:d8af03f01cd4 | 360 | switch(myConfigType) { |
| mbedalvaro | 30:d8af03f01cd4 | 361 | // simple behaviours: |
| mbedalvaro | 30:d8af03f01cd4 | 362 | case ONE_ELASTIC_FOLLOWING: |
| mbedalvaro | 30:d8af03f01cd4 | 363 | case ONE_ELASTIC_MOUTH: |
| mbedalvaro | 30:d8af03f01cd4 | 364 | case ONE_ELASTIC_MOUTH_SMALL: |
| mbedalvaro | 30:d8af03f01cd4 | 365 | case BOUNCING_SPOTS: |
| mbedalvaro | 30:d8af03f01cd4 | 366 | case LORENTZ_SPOTS: |
| mbedalvaro | 30:d8af03f01cd4 | 367 | case FOLLOWING_SPOTS: |
| mbedalvaro | 31:5f039cbddee8 | 368 | case ONE_TRACKING_SPOT: |
| mbedalvaro | 31:5f039cbddee8 | 369 | case AIR_HOCKEY_GAME: |
| mbedalvaro | 31:5f039cbddee8 | 370 | // In all these simple cases, update dynamics of each blob independently: |
| mbedalvaro | 31:5f039cbddee8 | 371 | for (i=0; i<blobArray.size(); i++) { |
| mbedalvaro | 31:5f039cbddee8 | 372 | if (blobArray[i]->standByMode==false) blobArray[i]->update(); |
| mbedalvaro | 31:5f039cbddee8 | 373 | } |
| mbedalvaro | 31:5f039cbddee8 | 374 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 375 | // more game-like: |
| mbedalvaro | 30:d8af03f01cd4 | 376 | case CIRCULAR_PONG_GAME: |
| mbedalvaro | 31:5f039cbddee8 | 377 | // spot index 0 is a tracking spot, the background "anchor": |
| mbedalvaro | 31:5f039cbddee8 | 378 | if (blobArray[0]->standByMode==false) blobArray[0]->update(); |
| mbedalvaro | 31:5f039cbddee8 | 379 | // all the other spots are bouncing spots: |
| mbedalvaro | 31:5f039cbddee8 | 380 | for (i=1; i<blobArray.size(); i++) { |
| mbedalvaro | 31:5f039cbddee8 | 381 | if (blobArray[i]->standByMode==false) blobArray[i]->update(); |
| mbedalvaro | 31:5f039cbddee8 | 382 | } |
| mbedalvaro | 31:5f039cbddee8 | 383 | // GAME CHECK: is some bouncing spot too far from the anchor? if so, make it "explode" (and then dissapear, but leave this for now): |
| mbedalvaro | 31:5f039cbddee8 | 384 | for (i=1; i<blobArray.size(); i++) { |
| mbedalvaro | 31:5f039cbddee8 | 385 | dist=(blobArray[0]->getCenter()).distance(blobArray[i]->getCenter()); |
| mbedalvaro | 31:5f039cbddee8 | 386 | if (dist>1000) { |
| mbedalvaro | 31:5f039cbddee8 | 387 | blobArray[i]->explosion(); |
| mbedalvaro | 31:5f039cbddee8 | 388 | float anglaux=1.0*(i-1)/(blobArray.size()-1)*2*PI; |
| mbedalvaro | 31:5f039cbddee8 | 389 | blobArray[i]->setPositionSpeed(vector2Df(CENTER_AD_MIRROR_X+200*cos(anglaux), CENTER_AD_MIRROR_Y+200*sin(anglaux)), |
| mbedalvaro | 31:5f039cbddee8 | 390 | vector2Df(cos(anglaux),sin(anglaux))*10); |
| mbedalvaro | 31:5f039cbddee8 | 391 | } |
| mbedalvaro | 31:5f039cbddee8 | 392 | } |
| mbedalvaro | 30:d8af03f01cd4 | 393 | break; |
| mbedalvaro | 32:52273c3291fe | 394 | case RAIN_MODE: // this is just spots with gravity that reapears in the top position when reaching the bottom: |
| mbedalvaro | 32:52273c3291fe | 395 | // others are bouncing with gravity: |
| mbedalvaro | 32:52273c3291fe | 396 | for (i=0; i<blobArray.size(); i++) { |
| mbedalvaro | 32:52273c3291fe | 397 | if (blobArray[i]->standByMode==false) blobArray[i]->update(); |
| mbedalvaro | 32:52273c3291fe | 398 | } |
| mbedalvaro | 32:52273c3291fe | 399 | // GAME CHECKS: |
| mbedalvaro | 32:52273c3291fe | 400 | for (i=0; i<blobArray.size(); i++) { |
| mbedalvaro | 32:52273c3291fe | 401 | if (blobArray[i]->getCenter().y>MAX_AD_MIRRORS-20) { |
| mbedalvaro | 32:52273c3291fe | 402 | // Replace position of spot to the initial position: |
| mbedalvaro | 32:52273c3291fe | 403 | blobArray[i]->explosion(); |
| mbedalvaro | 32:52273c3291fe | 404 | blobArray[i]->resetPositionSpeed(); |
| mbedalvaro | 32:52273c3291fe | 405 | } |
| mbedalvaro | 32:52273c3291fe | 406 | } |
| mbedalvaro | 32:52273c3291fe | 407 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 408 | case VERTICAL_PINBALL_GAME: |
| mbedalvaro | 31:5f039cbddee8 | 409 | // spot index 0 is a tracking spot, the background "anchor": |
| mbedalvaro | 31:5f039cbddee8 | 410 | if (blobArray[0]->standByMode==false) blobArray[0]->update(); |
| mbedalvaro | 31:5f039cbddee8 | 411 | // others are bouncing with gravity: |
| mbedalvaro | 31:5f039cbddee8 | 412 | for (i=1; i<blobArray.size(); i++) { |
| mbedalvaro | 31:5f039cbddee8 | 413 | if (blobArray[i]->standByMode==false) blobArray[i]->update(); |
| mbedalvaro | 31:5f039cbddee8 | 414 | } |
| mbedalvaro | 31:5f039cbddee8 | 415 | // GAME CHECKS: |
| mbedalvaro | 31:5f039cbddee8 | 416 | for (i=1; i<blobArray.size(); i++) { |
| mbedalvaro | 31:5f039cbddee8 | 417 | dist=(blobArray[0]->getCenter()).distance(blobArray[i]->getCenter()); |
| mbedalvaro | 31:5f039cbddee8 | 418 | //(1) win (meaning bouncing spot very close to anchor): |
| mbedalvaro | 31:5f039cbddee8 | 419 | if (dist<60) { |
| mbedalvaro | 31:5f039cbddee8 | 420 | blobArray[i]->explosion(); |
| mbedalvaro | 31:5f039cbddee8 | 421 | blobArray[i]->setPositionSpeed(vector2Df(blobArray[0]->getCenter().x-400+rand()%800, blobArray[0]->getCenter().y-1200), |
| mbedalvaro | 31:5f039cbddee8 | 422 | vector2Df(0, 0)); |
| mbedalvaro | 31:5f039cbddee8 | 423 | } |
| mbedalvaro | 31:5f039cbddee8 | 424 | //(2) loose (meaning spot went outside range): |
| mbedalvaro | 31:5f039cbddee8 | 425 | if (blobArray[i]->getCenter().y>blobArray[0]->getCenter().y) { |
| mbedalvaro | 31:5f039cbddee8 | 426 | blobArray[i]->setPositionSpeed(vector2Df(blobArray[0]->getCenter().x-400+rand()%800, blobArray[0]->getCenter().y-1200), |
| mbedalvaro | 31:5f039cbddee8 | 427 | vector2Df(0, 0)); |
| mbedalvaro | 31:5f039cbddee8 | 428 | } |
| mbedalvaro | 31:5f039cbddee8 | 429 | } |
| mbedalvaro | 30:d8af03f01cd4 | 430 | break; |
| mbedalvaro | 31:5f039cbddee8 | 431 | case FISH_NET_GAME: |
| mbedalvaro | 31:5f039cbddee8 | 432 | // spot index 0 is a tracking spot, the background "anchor": |
| mbedalvaro | 31:5f039cbddee8 | 433 | if (blobArray[0]->standByMode==false) blobArray[0]->update(); |
| mbedalvaro | 31:5f039cbddee8 | 434 | // all the other spots are bouncing spots: |
| mbedalvaro | 31:5f039cbddee8 | 435 | for (i=1; i<blobArray.size(); i++) { |
| mbedalvaro | 31:5f039cbddee8 | 436 | if (blobArray[i]->standByMode==false) blobArray[i]->update(); |
| mbedalvaro | 31:5f039cbddee8 | 437 | } |
| mbedalvaro | 31:5f039cbddee8 | 438 | // GAME CHECKS: a win only, when all the spots are very close to the mother spot: |
| mbedalvaro | 31:5f039cbddee8 | 439 | win=true; |
| mbedalvaro | 31:5f039cbddee8 | 440 | for (i=1; i<blobArray.size(); i++) { |
| mbedalvaro | 31:5f039cbddee8 | 441 | dist=(blobArray[0]->getCenter()).distance(blobArray[i]->getCenter()); |
| mbedalvaro | 31:5f039cbddee8 | 442 | win&=(dist<80); |
| mbedalvaro | 31:5f039cbddee8 | 443 | } |
| mbedalvaro | 31:5f039cbddee8 | 444 | if (win) { |
| mbedalvaro | 31:5f039cbddee8 | 445 | for (i=1; i<blobArray.size(); i++) { |
| mbedalvaro | 31:5f039cbddee8 | 446 | blobArray[i]->explosion(); |
| mbedalvaro | 31:5f039cbddee8 | 447 | float anglaux=1.0*(i-1)/(blobArray.size()-1)*2*PI; |
| mbedalvaro | 31:5f039cbddee8 | 448 | blobArray[i]->setPositionSpeed(vector2Df(CENTER_AD_MIRROR_X+400*cos(anglaux), CENTER_AD_MIRROR_Y+400*sin(anglaux)), |
| mbedalvaro | 31:5f039cbddee8 | 449 | vector2Df(cos(anglaux),sin(anglaux))*10); |
| mbedalvaro | 31:5f039cbddee8 | 450 | } |
| mbedalvaro | 31:5f039cbddee8 | 451 | } |
| mbedalvaro | 31:5f039cbddee8 | 452 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 453 | case PAC_MAN_GAME: |
| mbedalvaro | 31:5f039cbddee8 | 454 | // spot index 0 is the pacman: |
| mbedalvaro | 31:5f039cbddee8 | 455 | if (blobArray[0]->standByMode==false) blobArray[0]->update(); |
| mbedalvaro | 31:5f039cbddee8 | 456 | // spot 1 and 2 are ghosts: |
| mbedalvaro | 31:5f039cbddee8 | 457 | if (blobArray[1]->standByMode==false) blobArray[1]->update(blobArray[0]->getCenter()); |
| mbedalvaro | 31:5f039cbddee8 | 458 | if (blobArray[2]->standByMode==false) blobArray[2]->update(blobArray[0]->getCenter()); // pass the position of the PACMAN! |
| mbedalvaro | 31:5f039cbddee8 | 459 | |
| mbedalvaro | 31:5f039cbddee8 | 460 | // GAME CHECK: are any ghost too close to the pacman? |
| mbedalvaro | 31:5f039cbddee8 | 461 | for (i=1; i<blobArray.size(); i++) { |
| mbedalvaro | 31:5f039cbddee8 | 462 | dist=(blobArray[0]->getCenter()).distance(blobArray[i]->getCenter()); |
| mbedalvaro | 31:5f039cbddee8 | 463 | if (minDist>dist) minDist=dist; |
| mbedalvaro | 31:5f039cbddee8 | 464 | } |
| mbedalvaro | 31:5f039cbddee8 | 465 | if (minDist<50) { |
| mbedalvaro | 31:5f039cbddee8 | 466 | blobArray[0]->explosion(); |
| mbedalvaro | 31:5f039cbddee8 | 467 | // then restart the game: |
| mbedalvaro | 31:5f039cbddee8 | 468 | // initConfig(PAC_MAN_GAME); |
| mbedalvaro | 31:5f039cbddee8 | 469 | } |
| mbedalvaro | 31:5f039cbddee8 | 470 | |
| mbedalvaro | 30:d8af03f01cd4 | 471 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 472 | default: |
| mbedalvaro | 30:d8af03f01cd4 | 473 | break; |
| mbedalvaro | 30:d8af03f01cd4 | 474 | } |
| mbedalvaro | 30:d8af03f01cd4 | 475 | |
| mbedalvaro | 30:d8af03f01cd4 | 476 | |
| mbedalvaro | 30:d8af03f01cd4 | 477 | } |
| mbedalvaro | 30:d8af03f01cd4 | 478 | |
| mbedalvaro | 30:d8af03f01cd4 | 479 | void blobConfig::computeBoundingBox() { |
| mbedalvaro | 30:d8af03f01cd4 | 480 | for (int i=0; i<blobArray.size(); i++) { |
| mbedalvaro | 30:d8af03f01cd4 | 481 | blobArray[i]->computeBoundingBox(); |
| mbedalvaro | 30:d8af03f01cd4 | 482 | } |
| mbedalvaro | 0:345b3bc7a0ea | 483 | } |
| mbedalvaro | 0:345b3bc7a0ea | 484 | |
| mbedalvaro | 1:a4050fee11f7 | 485 | 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 | 486 | for (int i=0; i<blobArray.size(); i++) { |
| mbedalvaro | 1:a4050fee11f7 | 487 | if (blobArray[i]->render==true) blobArray[i]->draw(); |
| mbedalvaro | 1:a4050fee11f7 | 488 | } |
| mbedalvaro | 0:345b3bc7a0ea | 489 | } |
| mbedalvaro | 0:345b3bc7a0ea | 490 | |
| mbedalvaro | 1:a4050fee11f7 | 491 | void blobConfig::sendConfData() { |
| mbedalvaro | 1:a4050fee11f7 | 492 | // For the time being, only "per blob" data sending: |
| mbedalvaro | 1:a4050fee11f7 | 493 | // (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 | 18:d72935b13858 | 494 | for (int i=0; i<blobArray.size(); i++) { |
| mbedalvaro | 1:a4050fee11f7 | 495 | 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 | 496 | } |
| mbedalvaro | 0:345b3bc7a0ea | 497 | } |
| mbedalvaro | 0:345b3bc7a0ea | 498 | |
| mbedalvaro | 0:345b3bc7a0ea | 499 | |
| mbedalvaro | 0:345b3bc7a0ea | 500 | |
| mbedalvaro | 0:345b3bc7a0ea | 501 |
