瀏覽代碼

optimiasted crystal, entity now has a collide methode, which will be called when an entity collison has with the player.

Remco 9 年之前
父節點
當前提交
9cfaf07eba
共有 6 個文件被更改,包括 19 次插入25 次删除
  1. 8 3
      Crystal.cpp
  2. 1 1
      Crystal.h
  3. 2 0
      Entity.h
  4. 4 4
      Interface.cpp
  5. 3 16
      World.cpp
  6. 1 1
      World.h

+ 8 - 3
Crystal.cpp

@@ -1,5 +1,6 @@
 #include "Crystal.h"
 #include "Model.h"
+#include "Player.h"
 
 
 Crystal::Crystal(const std::string & filled, const std::string & empty, const Vec3f & position, Vec3f & rotation, const float & scale)
@@ -26,8 +27,12 @@ void Crystal::draw()
 	Entity::draw();	
 }
 
-void Crystal::pickUp()
+void Crystal::collide()
 {
-	isFilled = false;
-	model = Model::load(empty);
+	if (isFilled)
+	{
+		Player::getInstance()->crystals++;
+		isFilled = false;
+		model = Model::load(empty);
+	}	
 }

+ 1 - 1
Crystal.h

@@ -12,7 +12,7 @@ public:
 
 	bool isFilled;
 	void draw();
-	void pickUp();
+	void collide();
 private:
 	std::string filled, empty;
 };

+ 2 - 0
Entity.h

@@ -13,6 +13,8 @@ public:
 
 	virtual void draw();
 	virtual void update(float elapsedTime) {};
+	virtual void collide() {};
+
 	Vec3f position;
 	Vec3f rotation;
 	float scale;

+ 4 - 4
Interface.cpp

@@ -90,12 +90,12 @@ void Interface::draw()
 	{
 		glBegin(GL_QUADS);
 		glColor4f(0, 1.0f, 1.0f, 1.0f);
-		glVertex2f(975 - crystalWidth / 2, crystalOffset*i + crystalHeight*i);
-		glVertex2f(975 - crystalWidth, crystalHeight / 2 + crystalOffset*i + crystalHeight*i);
+		glVertex2f(975 - crystalWidth / 2	, crystalOffset*i + crystalHeight*i);
+		glVertex2f(975 - crystalWidth		, crystalHeight / 2 + crystalOffset*i + crystalHeight*i);
 
 		glColor4f(0, 0.8f, 0.8f, 1.0f);
-		glVertex2f(975 - crystalWidth / 2, crystalHeight + crystalOffset*i + crystalHeight*i);
-		glVertex2f(975, crystalHeight / 2 + crystalOffset*i + crystalHeight*i);
+		glVertex2f(975 - crystalWidth / 2	, crystalHeight + crystalOffset*i + crystalHeight*i);
+		glVertex2f(975						, crystalHeight / 2 + crystalOffset*i + crystalHeight*i);
 		glEnd();
 	}
 }

+ 3 - 16
World.cpp

@@ -157,9 +157,8 @@ World::World(const std::string &fileName)
 				position.y = getHeight(position.x, position.z);
 
 				Crystal *c = new Crystal(filled, empty, position, rotation, scale);
-
-				crystals.push_back(c);
-				//entities.push_back(c);
+								
+				entities.push_back(c);
 			}
 		}
 	}
@@ -203,8 +202,6 @@ void World::draw()
 
 	for (auto &entity : entities)
 		entity->draw();
-	for (auto &crystal : crystals)
-		crystal->draw();
 
 	interface->draw();
 }
@@ -247,18 +244,8 @@ bool World::isPlayerPositionValid()
 	for (auto &e : entities)
 	{
 		if (e->canCollide && e->inObject(player->position))
-			return false;
-	}
-
-	for (auto & c : crystals)
-	{
-		if (c->canCollide && c->inObject(player->position)) 
 		{
-			if (c->isFilled)
-			{
-				c->pickUp();
-				player->crystals++;
-			}
+			e->collide();
 			return false;
 		}
 	}

+ 1 - 1
World.h

@@ -21,7 +21,7 @@ private:
 
 	std::vector<Entity*> entities;
 	std::vector<Enemy*> enemies;
-	std::vector<Crystal*> crystals;
+	//std::vector<Crystal*> crystals;
 public:
 	World(const std::string &fileName);
 	~World();