[Orxonox-commit 4539] r9211 - code/branches/newlevel2012/src/modules/towerdefense

mentzerf at orxonox.net mentzerf at orxonox.net
Fri May 18 16:00:21 CEST 2012


Author: mentzerf
Date: 2012-05-18 16:00:21 +0200 (Fri, 18 May 2012)
New Revision: 9211

Modified:
   code/branches/newlevel2012/src/modules/towerdefense/TowerDefense.cc
   code/branches/newlevel2012/src/modules/towerdefense/TowerDefense.h
   code/branches/newlevel2012/src/modules/towerdefense/TowerDefensePlayerStats.h
Log:
+ Now only adding tower if there is enough credit

Modified: code/branches/newlevel2012/src/modules/towerdefense/TowerDefense.cc
===================================================================
--- code/branches/newlevel2012/src/modules/towerdefense/TowerDefense.cc	2012-05-18 13:53:54 UTC (rev 9210)
+++ code/branches/newlevel2012/src/modules/towerdefense/TowerDefense.cc	2012-05-18 14:00:21 UTC (rev 9211)
@@ -76,7 +76,6 @@
 #include "TowerDefense.h"
 #include "Tower.h"
 #include "TowerDefenseCenterpoint.h"
-#include "TowerDefensePlayerStats.h"
 
 #include "worldentities/SpawnPoint.h"
 #include "worldentities/pawns/Pawn.h"
@@ -155,35 +154,28 @@
 		ChatManager::message("Match is over");
 	}
 	
-	bool TowerDefense::hasTower(int x, int y)
+	void TowerDefense::addTower(int x, int y)
 	{
-		for(std::vector<coordinate>::iterator it = addedTowersCoordinates_.begin(); it != addedTowersCoordinates_.end(); ++it) 
+		const TowerCost towerCost = TDDefaultTowerCost;
+		
+		if (!this->hasEnoughCreditForTower(towerCost))
 		{
-			coordinate currentCoordinates = (coordinate) (*it);
-			if (currentCoordinates.x == x && currentCoordinates.y == y)
-				return true;
+			orxout() << "not enough credit: " << (this->stats_->getCredit()) << " available, " << TDDefaultTowerCost << " needed.";
+			return;
 		}
 		
-		return false;
-	}
-	
-	void TowerDefense::addTower(int x, int y)
-	{
-		if (this->hasTower(x,y))
+		if (this->towerExists(x,y))
 		{
 			orxout() << "tower exists!!" << endl;
 			return;
-		}
+		}		
 		
-		coordinate newTowerCoordinates;
-		newTowerCoordinates.x = x; newTowerCoordinates.y = y;
-		addedTowersCoordinates_.push_back(newTowerCoordinates);
-		
+		/*
 		unsigned int width = this->center_->getWidth();
 		unsigned int height = this->center_->getHeight();
+		*/
+		
 		int tileScale = (int) this->center_->getTileScale();
-		
-		orxout() << "tile scale = " << tileScale << endl;
 			
 		if (x > 15 || y > 15 || x < 0 || y < 0)
 		{
@@ -194,6 +186,14 @@
 		
 		orxout() << "Will add tower at (" << (x-8) * tileScale << "," << (y-8) * tileScale << ")" << endl;
 		
+		// Add tower to coordinatesStack
+		Coordinate newTowerCoordinates = {x, y};
+		addedTowersCoordinates_.push_back(newTowerCoordinates);
+		
+		// Reduce credit
+		this->stats_->buyTower(towerCost);
+		
+		// Create tower
 		Tower* newTower = new Tower(this->center_);
 		newTower->addTemplate(this->center_->getTowerTemplate());
 
@@ -207,6 +207,24 @@
 		// TODO: load Tower mesh
 	}
 	
+	bool TowerDefense::hasEnoughCreditForTower(TowerCost towerCost)
+	{
+		return ((this->stats_->getCredit()) >= towerCost);
+	}
+	
+	bool TowerDefense::towerExists(int x, int y)
+	{
+		for(std::vector<Coordinate>::iterator it = addedTowersCoordinates_.begin(); it != addedTowersCoordinates_.end(); ++it) 
+		{
+			Coordinate currentCoordinates = (Coordinate) (*it);
+			if (currentCoordinates.x == x && currentCoordinates.y == y)
+				return true;
+		}
+		
+		return false;
+	}
+	
+	
 	void TowerDefense::tick(float dt)
     {
         SUPER(TowerDefense, tick, dt);

Modified: code/branches/newlevel2012/src/modules/towerdefense/TowerDefense.h
===================================================================
--- code/branches/newlevel2012/src/modules/towerdefense/TowerDefense.h	2012-05-18 13:53:54 UTC (rev 9210)
+++ code/branches/newlevel2012/src/modules/towerdefense/TowerDefense.h	2012-05-18 14:00:21 UTC (rev 9211)
@@ -40,6 +40,8 @@
 #include "towerdefense/TowerDefensePrereqs.h"
 #include "gametypes/Deathmatch.h"
 		 
+ #include "TowerDefensePlayerStats.h"
+		 
 namespace orxonox
 {
 	class _OrxonoxExport TowerDefense : public Deathmatch
@@ -80,17 +82,18 @@
 		
 		/* handles stats */
 		TowerDefensePlayerStats *stats_;
+		bool hasEnoughCreditForTower(TowerCost towerCost);
 	
-		bool hasTower(int x, int y);
+		bool towerExists(int x, int y);
 		
 		typedef struct {
 			int x;
 			int y;
-		} coordinate; 
+		} Coordinate; 
 		
 	
 		
-		std::vector<coordinate> addedTowersCoordinates_;
+		std::vector<Coordinate> addedTowersCoordinates_;
 		std::vector<Tower*> towers_;
 		
 		void addWaypointsAndFirstEnemy();

Modified: code/branches/newlevel2012/src/modules/towerdefense/TowerDefensePlayerStats.h
===================================================================
--- code/branches/newlevel2012/src/modules/towerdefense/TowerDefensePlayerStats.h	2012-05-18 13:53:54 UTC (rev 9210)
+++ code/branches/newlevel2012/src/modules/towerdefense/TowerDefensePlayerStats.h	2012-05-18 14:00:21 UTC (rev 9211)
@@ -41,6 +41,10 @@
 
 namespace orxonox
 {
+	typedef enum _TowerCosts {
+		TDDefaultTowerCost = 200
+	} TowerCost;
+	
     class _TowerDefenseExport TowerDefensePlayerStats
     {
 	public:
@@ -52,6 +56,9 @@
 		inline void setCredit(int credit)
 			{ credit_ = credit; }
 		
+		inline void buyTower(TowerCost cost)
+			{ credit_ -= cost;}
+		
 		inline int getWaveNumber()
 			{ return waveNumber_; }
 		




More information about the Orxonox-commit mailing list