From d91d5e20284f0dec2764ba039e171108aa05bb1f Mon Sep 17 00:00:00 2001 From: Fabian Klemp Date: Tue, 16 Dec 2014 12:40:30 +0100 Subject: [PATCH] Moved trigger functions to trigger class. --- level.cc | 44 +------------------------------------------- level.hh | 5 ----- trigger.cc | 49 +++++++++++++++++++++++++++++++++++++++++++++---- trigger.hh | 9 +++++++-- 4 files changed, 53 insertions(+), 54 deletions(-) diff --git a/level.cc b/level.cc index c8dd23e..512a27d 100644 --- a/level.cc +++ b/level.cc @@ -298,28 +298,8 @@ void Level::load() { } } errorCheck(xmlTrigger->FirstChildElement("functionPointer")->QueryIntText(&functionPointer_int)); - void (*functionPointer)(Level*) = NULL; - switch(functionPointer_int) { - case 0: - functionPointer = &trigger_function_0; - break; - /*case 1: - functionPointer = &trigger_function_1; - break; - case 2: - functionPointer = &trigger_function_2; - break; - case 3: - functionPointer = &trigger_function_3; - break; - case 4: - functionPointer = &trigger_function_4; - break;*/ - default: - printf("Trigger function could not be found.\n"); - } if (object != 0) { - Trigger trigger = Trigger(position, distance, isBigger, object, functionPointer, this); + Trigger trigger = Trigger(position, distance, isBigger, object, functionPointer_int, this); triggers.push_back(trigger); } else { @@ -417,29 +397,7 @@ void Level::setSkydomeSize(float size) { skydomeSize = size; } -void Level::trigger_function_0(Level* level) { - static bool triggered = false; - if (!triggered) { - printf("Trigger 0 triggered.\n"); - int rand = std::rand() % level->getObjects()->size(); - printf("%d, %d\n", rand, level->getObjects()->size()); - level->getObjects()->erase(level->getObjects()->begin() + rand); - } - triggered = true; -} std::vector* Level::getObjects() { return &objects; } - -/*void Level::trigger_function_1() { -} - -void Level::trigger_function_2() { -} - -void Level::trigger_function_3() { -} - -void Level::trigger_function_4() { -}*/ diff --git a/level.hh b/level.hh index 6d32f95..e3d81bd 100644 --- a/level.hh +++ b/level.hh @@ -30,11 +30,6 @@ class Level { glm::vec4 getFogColour(); void setSkydomeSize(float size); std::vector* getObjects(); - static void trigger_function_0(Level* level); - /*static void trigger_function_1(); - static void trigger_function_2(); - static void trigger_function_3(); - static void trigger_function_4();*/ private: void errorCheck(tinyxml2::XMLError error); std::string levelNum; diff --git a/trigger.cc b/trigger.cc index cee3600..5cda732 100644 --- a/trigger.cc +++ b/trigger.cc @@ -1,11 +1,31 @@ #include "trigger.hh" +#include "level.hh" -Trigger::Trigger(glm::vec3 position, float distance, bool isBigger, Object* object, void (*functionPointer)(Level*), Level* level) { +Trigger::Trigger(glm::vec3 position, float distance, bool isBigger, Object* object, int functionPointer_int, Level* level) { this->position=position; this->distance=distance; this->isBigger=isBigger; this->object=object; - this->functionPointer = functionPointer; + void (*functionPointer)(Level*) = NULL; + switch(functionPointer_int) { + case 0: + this->functionPointer = &Trigger::trigger_function_0; + break; + case 1: + this->functionPointer = &Trigger::trigger_function_1; + break; + case 2: + this->functionPointer = &Trigger::trigger_function_2; + break; + case 3: + this->functionPointer = &Trigger::trigger_function_3; + break; + case 4: + this->functionPointer = &Trigger::trigger_function_4; + break; + default: + printf("Trigger function could not be found.\n"); + } this->level = level; } @@ -17,9 +37,30 @@ Trigger::~Trigger(){ void Trigger::triggerUpdate(){ if (isBigger && (glm::distance(object->getPosition(), position) > distance)) { - (*functionPointer)(level); + (this->*functionPointer)(level); } else if (!isBigger && (glm::distance(object->getPosition(), position) < distance)) { - (*functionPointer)(level); + (this->*functionPointer)(level); } } + +void Trigger::trigger_function_0(Level* level) { + static bool triggered = false; + if (!triggered) { + int rand = std::rand() % level->getObjects()->size(); + level->getObjects()->erase(level->getObjects()->begin() + rand); + } + triggered = true; +} + +void Trigger::trigger_function_1(Level* level) { +} + +void Trigger::trigger_function_2(Level* level) { +} + +void Trigger::trigger_function_3(Level* level) { +} + +void Trigger::trigger_function_4(Level* level) { +} diff --git a/trigger.hh b/trigger.hh index 022bb6c..bdc7f8f 100644 --- a/trigger.hh +++ b/trigger.hh @@ -8,7 +8,7 @@ class Level; class Trigger { public: - Trigger(glm::vec3 position, float distance, bool isBigger, Object* object, void (*functionPointer)(Level*), Level* level); + Trigger(glm::vec3 position, float distance, bool isBigger, Object* object, int functionPointer_int, Level* level); Trigger(); ~Trigger(); void triggerUpdate(); @@ -17,8 +17,13 @@ class Trigger { float distance; bool isBigger; Object* object; - void (*functionPointer)(Level*); + void (Trigger::*functionPointer)(Level*); Level* level; + void trigger_function_0(Level* level); + void trigger_function_1(Level* level); + void trigger_function_2(Level* level); + void trigger_function_3(Level* level); + void trigger_function_4(Level* level); }; #endif