Changeset 12190 for code/trunk/src/modules/towerdefense
- Timestamp:
- Feb 21, 2019, 3:02:00 PM (6 years ago)
- Location:
- code/trunk
- Files:
-
- 8 edited
- 4 copied
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
/code/branches/TowerDefense_HS18 (added) merged: 12025,12038,12125-12126,12137,12153,12165
- Property svn:mergeinfo changed
-
code/trunk/src/modules/towerdefense/CMakeLists.txt
r10629 r12190 10 10 TowerDefenseField.cc 11 11 TDCoordinate.cc 12 TowerDefenseController.cc 13 TowerDefenseRangeViewer.cc 12 14 ) 13 15 -
code/trunk/src/modules/towerdefense/TowerDefense.cc
r11716 r12190 76 76 #include "TowerDefenseCenterpoint.h" 77 77 #include "worldentities/SpawnPoint.h" 78 #include "controllers/WaypointController.h" 78 #include "worldentities/StaticEntity.h" 79 #include "TowerDefenseController.h" //muss ich noch in den richtigen Ordner verschieben 79 80 #include "graphics/Model.h" 80 81 #include "infos/PlayerInfo.h" … … 82 83 #include "core/CoreIncludes.h" 83 84 #include "Highscore.h" 85 #include "util/Output.h" 86 #include "TowerDefenseRangeViewer.h" 87 84 88 85 89 namespace orxonox … … 92 96 93 97 selecter = nullptr; 98 rangeViewer = nullptr; 94 99 this->player_ = nullptr; 95 100 this->setHUDTemplate("TowerDefenseHUD"); … … 124 129 selecter = new TowerDefenseSelecter(this->center_->getContext()); 125 130 } 131 if(rangeViewer == nullptr){ 132 rangeViewer = new TowerDefenseRangeViewer(this->center_->getContext()); 133 } 126 134 selecter->addTemplate(center_->getSelecterTemplate()); 135 rangeViewer->addTemplate("therangeviewer"); 136 rangeViewer->setPosition(-10000,0,-500); 127 137 center_->attach(selecter); 138 center_->attach(rangeViewer); 128 139 } 129 140 else // If no centerpoint was specified, an error is thrown and the level is exited. … … 136 147 137 148 createFields(); 149 138 150 TeamDeathmatch::start(); 139 151 … … 157 169 en1->addTemplate("enemytowerdefense1"); 158 170 en1->setScale(3); 159 en1->setHealth(en1->getHealth() + this->getWaveNumber()*4); 171 en1->setHealth(en1->getHealth() + this->getWaveNumber()*1/3*0.5*(en1->getHealth())); 172 en1->setShieldHealth(en1->getShieldHealth() + this->getWaveNumber()*1/3*0.5*(en1->getShieldHealth())); 160 173 break; 161 174 … … 163 176 en1->addTemplate("enemytowerdefense2"); 164 177 en1->setScale(2); 165 en1->setHealth(en1->getHealth() + this->getWaveNumber()* 4);178 en1->setHealth(en1->getHealth() + this->getWaveNumber()*1/3*0.3*(en1->getHealth())); 166 179 break; 167 180 … … 169 182 en1->addTemplate("enemytowerdefense3"); 170 183 en1->setScale(1); 171 en1->setHealth(en1->getHealth() + this->getWaveNumber()*4); 184 en1->setHealth(en1->getHealth() + this->getWaveNumber()*1/3*0.2*(en1->getHealth())); 185 en1->setShieldHealth(en1->getShieldHealth() + this->getWaveNumber()*1/3*0.5*(en1->getShieldHealth())); 172 186 break; 173 187 } … … 175 189 en1->setTeam(2); 176 190 177 WaypointController* controller = (WaypointController*)(en1->getXMLController()); 178 179 if (controller != nullptr && waypoints_.size() > 1) 191 //Jedem Enemy wird ein eigener Controller uebergeben 192 TowerDefenseController* controller = new TowerDefenseController(this->center_->getContext()); 193 controller->setControllableEntity(en1); 194 en1->setController(controller); 195 196 if (waypoints_.size() > 1) 180 197 { 181 198 en1->setPosition(waypoints_.at(0)->getPosition() + offset_); … … 192 209 } 193 210 194 enemies_.push_back(en1); 211 auto pair = std::make_pair(orxonox::WeakPtr<TowerDefenseEnemy>(en1), controller); 212 enemies_.push_back(pair); 195 213 } 196 214 … … 277 295 timeSinceLastSpawn_ += dt; 278 296 297 if(selecter != nullptr && getField(selecter->selectedPos_)->canUpgrade() == true ){ 298 rangeViewer->setPosition(((selecter->selectedPos_->GetX())-8)*100, ((selecter->selectedPos_->GetY())-8)*100, 200); 299 } else { 300 rangeViewer->setPosition(-10000,0,-500); 301 } 302 279 303 //build/upgrade tower at selecter position 280 304 if (selecter != nullptr && selecter->buildTower_ == true) … … 291 315 } 292 316 } 317 293 318 294 for (std::list<WeakPtr<TowerDefenseEnemy>>::iterator it = enemies_.begin(); it != enemies_.end(); ) 295 { 296 if (*it == nullptr) 297 { 298 // the enemy was destroyed by a tower - remove it from the list 299 enemies_.erase(it++); 300 addCredit(1); 319 for (EnemyList::iterator it = enemies_.begin(); it != enemies_.end(); ) 320 { 321 WeakPtr<TowerDefenseEnemy> enemy = it->first; 322 TowerDefenseController* ctrl = it->second; 323 324 if (enemy == nullptr) 325 { 326 327 // the enemy was destroyed by a tower - remove it from the list AND destroy the corresponding controler 328 ctrl->destroy(); 329 it = enemies_.erase(it); 330 331 int currentType = this->getWaveNumber() % 3 + 1; 332 switch (currentType){ //Entscheidet, wie viele Credits vergeben werden sollen 333 case 1: //currently boss wave 334 addCredit(100); 335 if (this->getLifes() <= 90) 336 { 337 this->setLifes(this->getLifes() + 10); 338 } 339 break; 340 341 case 2: //currently mass wave 342 addCredit(5); 343 break; 344 345 case 3: //currently moderate wave 346 addCredit(10); 347 break; 348 } 301 349 } 302 350 else 303 351 { 304 352 //if ships are at the end they get destroyed 305 Vector3 ship = (*it)->getRVWorldPosition();353 Vector3 ship = enemy->getRVWorldPosition(); 306 354 float distance = ship.distance(endpoint_); 307 355 if(distance < 40) 308 356 { 309 (*it)->destroy(); 310 enemies_.erase(it++); 357 enemy->getController()->destroy(); 358 enemy->destroy(); 359 360 it = enemies_.erase(it); 311 361 this->reduceLifes(1); 312 362 if (this->getLifes() == 0) … … 328 378 timeSinceLastSpawn_ -= 1.0; 329 379 -- waveSize_; 330 addTowerDefenseEnemy(this->getWaveNumber() % 3 + 1); 380 addTowerDefenseEnemy(this->getWaveNumber() % 3 + 1); //Gegnertyp rotiert durch die 3 moeglichen, er beginnt bei Typ 2!!! 331 381 } 332 382 else if (timeUntilNextWave_ <= 0.0 && waveSize_ <= 0) 333 383 { 384 int currentType = this->getWaveNumber() % 3 + 1; 334 385 //New wave 335 386 ++ waveNumber_; … … 337 388 338 389 timeUntilNextWave_ = waveNumber_+20.0f; 339 waveSize_ = waveNumber_+5; 390 // Entscheidung, wie gross die einzelnen waves sein sollen. 391 switch (currentType){ 392 case 1: //currently boss wave 393 waveSize_ = waveNumber_+10; 394 break; 395 396 case 2: //currently mass wave 397 waveSize_ = (waveNumber_+10)/2; 398 break; 399 400 case 3: //currently moderate wave 401 waveSize_ = 1; 402 break; 403 } 340 404 } 341 405 … … 349 413 std::string fields = center_->getFields(); 350 414 int pos = 0; 351 for (int j = 15; j >= 0; --j) 352 { 353 for (int i = 0; i < 16; ++i)415 for (int j = 15; j >= 0; --j) //Vertical number of rows 416 { 417 for (int i = 0; i <= 15; ++i) //Horizontal number of rows 354 418 { 355 419 coord.Set(i,j); … … 412 476 } 413 477 478 //Falls kein anliegender Weg gefunden wurde. 414 479 delete nextCoord; 415 480 return nullptr; -
code/trunk/src/modules/towerdefense/TowerDefense.h
r11099 r12190 32 32 #include "TDCoordinate.h" 33 33 #include "TowerDefenseSelecter.h" 34 #include "TowerDefenseController.h" 34 35 #include "towerdefense/TowerDefensePrereqs.h" 35 36 #include "gametypes/TeamDeathmatch.h" … … 37 38 #include "util/Output.h" 38 39 #include "TowerDefenseField.h" 40 #include "TowerDefenseRangeViewer.h" 39 41 40 42 namespace orxonox 41 43 { 44 using EnemyList = std::list<std::pair<orxonox::WeakPtr<TowerDefenseEnemy>, TowerDefenseController*>>; 45 42 46 /** 43 47 @brief … … 73 77 virtual TDCoordinate* getNextStreetCoord(TDCoordinate*); 74 78 75 TowerDefenseSelecter* selecter; 79 TowerDefenseSelecter* selecter; 80 TowerDefenseRangeViewer* rangeViewer; 76 81 77 82 private: … … 86 91 int waveNumber_; 87 92 int lifes_; 88 std::list<orxonox::WeakPtr<TowerDefenseEnemy>>enemies_;93 EnemyList enemies_; 89 94 TowerDefenseField* fields_[16][16]; 90 95 std::vector<orxonox::WeakPtr<TowerDefenseField>> waypoints_; -
code/trunk/src/modules/towerdefense/TowerDefenseEnemy.cc
r11099 r12190 29 29 TowerDefenseEnemy::~TowerDefenseEnemy() 30 30 { 31 32 31 } 33 32 -
code/trunk/src/modules/towerdefense/TowerDefenseField.cc
r11071 r12190 1 1 2 /* 2 3 * ORXONOX - the hottest 3D action shooter ever to exist … … 282 283 } 283 284 } 285 284 286 } 285 287 } -
code/trunk/src/modules/towerdefense/TowerDefensePrereqs.h
r10258 r12190 68 68 69 69 class TowerDefenseTower; 70 70 class TowerDefenseRangeViewer; 71 71 class TowerDefenseCenterpoint; 72 72 class TowerDefenseHUDController; -
code/trunk/src/modules/towerdefense/towerdefensereadme.txt
r9271 r12190 12 12 Represents a Tower 13 13 I'm not actually sure if you have to code C++ in order to have your result. I would suggest to simply create a new spaceship template or maybe better a 14 new template for a pawn. (The tower don't need to be spaceships; pawn is just fine.)14 new template for a pawn. (The towers don't need to be spaceships; pawn is just fine.) 15 15 Example for a template: /data/levels/templates/assff.oxt && /data/levels/include/weaponSettingsAssff.oxi 16 16 @ assff.oxt: you don't need an engine (or your towers could fly away :-) and probably no Cameras. (just try what happens if you leave them out.)
Note: See TracChangeset
for help on using the changeset viewer.