Changeset 11493 for code/trunk/src/modules/hover/Hover.cc
- Timestamp:
- Oct 16, 2017, 4:07:37 PM (7 years ago)
- Location:
- code/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
/code/branches/tgidronFS16 (added) merged: 11140,11151,11163,11168-11169,11171,11177,11182,11184,11192,11196,11198,11201
- Property svn:mergeinfo changed
-
code/trunk/src/modules/hover/Hover.cc
r11071 r11493 24 24 * Co-authors: 25 25 * Cyrill Burgener 26 * Tomer Gidron 26 27 * 27 28 */ … … 33 34 34 35 #include "Hover.h" 35 36 #include "chat/ChatManager.h" 36 37 #include "HoverOrigin.h" 37 38 #include "HoverWall.h" … … 39 40 #include "MazeGenerator.h" 40 41 #include "core/CoreIncludes.h" 42 #include "gamestates/GSLevel.h" 43 #include "HoverShip.h" 44 45 #include "pickup/PickupSpawner.h" 46 #include "pickup/Pickup.h" 41 47 42 48 namespace orxonox … … 51 57 this->numberOfFlags_ = 1; 52 58 this->firstTick_ = true; 59 level = 1; //start at level 1 60 flagsTaken = 0;// took 0 flags in the beginning 61 lives = 3; 62 63 numCells = 0; 64 cellSize = 0; 65 cellHeight = 0; 66 67 bLevelUpgradeHUD = false; 68 69 totFlags = 0; 53 70 54 71 this->setHUDTemplate("HoverHUD"); 55 } 56 57 void Hover::tick(float dt) 58 {59 SUPER(Hover, tick, dt);60 72 73 } 74 75 void Hover::start() 76 { 77 Gametype::start(); 61 78 if(this->firstTick_ && this->origin_) 62 79 { 63 80 this->firstTick_ = false; 64 81 65 int numCells = this->origin_->getNumCells(); 66 int cellSize = this->origin_->getCellSize(); 67 int cellHeight = this->origin_->getCellHeight(); 82 numCells = this->origin_->getNumCells(); 83 cellSize = this->origin_->getCellSize(); 84 cellHeight = this->origin_->getCellHeight(); 85 86 //TODO 87 //create boolean array/vector to assert that no two objects are placed in the same way 88 68 89 69 90 MazeGenerator generator(numCells); … … 81 102 } 82 103 104 105 //Ground 106 for(int i = 0; i<numCells; i++){ 107 for(int j = 0; j<numCells; j++){ 108 StaticEntity* groundCell = new StaticEntity(origin_->getContext()); 109 110 groundCell->addTemplate(origin_->getGroundTemplate()); 111 groundCell->setPosition(get3dCoordinates(i,j,-60)); 112 } 113 114 } 115 116 117 83 118 //Generate inner Walls according to levelcode 84 119 for(int y=0; y<numCells; y++){ 85 120 for(int x=0; x<numCells; x++){ 86 switch(levelcode[ y * numCells + x ]){ 121 switch(levelcode[ y * numCells + x ]) 122 { 87 123 case 1: (new HoverWall(origin_->getContext()))->init(x+1, numCells-y, cellSize, cellHeight, 1); 88 124 break; 89 125 case 3: (new HoverWall(origin_->getContext()))->init(x+1, numCells-y, cellSize, cellHeight, 1); 90 126 case 2: (new HoverWall(origin_->getContext()))->init(x+1, numCells-y, cellSize, cellHeight, 0); 91 default: break; 127 default: 128 break; 92 129 } 93 } 94 } 95 96 //Generate 5 flags randomly 97 for ( int i = 0; i < 5; i++ ) 98 { 99 HoverFlag* flag = new HoverFlag(origin_->getContext()); 100 flag->init(rand()%numCells, rand()%numCells, cellSize); 101 flags_.push_back(flag); 102 } 103 104 }//firsttick end 130 } 131 } 132 133 createFlags(); 134 135 //Generate 3 PickupSpawners randomly (destroy hover pickup) 136 for (int i = 0; i<3; i++) 137 { 138 PickupSpawner* pickupSpawner = new PickupSpawner(origin_->getContext()); 139 140 pickupSpawner->setPosition(get3dCoordinates(rand()%numCells, rand()%numCells, 0.0f)); 141 pickupSpawner->setPickupTemplateName(origin_->getPickupTemplate()); 142 pickupSpawner->setMaxSpawnedItems(3); 143 pickupSpawner->setRespawnTime(30); 144 pickupSpawner->setTriggerDistance(40); 145 // Add pickup spawner to the pickup spawner list 146 pickupSpawners_.push_back(pickupSpawner); 147 } 148 149 //Generate 3 PickupSpawners randomly (speed pickup) 150 for (int i = 0; i<3; i++) 151 { 152 PickupSpawner* pickupSpawner = new PickupSpawner(origin_->getContext()); 153 154 pickupSpawner->setPosition(get3dCoordinates(rand()%numCells, rand()%numCells, 0.0f)); 155 pickupSpawner->setPickupTemplateName(origin_->getPickupTemplateSpeed()); 156 pickupSpawner->setMaxSpawnedItems(3); 157 pickupSpawner->setRespawnTime(30); 158 pickupSpawner->setTriggerDistance(40); 159 // Add pickup spawner to the pickup spawner list 160 pickupSpawners_.push_back(pickupSpawner); 161 } 162 163 //Generate 3 PickupSpawners randomly (shrink pickup) 164 for (int i = 0; i<3; i++) 165 { 166 PickupSpawner* pickupSpawner = new PickupSpawner(origin_->getContext()); 167 168 pickupSpawner->setPosition(get3dCoordinates(rand()%numCells, rand()%numCells, 0.0f)); 169 pickupSpawner->setPickupTemplateName(origin_->getPickupTemplateShrink()); 170 pickupSpawner->setMaxSpawnedItems(3); 171 pickupSpawner->setRespawnTime(30); 172 pickupSpawner->setTriggerDistance(40); 173 // Add pickup spawner to the pickup spawner list 174 pickupSpawners_.push_back(pickupSpawner); 175 } 176 177 //***************************************************************************** 178 179 //Generate destroyable crates randomly on field 180 181 for (int i = 0; i<10; i++){ 182 183 Pawn* crate = new Pawn(origin_->getContext()); 184 185 crate->addTemplate(origin_->getObstacleTemplate()); 186 crate->setPosition(get3dCoordinates(rand()%numCells, rand()%numCells, 43.0f)); 187 188 189 } 190 191 192 193 194 //If no lives are left, end game 195 if(lives <= 0) 196 { 197 GSLevel::startMainMenu(); 198 } 199 200 } 201 } 202 203 204 // generate new Flags 205 void Hover::createFlags() 206 { 207 //TODO 208 //Generate flags randomly using bool array 209 210 //Generate 5 flags randomly on field 211 for ( int i = 0; i < 5; i++ ) 212 { 213 HoverFlag* flag = new HoverFlag(origin_->getContext()); 214 flag->init(rand()%numCells, rand()%numCells, cellSize); 215 flags_.push_back(flag); 216 217 218 219 if(flags_[i]->getPosition() == get3dCoordinates(0,0,-60)) 220 { 221 flags_[i]->destroyLater(); 222 flags_.erase(flags_.begin()+i); 223 } 224 } 225 226 } 227 228 void Hover::tick(float dt) 229 { 230 SUPER(Hover, tick, dt); 231 105 232 106 233 // Check if ship collided with one of the flags 107 for ( unsigned int i = 0; i < flags_.size(); i++ ){ 108 if(flags_[i]->getCollided()){ 234 for ( unsigned int i = 0; i < flags_.size(); i++ ) 235 { 236 if(flags_[i]->getCollided()) 237 { 109 238 flags_[i]->destroyLater(); 110 239 flags_.erase (flags_.begin()+i); 111 } 240 totFlags++; 241 if(flags_.size()<=0){ 242 //ChatManager::message("Level Up!"); 243 244 levelUp(); 245 } 246 } 247 112 248 } 113 249 numberOfFlags_ = flags_.size(); 250 251 if(lives <= 0){ 252 GSLevel::startMainMenu(); 253 } 254 } 255 256 //start new level - call to create new flags 257 void Hover::levelUp() 258 { 259 level++; 260 //increment lives after every 4 levels 261 if(level%4 == 0) 262 { 263 lives++; 264 } 265 createFlags(); 266 toggleShowLevel(); 267 showLevelTimer.setTimer(2.0f, false, createExecutor(createFunctor(&Hover::toggleShowLevel, this))); 268 269 //spawn one additional crate randomly 270 Pawn* crate = new Pawn(origin_->getContext()); 271 crate->addTemplate(origin_->getObstacleTemplate()); 272 crate->setPosition(get3dCoordinates(rand()%numCells, rand()%numCells, 43.0f)); 273 274 } 275 276 Vector3 Hover::get3dCoordinates(int x, int y, float heightOffset) 277 { 278 return Vector3(x*cellSize*1.0f + cellSize/2, heightOffset, y*cellSize*1.0f + cellSize/2); 279 } 280 281 //if killed, subtract number of lives. If lives == 0, end game 282 void Hover::costLife() 283 { 284 lives--; 285 if (lives <= 0) 286 GSLevel::startMainMenu(); 114 287 } 115 288 }
Note: See TracChangeset
for help on using the changeset viewer.