[Orxonox-commit 5770] r10430 - in code/branches/towerdefenseFS15: data/levels src/modules/objects/controllers src/modules/towerdefense
erbj at orxonox.net
erbj at orxonox.net
Thu May 7 16:35:21 CEST 2015
Author: erbj
Date: 2015-05-07 16:35:21 +0200 (Thu, 07 May 2015)
New Revision: 10430
Modified:
code/branches/towerdefenseFS15/data/levels/towerDefense.oxw
code/branches/towerdefenseFS15/src/modules/objects/controllers/TurretController.cc
code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefense.cc
code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefense.h
code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefenseTower.cc
code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefenseTower.h
Log:
added functionality: Waves with different combinations of spaceships, eggs and ufos ; added different tower templates and progressing pricing for the towers; also 5 tower to upgrade instead of 3
Modified: code/branches/towerdefenseFS15/data/levels/towerDefense.oxw
===================================================================
--- code/branches/towerdefenseFS15/data/levels/towerDefense.oxw 2015-05-07 12:43:14 UTC (rev 10429)
+++ code/branches/towerdefenseFS15/data/levels/towerDefense.oxw 2015-05-07 14:35:21 UTC (rev 10430)
@@ -36,7 +36,7 @@
<Template name=selectertemplate>
<TowerDefenseSelecter team=0 camerapositiontemplate=selectercameras>
<attached>
- <Model position="0,0,0" mesh="cube.mesh" scale=45 />
+ <Model pitch=90 position="0,0,-30" mesh="TD_Selection.mesh" scale=30 />
</attached>
</TowerDefenseSelecter>
</Template>
Modified: code/branches/towerdefenseFS15/src/modules/objects/controllers/TurretController.cc
===================================================================
--- code/branches/towerdefenseFS15/src/modules/objects/controllers/TurretController.cc 2015-05-07 12:43:14 UTC (rev 10429)
+++ code/branches/towerdefenseFS15/src/modules/objects/controllers/TurretController.cc 2015-05-07 14:35:21 UTC (rev 10430)
@@ -195,9 +195,7 @@
turret->aimAtPosition(target_->getWorldPosition());
if(this->isLookingAtTargetNew(Degree(5).valueRadians()))
{
- orxout() << target_->getIdentifier()->getName() << " / " << target_->getWorldPosition() << " / " << target_->getHealth() << " / " << target_->getTeam() << " / " << this->getTeam() << " / " << turret->getTeam() << endl;
- if (target_->getController())
- orxout() << target_->getController()->getIdentifier()->getName() << " / " << target_->getController()->getTeam() << endl;
+
this->getControllableEntity()->fire(0);
}
}
Modified: code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefense.cc
===================================================================
--- code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefense.cc 2015-05-07 12:43:14 UTC (rev 10429)
+++ code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefense.cc 2015-05-07 14:35:21 UTC (rev 10430)
@@ -85,13 +85,17 @@
#include "core/CoreIncludes.h"
/* Part of a temporary hack to allow the player to add towers */
#include "core/command/ConsoleCommand.h"
+#include <cmath>
namespace orxonox
{
static const std::string __CC_addTower_name = "addTower";
static const std::string __CC_upgradeTower_name = "upgradeTower";
+ static const int upgradeCost = 20;
+ static const int towerCost = 20;
+
SetConsoleCommand("TowerDefense", __CC_addTower_name, &TowerDefense::addTower ).addShortcut().defaultValues(1);
SetConsoleCommand("TowerDefense", __CC_upgradeTower_name, &TowerDefense::upgradeTower).addShortcut().defaultValues(0);
@@ -118,6 +122,10 @@
this->credit_ = 0;
this->lifes_ = 0;
this->timeSetTower_ = 0;
+ spaceships =15;
+ eggs=3;
+ ufos=7;
+ randomships=5;
ModifyConsoleCommand(__CC_addTower_name).setObject(this);
@@ -198,7 +206,7 @@
//set initial credits, lifes and WaveNumber
- this->setCredit(1000);
+ this->setCredit(100);
this->setLifes(100);
this->setWaveNumber(0);
time=0.0;
@@ -222,12 +230,15 @@
case 1 :
en1->addTemplate("enemytowerdefense1");
en1->setScale(3);
+ en1->lookAt(Vector3(0,0,100000));
en1->setHealth(en1->getHealth() +50 + this->getWaveNumber()*4);
break;
case 2 :
en1->addTemplate("enemytowerdefense2");
en1->setScale(2);
+ en1->lookAt(Vector3(0,0,100000));
+ en1->roll(Degree(120));
en1->setHealth(en1->getHealth() -30 + this->getWaveNumber()*4);
// en1->setShieldHealth(en1->getShield() = this->getWaveNumber()*2))
break;
@@ -235,6 +246,8 @@
case 3 :
en1->addTemplate("enemytowerdefense3");
en1->setScale(1);
+ en1->lookAt(Vector3(0,0,100000));
+ en1->roll(Degree(120));
en1->setHealth(en1->getHealth() -10 + this->getWaveNumber()*4);
break;
}
@@ -290,7 +303,6 @@
x = coord->GetX();
y = coord->GetY();
- const int upgradeCost = 20;
if (!this->hasEnoughCreditForTower(upgradeCost))
{
@@ -310,6 +322,24 @@
else
{
(towerTurretMatrix [x][y])->upgradeTower();
+ switch(towerTurretMatrix[x][y]->upgrade)
+ {
+ case 1 :
+ towerModelMatrix[x][y]->setMeshSource("TD_T2.mesh");
+ break;
+
+ case 2 :
+ towerModelMatrix[x][y]->setMeshSource("TD_T3.mesh");
+ break;
+ case 3 :
+ towerModelMatrix[x][y]->setMeshSource("TD_T4.mesh");
+ break;
+ case 4 :
+ towerModelMatrix[x][y]->setMeshSource("TD_T5.mesh");
+ break;
+
+ }
+
this->buyTower(upgradeCost);
}
}
@@ -324,7 +354,6 @@
x = coord->GetX();
y = coord->GetY();
- const int towerCost = 20;
if (!this->hasEnoughCreditForTower(towerCost))
{
@@ -358,9 +387,10 @@
//Create Model
Model* newTowerModel = new Model(this->center_->getContext());
- newTowerModel->setMeshSource("Tower.mesh");
- newTowerModel->setScale(45);
- newTowerModel->setPosition(static_cast<float>((x-8) * tileScale), static_cast<float>((y-8) * tileScale), 50);
+ newTowerModel->setMeshSource("TD_T1.mesh");
+ newTowerModel->setScale(30);
+ newTowerModel->pitch(Degree(90));
+ newTowerModel->setPosition(static_cast<float>((x-8) * tileScale), static_cast<float>((y-8) * tileScale), 80);
//Creates tower
TowerDefenseTower* towernew = new TowerDefenseTower(this->center_->getContext());
@@ -386,12 +416,33 @@
}
+ void TowerDefense::nextwave()
+ {
+ TowerDefenseEnemyvector.clear();
+ waves_++;
+ time=0;
+ float randomnumber1 = rand()*100*5;
+ float randomnumber2 = rand()*100*1;
+ float randomnumber3 = rand()*100*1.5;
+
+ float totalnumber = (randomnumber1 + randomnumber2 + randomnumber3)*1.3;
+
+ int newspaceships = (int)(maxspaceships* randomnumber1 / totalnumber);
+ int neweggs = (int)(maxspaceships*randomnumber2 / totalnumber);
+ int newufos = (int)(maxspaceships*randomnumber3 / totalnumber);
+ int newrandomships = maxspaceships -spaceships - eggs - ufos;
+ int spaceships =newspaceships;
+ int eggs=neweggs;
+ int ufos=newufos;
+ int randomships=newrandomships;
+
+ }
+
void TowerDefense::tick(float dt)
{
SUPER(TowerDefense, tick, dt);
time +=dt;
timeSetTower_ +=dt;
- orxout() << dt << "time" << endl;
//Check if tower has to be set (because TowerDefenseSelecter asks for it)
if(timeSetTower_ >= 0.25)
@@ -400,21 +451,44 @@
if(selecter != NULL && selecter->firePressed_)
{
- int xcoord = selecter->selectedPos_->GetX();
- int ycoord = selecter->selectedPos_->GetY();
+ int x = selecter->selectedPos_->GetX();
+ int y = selecter->selectedPos_->GetY();
Model* dummyModel2 = new Model(this->center_->getContext());
- if(towerModelMatrix[xcoord][ycoord] == NULL)
+ if(towerModelMatrix[x][y] == NULL)
{
- addTower(xcoord,ycoord);
+ addTower(x,y);
}
else
{
- if(!((towerModelMatrix [xcoord][ycoord])->getMeshSource() == dummyModel2->getMeshSource()))
+ if(!((towerModelMatrix [x][y])->getMeshSource() == dummyModel2->getMeshSource()))
{
- towerTurretMatrix[xcoord][ycoord]->upgradeTower();
+ towerTurretMatrix[x][y]->upgradeTower();
+ if(towerTurretMatrix[x][y]->upgrade < towerTurretMatrix[x][y]->upgradeMax)
+ {
+ this->buyTower((int)(upgradeCost*(std::pow(1.5,towerTurretMatrix[x][y]->upgrade))));
+ switch(towerTurretMatrix[x][y]->upgrade)
+ {
+ case 1 :
+ towerModelMatrix[x][y]->setMeshSource("TD_T2.mesh");
+ break;
+
+ case 2 :
+ towerModelMatrix[x][y]->setMeshSource("TD_T3.mesh");
+ break;
+ case 3 :
+ towerModelMatrix[x][y]->setMeshSource("TD_T4.mesh");
+ break;
+ case 4 :
+ towerModelMatrix[x][y]->setMeshSource("TD_T5.mesh");
+ break;
+
+ }
+
+
+ }
}
}
selecter->firePressed_ = false;
@@ -428,20 +502,31 @@
int enemytype = this->getWaveNumber() % 3 +1;
- float randomnumber1 = rand()*100*5;
- float randomnumber2 = rand()*100*1;
- float randomnumber3 = rand()*100*1.5;
- float totalnumber = randomnumber1 + randomnumber2 + randomnumber3;
- int maxspaceships = 30;
- int spaceships = (int)(maxspaceships* randomnumber1 / totalnumber);
- int eggs = (int)(maxspaceships*randomnumber2 / totalnumber);
- int ufos = (int)(maxspaceships*randomnumber3 / totalnumber);
-
if(time>=TowerDefenseEnemyvector.size() && TowerDefenseEnemyvector.size() < maxspaceships)
{
- //adds different types of enemys depending on the WaveNumber
- addTowerDefenseEnemy(path, enemytype);
+ orxout() << "enemyerstellen" << endl;
+ //adds different types of enemys depending on the WaveNumber progressively making the combination of enemys more difficult
+ if(spaceships>0)
+ {
+ addTowerDefenseEnemy(path, 1);
+ spaceships--;
+
+ }else if(ufos>0)
+ {
+ addTowerDefenseEnemy(path, 3);
+ ufos--;
+ }else if(eggs>0)
+ {
+ addTowerDefenseEnemy(path, 2);
+ eggs--;
+ }else if(randomships>0)
+ {
+ addTowerDefenseEnemy(path, rand() % 3 +1);
+ randomships--;
+
+ }
+
}
@@ -496,6 +581,7 @@
}
+
// Function to test if we can add waypoints using code only. Doesn't work yet
// THE PROBLEM: WaypointController's getControllableEntity() returns null, so it won't track. How do we get the controlableEntity to NOT BE NULL???
Modified: code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefense.h
===================================================================
--- code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefense.h 2015-05-07 12:43:14 UTC (rev 10429)
+++ code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefense.h 2015-05-07 14:35:21 UTC (rev 10430)
@@ -72,10 +72,16 @@
void setWaveNumber(int wavenumber){ waves_=wavenumber; }
void buyTower(int cost){ credit_ -= cost;}
void addCredit(int credit) { credit_+=credit; }
- void nextwave(){ TowerDefenseEnemyvector.clear(); waves_++; time=0;}
+ void nextwave();
int reduceLifes(int NumberofLifes){ return lifes_-=NumberofLifes; }
TowerDefenseSelecter* selecter;
+ int spaceships;
+ int eggs;
+ int ufos;
+ int randomships;
+ int maxspaceships = 30;
+
//virtual void pawnKilled(Pawn* victim, Pawn* killer = 0);
//virtual void playerScored(PlayerInfo* player, int score);
Modified: code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefenseTower.cc
===================================================================
--- code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefenseTower.cc 2015-05-07 12:43:14 UTC (rev 10429)
+++ code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefenseTower.cc 2015-05-07 14:35:21 UTC (rev 10430)
@@ -29,6 +29,7 @@
upgrade = 0;
this->addTemplate("towerdefensetower");
+ upgradeMax = 5;
//this->removeAllEngines();
@@ -60,7 +61,7 @@
bool TowerDefenseTower::upgradeTower()
{
- if(upgrade < 3)
+ if(upgrade < upgradeMax)
{
upgrade++;
float reloadrate = getReloadRate();
Modified: code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefenseTower.h
===================================================================
--- code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefenseTower.h 2015-05-07 12:43:14 UTC (rev 10429)
+++ code/branches/towerdefenseFS15/src/modules/towerdefense/TowerDefenseTower.h 2015-05-07 14:35:21 UTC (rev 10430)
@@ -48,9 +48,11 @@
void setGame(TowerDefense* Towerdefense)
{ assert(Towerdefense); game_ = Towerdefense; }
+ int upgrade;
+ int upgradeMax;
private:
TowerDefense* game_;
- int upgrade;
+
};
}
More information about the Orxonox-commit
mailing list