Changeset 12190 for code/trunk
- Timestamp:
- Feb 21, 2019, 3:02:00 PM (6 years ago)
- Location:
- code/trunk
- Files:
-
- 9 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/data/levels/towerDefense.oxw
r11052 r12190 23 23 <TowerDefenseSelecter> 24 24 <camerapositions> 25 <CameraPosition position=" 0,0,1300" lookat="0,0,0" absolute=true drag=true mouselook=true/>25 <CameraPosition position="-50,-1300,1000" lookat="-50,0,-400" absolute=true drag=true mouselook=true/> 26 26 </camerapositions> 27 27 </TowerDefenseSelecter> … … 250 250 explosionchunks = 6 251 251 252 health = 100 253 maxhealth = 10000000000000 254 initialhealth = 100 255 256 shieldhealth = 1000 257 initialshieldhealth = 1000 258 maxshieldhealth = 10000000000000 259 shieldabsorption = 0.8 260 shieldrechargerate = 1 261 shieldrechargewaittime = 1 262 263 primaryThrust = 100 264 auxilaryThrust = 30 265 rotationThrust = 80 266 267 lift = 1; 268 stallSpeed = 220; 269 270 boostPower = 15 271 boostPowerRate = 1 272 boostRate = 5 273 boostCooldownDuration = 10 274 275 shakeFrequency = 15 276 shakeAmplitude = 9 277 278 collisionType = "dynamic" 279 mass = 100 280 linearDamping = 0.7 281 angularDamping = 0.9999999 282 283 explosionSound = "sounds/Explosion2.ogg" 284 > 285 286 <engines> 287 <Engine position=" 0, 0, 0" 288 boostfactor = 2 289 speedfront = 400 290 speedback = 50 291 speedleftright = 50 292 speedupdown = 50 293 accelerationfront = 500 294 accelerationbrake = 500 295 accelerationback = 125 296 accelerationleftright = 125 297 accelerationupdown = 125 298 /> 299 </engines> 300 <attached> 301 <Model position="0,0,0" yaw=180 pitch=0 roll=0 scale=10 mesh="finalenemy1.mesh" /> 302 </attached> 303 <collisionShapes> 304 <BoxCollisionShape position="0,0,0" halfExtents="10, 3, 5" /> 305 <BoxCollisionShape position="13,-1.3,0" halfExtents="3, 1, 2" /> 306 <BoxCollisionShape position="-13,-1.3,0" halfExtents="3, 1, 2" /> 307 <BoxCollisionShape position="0,0,7" halfExtents="3, 2, 2" /> 308 <BoxCollisionShape position="0,0.1,-11" halfExtents="2.2, 1.8, 6" /> 309 <BoxCollisionShape position="0,0.1,-19" halfExtents="1.4, 1, 2" /> 310 </collisionShapes> 311 </TowerDefenseEnemy> 312 </Template> 313 314 <Template name=enemytowerdefense2> 315 <TowerDefenseEnemy 316 hudtemplate = spaceshiphud 317 camerapositiontemplate = spaceshipassffcameras 318 spawnparticlesource = "Orxonox/fairytwirl" 319 spawnparticleduration = 3 320 explosionchunks = 6 321 322 health = 40 323 maxhealth = 10000000000000 324 initialhealth = 30 325 326 shieldhealth = 0 327 initialshieldhealth = 0 328 maxshieldhealth = 0 329 shieldabsorption = 0.8 330 shieldrechargerate = 1 331 shieldrechargewaittime = 1 332 333 primaryThrust = 100 334 auxilaryThrust = 30 335 rotationThrust = 80 336 337 lift = 1; 338 stallSpeed = 220; 339 340 boostPower = 15 341 boostPowerRate = 1 342 boostRate = 5 343 boostCooldownDuration = 10 344 345 shakeFrequency = 15 346 shakeAmplitude = 9 347 348 collisionType = "dynamic" 349 mass = 100 350 linearDamping = 0.7 351 angularDamping = 0.9999999 352 353 explosionSound = "sounds/Explosion2.ogg" 354 > 355 356 <engines> 357 <Engine position=" 0, 0, 0" 358 boostfactor = 2 359 speedfront = 100 360 speedback = 50 361 speedleftright = 50 362 speedupdown = 50 363 accelerationfront = 500 364 accelerationbrake = 500 365 accelerationback = 125 366 accelerationleftright = 125 367 accelerationupdown = 125 368 /> 369 </engines> 370 <attached> 371 <Model position="0,0,0" yaw=180 pitch=0 roll=0 scale=7.5 mesh="finalenemy2.mesh" /> 372 </attached> 373 <collisionShapes> 374 <BoxCollisionShape position="0,0,0" halfExtents="10, 3, 5" /> 375 <BoxCollisionShape position="13,-1.3,0" halfExtents="3, 1, 2" /> 376 <BoxCollisionShape position="-13,-1.3,0" halfExtents="3, 1, 2" /> 377 <BoxCollisionShape position="0,0,7" halfExtents="3, 2, 2" /> 378 <BoxCollisionShape position="0,0.1,-11" halfExtents="2.2, 1.8, 6" /> 379 <BoxCollisionShape position="0,0.1,-19" halfExtents="1.4, 1, 2" /> 380 </collisionShapes> 381 </TowerDefenseEnemy> 382 </Template> 383 384 <Template name=enemytowerdefense3> 385 <TowerDefenseEnemy 386 hudtemplate = spaceshiphud 387 camerapositiontemplate = spaceshipassffcameras 388 spawnparticlesource = "Orxonox/fairytwirl" 389 spawnparticleduration = 3 390 explosionchunks = 6 391 392 health = 50 393 maxhealth = 10000000000000 394 initialhealth = 50 395 396 shieldhealth = 20 397 initialshieldhealth = 20 398 maxshieldhealth = 10000000000000 399 shieldabsorption = 0.8 400 shieldrechargerate = 1 401 shieldrechargewaittime = 1 402 403 primaryThrust = 100 404 auxilaryThrust = 30 405 rotationThrust = 80 406 407 lift = 1; 408 stallSpeed = 220; 409 410 boostPower = 15 411 boostPowerRate = 1 412 boostRate = 5 413 boostCooldownDuration = 10 414 415 shakeFrequency = 15 416 shakeAmplitude = 9 417 418 collisionType = "dynamic" 419 mass = 100 420 linearDamping = 0.7 421 angularDamping = 0.9999999 422 423 explosionSound = "sounds/Explosion2.ogg" 424 > 425 426 <engines> 427 <Engine position=" 0, 0, 0" 428 boostfactor = 2 429 speedfront = 100 430 speedback = 50 431 speedleftright = 50 432 speedupdown = 50 433 accelerationfront = 500 434 accelerationbrake = 500 435 accelerationback = 125 436 accelerationleftright = 125 437 accelerationupdown = 125 438 /> 439 </engines> 440 <attached> 441 <Model position="0,0,0" yaw=180 pitch=0 roll=0 scale=19 mesh="finalenemy3.mesh" /> 442 </attached> 443 <collisionShapes> 444 <BoxCollisionShape position="0,0,0" halfExtents="10, 3, 5" /> 445 <BoxCollisionShape position="13,-1.3,0" halfExtents="3, 1, 2" /> 446 <BoxCollisionShape position="-13,-1.3,0" halfExtents="3, 1, 2" /> 447 <BoxCollisionShape position="0,0,7" halfExtents="3, 2, 2" /> 448 <BoxCollisionShape position="0,0.1,-11" halfExtents="2.2, 1.8, 6" /> 449 <BoxCollisionShape position="0,0.1,-19" halfExtents="1.4, 1, 2" /> 450 </collisionShapes> 451 </TowerDefenseEnemy> 452 </Template> 453 454 <Template name=enemytowerdefense1*> 455 <TowerDefenseEnemy 456 hudtemplate = spaceshiphud 457 camerapositiontemplate = spaceshipassffcameras 458 spawnparticlesource = "Orxonox/fairytwirl" 459 spawnparticleduration = 3 460 explosionchunks = 6 461 252 462 health = 15 253 463 maxhealth = 15 … … 307 517 </Template> 308 518 309 <Template name=enemytowerdefense2 >519 <Template name=enemytowerdefense2*> 310 520 <TowerDefenseEnemy 311 521 hudtemplate = spaceshiphud … … 364 574 </engines> 365 575 <attached> 366 <Model position="0,0,0" yaw=0 pitch=0 roll=0 scale= 2.5 mesh="JumpEnemy3.mesh" />576 <Model position="0,0,0" yaw=0 pitch=0 roll=0 scale=9 mesh="finalenemy4.mesh" /> 367 577 </attached> 368 578 <collisionShapes> … … 380 590 </Template> 381 591 382 <Template name=enemytowerdefense3 >592 <Template name=enemytowerdefense3*> 383 593 <TowerDefenseEnemy 384 594 hudtemplate = spaceshiphud … … 437 647 </engines> 438 648 <attached> 439 <Model position="0,0,0" yaw=0 pitch=0 roll=0 scale=2.5 mesh="JumpEnemy4.mesh" /> 649 <Model position="0,0,0" yaw=0 pitch=0 roll=0 scale=2.5 mesh="JumpEnemy4.mesh" /> 440 650 </attached> 441 651 <collisionShapes> … … 452 662 </TowerDefenseEnemy> 453 663 </Template> 664 665 <Template name=therangeviewer> 666 <TowerDefenseRangeViewer> 667 <attached> 668 <Model yaw=0 pitch=0 roll=0 scale3D="1000,1000,10" mesh="cylinder.mesh" /> 669 </attached> 670 </TowerDefenseRangeViewer> 671 </Template> 672 454 673 455 674 <Level plugins = "towerdefense" gametype = "TowerDefense"> … … 495 714 tower4Cost=100 496 715 tower5Cost=100 497 fields="F1F1F1 R1I1I1I1I1O1F1F1F1F1F1F1F1498 F1F1F1I2F1F1F1F1F1F1F1F1F1F1F1F1499 F1F1F1I2F1F1F1 F1F1F1F1F1F1F1F1F1500 F1 F1F1I2F1F1F1F1F1F1F1Y1Y1Y1F1F1501 F1F1F1I2F1F1F1F1F1F1F1F1F1F1 F1F1502 F1F1F1I2F1 F1F1F1F1F1F1Y1Y1Y1F1F1503 F1F1F1 R2I3I3I3I3L3F1F1F1F1F1F1F1504 F1F1F1 F1F1F1F1F1I2F1F1F1F1F1F1F1505 F1F1F1F1F1F1F1F1I2F1F1 F1F1F1F1F1506 X1I1I1I1R0F1F1F1I2F1F1F1F1F1F1F1507 F1F1F1F1I0F1F1F1I2F1F1F1F1F1F1F1508 F1F1F1F1I0F1F1F1I2F1F1 F1F1F1F1F1509 F1F1F1F1 L1I1I1I1L2F1F1F1F1F1F1F1510 F1F1F1F1 F1F1F1F1F1F1F1F1F1F1F1F1511 F1F1 F1F1F1F1F1F1F1F1F1F1F1F1F1F1512 F1F1F1F1F1F1F1F1F1 F1F1F1F1F1F1F1"716 fields="F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1 717 F1F1F1R1I1I1I1I1I1I1I1I1I1I1R0F1 718 F1F1F1I2F1F1F1Y1F1F1F1F1F1F1I0F1 719 F1Y1F1I2F1F1F1F1F1F1F1F1Y1F1I0F1 720 F1F1F1I2F1F1F1F1F1F1F1F1F1F1I0F1 721 F1F1F1I2F1Y1F1F1F1F1F1L0I3I3R3F1 722 F1F1F1I2F1F1F1F1F1F1F1I0F1F1F1F1 723 F1F1F1R2I3I3I3I3L3F1F1I0F1F1Y1F1 724 F1F1F1F1F1F1F1F1I2F1F1I0F1F1F1F1 725 F1F1F1F1F1F1F1F1I2F1F1I0F1F1F1F1 726 X1I1I1I1R0F1Y1F1I2F1F1I0F1F1F1F1 727 F1F1F1F1I0F1F1F1I2F1F1L1I1I1R0F1 728 F1F1F1F1I0F1F1F1I2F1F1F1F1F1I0F1 729 F1F1F1F1L1I1I1I1L2F1F1F1F1Y1I0F1 730 F1F1Y1F1F1F1F1F1F1F1F1F1F1F1I0F1 731 F1F1F1F1F1F1F1F1F1Y1F1F1F1F1O0F1" 513 732 width=16 514 733 height=16 … … 520 739 > 521 740 <camerapositions> 522 <CameraPosition position="0,0,1 400" lookat="0,0,0" absolute=true />741 <CameraPosition position="0,0,1500" lookat="0,0,0" absolute=true /> 523 742 </camerapositions> 524 743 </TowerDefenseCenterpoint> -
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.