Fixed triggers. Now deletes a truly random object.

This commit is contained in:
Fabian Klemp 2014-12-16 12:19:48 +01:00
parent 9497e99b58
commit bab84f01c1
4 changed files with 28 additions and 16 deletions

View File

@ -298,12 +298,12 @@ void Level::load() {
} }
} }
errorCheck(xmlTrigger->FirstChildElement("functionPointer")->QueryIntText(&functionPointer_int)); errorCheck(xmlTrigger->FirstChildElement("functionPointer")->QueryIntText(&functionPointer_int));
void (*functionPointer)() = NULL; void (*functionPointer)(Level*) = NULL;
switch(functionPointer_int) { switch(functionPointer_int) {
case 0: case 0:
functionPointer = &trigger_function_0; functionPointer = &trigger_function_0;
break; break;
case 1: /*case 1:
functionPointer = &trigger_function_1; functionPointer = &trigger_function_1;
break; break;
case 2: case 2:
@ -314,12 +314,12 @@ void Level::load() {
break; break;
case 4: case 4:
functionPointer = &trigger_function_4; functionPointer = &trigger_function_4;
break; break;*/
default: default:
printf("Trigger function could not be found.\n"); printf("Trigger function could not be found.\n");
} }
if (object != 0) { if (object != 0) {
Trigger trigger = Trigger(position, distance, isBigger, object, functionPointer); Trigger trigger = Trigger(position, distance, isBigger, object, functionPointer, this);
triggers.push_back(trigger); triggers.push_back(trigger);
} }
else { else {
@ -417,15 +417,22 @@ void Level::setSkydomeSize(float size) {
skydomeSize = size; skydomeSize = size;
} }
void Level::trigger_function_0() { void Level::trigger_function_0(Level* level) {
static bool triggered = false; static bool triggered = false;
if (!triggered) { if (!triggered) {
printf("Trigger 0 triggered.\n"); 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; triggered = true;
} }
void Level::trigger_function_1() { std::vector<Object*>* Level::getObjects() {
return &objects;
}
/*void Level::trigger_function_1() {
} }
void Level::trigger_function_2() { void Level::trigger_function_2() {
@ -435,4 +442,4 @@ void Level::trigger_function_3() {
} }
void Level::trigger_function_4() { void Level::trigger_function_4() {
} }*/

View File

@ -29,11 +29,12 @@ class Level {
glm::vec3 getCameraPosition(); glm::vec3 getCameraPosition();
glm::vec4 getFogColour(); glm::vec4 getFogColour();
void setSkydomeSize(float size); void setSkydomeSize(float size);
static void trigger_function_0(); std::vector<Object*>* getObjects();
static void trigger_function_1(); static void trigger_function_0(Level* level);
/*static void trigger_function_1();
static void trigger_function_2(); static void trigger_function_2();
static void trigger_function_3(); static void trigger_function_3();
static void trigger_function_4(); static void trigger_function_4();*/
private: private:
void errorCheck(tinyxml2::XMLError error); void errorCheck(tinyxml2::XMLError error);
std::string levelNum; std::string levelNum;

View File

@ -1,11 +1,12 @@
#include "trigger.hh" #include "trigger.hh"
Trigger::Trigger(glm::vec3 position, float distance, bool isBigger, Object* object, void (*functionPointer)()) { Trigger::Trigger(glm::vec3 position, float distance, bool isBigger, Object* object, void (*functionPointer)(Level*), Level* level) {
this->position=position; this->position=position;
this->distance=distance; this->distance=distance;
this->isBigger=isBigger; this->isBigger=isBigger;
this->object=object; this->object=object;
this->functionPointer = functionPointer; this->functionPointer = functionPointer;
this->level = level;
} }
Trigger::Trigger(){ Trigger::Trigger(){
@ -16,9 +17,9 @@ Trigger::~Trigger(){
void Trigger::triggerUpdate(){ void Trigger::triggerUpdate(){
if (isBigger && (glm::distance(object->getPosition(), position) > distance)) { if (isBigger && (glm::distance(object->getPosition(), position) > distance)) {
(*functionPointer)(); (*functionPointer)(level);
} }
else if (!isBigger && (glm::distance(object->getPosition(), position) < distance)) { else if (!isBigger && (glm::distance(object->getPosition(), position) < distance)) {
(*functionPointer)(); (*functionPointer)(level);
} }
} }

View File

@ -4,9 +4,11 @@
#include <vector> #include <vector>
#include "object.hh" #include "object.hh"
class Level;
class Trigger { class Trigger {
public: public:
Trigger(glm::vec3 position, float distance, bool isBigger, Object* object, void (*functionPointer)()); Trigger(glm::vec3 position, float distance, bool isBigger, Object* object, void (*functionPointer)(Level*), Level* level);
Trigger(); Trigger();
~Trigger(); ~Trigger();
void triggerUpdate(); void triggerUpdate();
@ -15,7 +17,8 @@ class Trigger {
float distance; float distance;
bool isBigger; bool isBigger;
Object* object; Object* object;
void (*functionPointer)(); void (*functionPointer)(Level*);
Level* level;
}; };
#endif #endif