optimiasted crystal, entity now has a collide methode, which will be called when an entity collison has with the player.
This commit is contained in:
+8
-3
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ public:
|
||||
|
||||
bool isFilled;
|
||||
void draw();
|
||||
void pickUp();
|
||||
void collide();
|
||||
private:
|
||||
std::string filled, empty;
|
||||
};
|
||||
|
||||
@@ -13,6 +13,8 @@ public:
|
||||
|
||||
virtual void draw();
|
||||
virtual void update(float elapsedTime) {};
|
||||
virtual void collide() {};
|
||||
|
||||
Vec3f position;
|
||||
Vec3f rotation;
|
||||
float scale;
|
||||
|
||||
+4
-4
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user