- Timestamp:
- Sep 17, 2015, 3:32:50 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/towerdefenseFabien/src/modules/towerdefense/TowerDefense.cc
r10589 r10591 87 87 namespace orxonox 88 88 { 89 static const std::string __CC_addTower_name = "addTower";90 static const std::string __CC_upgradeTower_name = "upgradeTower";91 92 SetConsoleCommand("TowerDefense", __CC_addTower_name, &TowerDefense::addTower ).addShortcut().defaultValues(1);93 SetConsoleCommand("TowerDefense", __CC_upgradeTower_name, &TowerDefense::upgradeTower).addShortcut().defaultValues(0);94 95 89 RegisterUnloadableClass(TowerDefense); 96 90 … … 102 96 this->player_ = NULL; 103 97 this->setHUDTemplate("TowerDefenseHUD"); 104 this->nextwaveTimer_.setTimer(10, false, createExecutor(createFunctor(&TowerDefense::nextwave, this))); 105 this->nextwaveTimer_.stopTimer(); 106 this->waves_ = 0; 107 this->time = 0; 98 this->waveNumber_ = 0; 99 this->timeSinceLastSpawn_ = 0.0; 100 this->timeUntilNextWave_ = 0.0; 108 101 this->credit_ = 0; 109 102 this->lifes_ = 0; 103 this->waveSize_ = 0; 104 offset_ = Vector3(0,0,10); 110 105 111 106 //this->stats_ = new TowerDefensePlayerStats(); 112 113 ModifyConsoleCommand(__CC_addTower_name).setObject(this);114 ModifyConsoleCommand(__CC_upgradeTower_name).setObject(this);115 107 } 116 108 117 109 TowerDefense::~TowerDefense() 118 { /* Part of a temporary hack to allow the player to add towers */110 { 119 111 if (this->isInitialized()) 120 112 { 121 ModifyConsoleCommand(__CC_addTower_name).setObject(NULL); 122 ModifyConsoleCommand(__CC_upgradeTower_name).setObject(NULL); 113 123 114 } 124 115 } … … 149 140 150 141 createFields(); 151 152 142 TeamDeathmatch::start(); 153 154 // Waypoints: [1,3] [10,3] [10,11] [13,11] -> add the points to a matrix so the player cant place towers on the path155 156 143 157 144 //set initial credits, lifes and WaveNumber 158 145 this->setCredit(1000); 159 this->setLifes(100); 146 this->setLifes(100); 147 this->timeSinceLastSpawn_ = 0.0; 148 this->timeUntilNextWave_ = 5.0; 149 this->waveSize_ = 0; 160 150 this->setWaveNumber(0); 161 time = 0.0;162 151 } 163 152 … … 165 154 void TowerDefense::addTowerDefenseEnemy(int templatenr) 166 155 { 167 orxout() << "addTowerDefenseEnemy" << endl;168 169 156 TowerDefenseEnemy* en1 = new TowerDefenseEnemy(this->center_->getContext()); 170 157 … … 200 187 if (controller != NULL && waypoints_.size() > 1) 201 188 { 202 en1->setPosition(waypoints_.at(0)->getPosition() );189 en1->setPosition(waypoints_.at(0)->getPosition() + offset_); 203 190 en1->setOrientation(Vector3(0,0,10), Degree(0)); 204 191 en1->setDirection(Vector3(0,1,0)); 205 en1->lookAt(waypoints_.at(1)->getPosition() );192 en1->lookAt(waypoints_.at(1)->getPosition() + offset_); 206 193 207 194 for (unsigned int i = 0; i < waypoints_.size(); ++ i) 208 195 { 209 196 orxonox::WeakPtr<MovableEntity> waypoint = new MovableEntity(this->center_->getContext()); 210 waypoint->setPosition(waypoints_.at(i)->getPosition() );197 waypoint->setPosition(waypoints_.at(i)->getPosition() + offset_); 211 198 controller->addWaypoint(waypoint); 212 199 } … … 229 216 assert(player); 230 217 player_ = player; 231 232 orxout() << "spawnPlayer" << endl;233 218 234 219 if (selecter->getPlayer() == NULL) … … 287 272 void TowerDefense::tick(float dt) 288 273 { 289 //orxout() << "tick1" << endl;290 274 SUPER(TowerDefense, tick, dt); 291 //orxout() << "tick2" << endl;292 275 293 276 if (hasStarted() == false || player_ == NULL) … … 295 278 return; 296 279 } 297 time += dt; 280 timeUntilNextWave_ -= dt; 281 timeSinceLastSpawn_ += dt; 298 282 299 283 //build/upgrade tower at selecter position … … 311 295 } 312 296 } 313 314 if (time >= 1.3 * enemies_.size() && enemies_.size() < 10) 315 { 316 //adds different types of enemys depending on the WaveNumber 317 addTowerDefenseEnemy(this->getWaveNumber() % 3 +1 ); 318 } 319 320 //if ships are at the end they get destroyed 321 297 322 298 for (std::list<WeakPtr<TowerDefenseEnemy> >::iterator it = enemies_.begin(); it != enemies_.end(); ) 323 299 { … … 326 302 // the enemy was destroyed by a tower - remove it from the list 327 303 enemies_.erase(it++); 304 addCredit(1); 328 305 } 329 306 else 330 307 { 331 // destroys enemys at the end of the path and reduces the life by 1. No credits gifted308 //if ships are at the end they get destroyed 332 309 Vector3 ship = (*it)->getRVWorldPosition(); 333 310 float distance = ship.distance(endpoint_); 334 if(distance < 50)311 if(distance < 40) 335 312 { 336 orxout() << "enemy deleted" << endl;337 313 (*it)->destroy(); 338 314 enemies_.erase(it++); … … 348 324 } 349 325 } 350 } 351 352 if (enemies_.size() == 0 && !this->nextwaveTimer_.isActive()) 353 { 354 this->nextwaveTimer_.startTimer(); 355 } 326 } 327 328 // Add new enemy? 329 if (timeSinceLastSpawn_ >= 1.0 && waveSize_ > 0) 330 { 331 // Add new enemy 332 timeSinceLastSpawn_ -= 1.0; 333 -- waveSize_; 334 addTowerDefenseEnemy(this->getWaveNumber() % 3 + 1); 335 } 336 else if (timeUntilNextWave_ <= 0.0 && waveSize_ <= 0) 337 { 338 //New wave 339 ++ waveNumber_; 340 timeSinceLastSpawn_ = 0.0; 341 342 timeUntilNextWave_ = waveNumber_+10; 343 waveSize_ = waveNumber_+5; 344 } 345 356 346 } 357 347 … … 361 351 TDCoordinate coord(0,0); 362 352 TDCoordinate startCoord(0,0); 363 364 353 std::string fields = center_->getFields(); 365 354 int pos = 0; … … 372 361 fields_[i][j]->setCenterpoint(center_); 373 362 center_->attach(fields_[i][j]); 374 fields_[i][j]->setPosition(coord.get3dcoordinate()); 375 fields_[i][j]->create(fields.at(pos), fields.at(pos+1)); 363 fields_[i][j]->setPosition(coord.get3dcoordinate()); 364 fields_[i][j]->create(fields.at(pos), fields.at(pos+1)); 376 365 pos += 2; 377 366 if (fields_[i][j]->getType() == START) … … 382 371 } 383 372 } 384 385 373 //Place waypoints along the street for the waypoint controllers of the enemies 386 374 TDCoordinate* thisCoord = &startCoord; … … 429 417 return NULL; 430 418 } 431 432 /*433 void TowerDefense::playerEntered(PlayerInfo* player)434 {435 TeamDeathmatch::playerEntered(player);436 437 const std::string& message = player->getName() + " entered the game";438 ChatManager::message(message);439 }440 441 bool TowerDefense::playerLeft(PlayerInfo* player)442 {443 bool valid_player = TeamDeathmatch::playerLeft(player);444 445 if (valid_player)446 {447 const std::string& message = player->getName() + " left the game";448 ChatManager::message(message);449 }450 451 return valid_player;452 }453 454 455 void TowerDefense::pawnKilled(Pawn* victim, Pawn* killer)456 {457 if (victim && victim->getPlayer())458 {459 std::string message;460 if (killer)461 {462 if (killer->getPlayer())463 message = victim->getPlayer()->getName() + " was killed by " + killer->getPlayer()->getName();464 else465 message = victim->getPlayer()->getName() + " was killed";466 }467 else468 message = victim->getPlayer()->getName() + " died";469 470 ChatManager::message(message);471 }472 473 TeamDeathmatch::pawnKilled(victim, killer);474 }475 476 void TowerDefense::playerScored(PlayerInfo* player, int score)477 {478 Gametype::playerScored(player, score);479 }*/480 419 }
Note: See TracChangeset
for help on using the changeset viewer.