From 9cfaf07eba6449a4808742cbe728cf1c994d628d Mon Sep 17 00:00:00 2001 From: Remco Date: Thu, 9 Jun 2016 12:35:00 +0200 Subject: [PATCH] optimiasted crystal, entity now has a collide methode, which will be called when an entity collison has with the player. --- Crystal.cpp | 11 ++++++++--- Crystal.h | 2 +- Entity.h | 2 ++ Interface.cpp | 8 ++++---- World.cpp | 19 +++---------------- World.h | 2 +- 6 files changed, 19 insertions(+), 25 deletions(-) diff --git a/Crystal.cpp b/Crystal.cpp index aa903b3..b973485 100644 --- a/Crystal.cpp +++ b/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); + } } diff --git a/Crystal.h b/Crystal.h index be93061..6b8ab1a 100644 --- a/Crystal.h +++ b/Crystal.h @@ -12,7 +12,7 @@ public: bool isFilled; void draw(); - void pickUp(); + void collide(); private: std::string filled, empty; }; diff --git a/Entity.h b/Entity.h index a3dc294..8b19146 100644 --- a/Entity.h +++ b/Entity.h @@ -13,6 +13,8 @@ public: virtual void draw(); virtual void update(float elapsedTime) {}; + virtual void collide() {}; + Vec3f position; Vec3f rotation; float scale; diff --git a/Interface.cpp b/Interface.cpp index 95f3ca1..9f67cdf 100644 --- a/Interface.cpp +++ b/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(); } } diff --git a/World.cpp b/World.cpp index 13cc0d4..73a65ee 100644 --- a/World.cpp +++ b/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; } } diff --git a/World.h b/World.h index cce4e3b..7ee8c51 100644 --- a/World.h +++ b/World.h @@ -21,7 +21,7 @@ private: std::vector entities; std::vector enemies; - std::vector crystals; + //std::vector crystals; public: World(const std::string &fileName); ~World();