Changeset 12182
- Timestamp:
- Dec 11, 2018, 6:20:24 PM (6 years ago)
- Location:
- code/branches/Merge_HS18
- Files:
-
- 10 edited
- 4 copied
Legend:
- Unmodified
- Added
- Removed
-
code/branches/Merge_HS18
- Property svn:mergeinfo changed
/code/branches/TowerDefense_HS18 (added) merged: 12025,12038,12125-12126,12137,12153,12165
- Property svn:mergeinfo changed
-
code/branches/Merge_HS18/data/levels/emptyLevel.oxw
r11719 r12182 29 29 <Light type=directional position="0,0,0" direction="0.253, 0.593, -0.765" diffuse="1.0, 0.9, 0.9, 1.0" specular="1.0, 0.9, 0.9, 1.0"/> 30 30 <SpawnPoint team=0 position="-200,0,0" lookat="0,0,0" spawnclass=SpaceShip pawndesign=spaceshipescort /> 31 <Model position=“0,0,0“ mesh="finalenemy2.mesh" scale="3" /> 31 32 32 33 </Scene> -
code/branches/Merge_HS18/data/levels/towerDefense.oxw
r11052 r12182 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/branches/Merge_HS18/src/modules/towerdefense/CMakeLists.txt
r10629 r12182 10 10 TowerDefenseField.cc 11 11 TDCoordinate.cc 12 TowerDefenseController.cc 13 TowerDefenseRangeViewer.cc 12 14 ) 13 15 -
code/branches/Merge_HS18/src/modules/towerdefense/TowerDefense.cc
r12180 r12182 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 … … 280 298 timeSinceLastSpawn_ += dt; 281 299 300 if(selecter != nullptr && getField(selecter->selectedPos_)->canUpgrade() == true ){ 301 rangeViewer->setPosition(((selecter->selectedPos_->GetX())-8)*100, ((selecter->selectedPos_->GetY())-8)*100, 200); 302 } else { 303 rangeViewer->setPosition(-10000,0,-500); 304 } 305 282 306 //build/upgrade tower at selecter position 283 307 if (selecter != nullptr && selecter->buildTower_ == true) … … 295 319 } 296 320 } 321 297 322 298 for (std::list<WeakPtr<TowerDefenseEnemy>>::iterator it = enemies_.begin(); it != enemies_.end(); ) 299 { 300 if (*it == nullptr) 301 { 302 // the enemy was destroyed by a tower - remove it from the list 303 enemies_.erase(it++); 304 addCredit(1); 323 for (EnemyList::iterator it = enemies_.begin(); it != enemies_.end(); ) 324 { 325 WeakPtr<TowerDefenseEnemy> enemy = it->first; 326 TowerDefenseController* ctrl = it->second; 327 328 if (enemy == nullptr) 329 { 330 331 // the enemy was destroyed by a tower - remove it from the list AND destroy the corresponding controler 332 ctrl->destroy(); 333 it = enemies_.erase(it); 334 335 int currentType = this->getWaveNumber() % 3 + 1; 336 switch (currentType){ //Entscheidet, wie viele Credits vergeben werden sollen 337 case 1: //currently boss wave 338 addCredit(100); 339 if (this->getLifes() <= 90) 340 { 341 this->setLifes(this->getLifes() + 10); 342 } 343 break; 344 345 case 2: //currently mass wave 346 addCredit(5); 347 break; 348 349 case 3: //currently moderate wave 350 addCredit(10); 351 break; 352 } 305 353 } 306 354 else 307 355 { 308 356 //if ships are at the end they get destroyed 309 Vector3 ship = (*it)->getRVWorldPosition();357 Vector3 ship = enemy->getRVWorldPosition(); 310 358 float distance = ship.distance(endpoint_); 311 359 if(distance < 40) 312 360 { 313 (*it)->destroy(); 314 enemies_.erase(it++); 361 enemy->getController()->destroy(); 362 enemy->destroy(); 363 364 it = enemies_.erase(it); 315 365 this->reduceLifes(1); 316 366 if (this->getLifes() == 0) … … 332 382 timeSinceLastSpawn_ -= 1.0; 333 383 -- waveSize_; 334 addTowerDefenseEnemy(this->getWaveNumber() % 3 + 1); 384 addTowerDefenseEnemy(this->getWaveNumber() % 3 + 1); //Gegnertyp rotiert durch die 3 moeglichen, er beginnt bei Typ 2!!! 335 385 } 336 386 else if (timeUntilNextWave_ <= 0.0 && waveSize_ <= 0) 337 387 { 388 int currentType = this->getWaveNumber() % 3 + 1; 338 389 //New wave 339 390 ++ waveNumber_; … … 341 392 342 393 timeUntilNextWave_ = waveNumber_+20.0f; 343 waveSize_ = waveNumber_+5; 394 // Entscheidung, wie gross die einzelnen waves sein sollen. 395 switch (currentType){ 396 case 1: //currently boss wave 397 waveSize_ = waveNumber_+10; 398 break; 399 400 case 2: //currently mass wave 401 waveSize_ = (waveNumber_+10)/2; 402 break; 403 404 case 3: //currently moderate wave 405 waveSize_ = 1; 406 break; 407 } 344 408 } 345 409 … … 353 417 std::string fields = center_->getFields(); 354 418 int pos = 0; 355 for (int j = 15; j >= 0; --j) 356 { 357 for (int i = 0; i < 16; ++i)419 for (int j = 15; j >= 0; --j) //Vertical number of rows 420 { 421 for (int i = 0; i <= 15; ++i) //Horizontal number of rows 358 422 { 359 423 coord.Set(i,j); … … 416 480 } 417 481 482 //Falls kein anliegender Weg gefunden wurde. 418 483 delete nextCoord; 419 484 return nullptr; -
code/branches/Merge_HS18/src/modules/towerdefense/TowerDefense.h
r11099 r12182 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/branches/Merge_HS18/src/modules/towerdefense/TowerDefenseEnemy.cc
r11099 r12182 29 29 TowerDefenseEnemy::~TowerDefenseEnemy() 30 30 { 31 32 31 } 33 32 -
code/branches/Merge_HS18/src/modules/towerdefense/TowerDefenseField.cc
r11071 r12182 1 1 2 /* 2 3 * ORXONOX - the hottest 3D action shooter ever to exist … … 282 283 } 283 284 } 285 284 286 } 285 287 } -
code/branches/Merge_HS18/src/modules/towerdefense/TowerDefensePrereqs.h
r10258 r12182 68 68 69 69 class TowerDefenseTower; 70 70 class TowerDefenseRangeViewer; 71 71 class TowerDefenseCenterpoint; 72 72 class TowerDefenseHUDController; -
code/branches/Merge_HS18/src/modules/towerdefense/towerdefensereadme.txt
r9271 r12182 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.