/* orxonox - the future of 3D-vertical-scrollers Copyright (C) 2007 orx This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ### File Specific: main-programmer: Fabian 'x3n' Landau co-programmer: */ #include "mover_trigger_event_list.h" #include "debug.h" /* MoverTriggerEventList *listPointer = 0; MoverTriggerEventList::getListPointer() { if (!this->listPointer) this->listPointer = new MoverTriggerEventList(); return this->listPointer; } */ MoverTriggerEventList::MoverTriggerEventList() { this->first = 0; } MoverTriggerEventList::~MoverTriggerEventList() { while (this->first != 0) { this->removeTrigger(this->first->trigger); } } void MoverTriggerEventList::addTrigger(MoverTrigger *trigger) { if (trigger) { if (!this->first) this->first = new MoverTriggerEventListElement(trigger); else { MoverTriggerEventListElement *temp = this->first; while (temp->next != 0) temp = temp->next; temp->next = new MoverTriggerEventListElement(trigger); } } } void MoverTriggerEventList::removeTrigger(MoverTrigger *trigger) { if (trigger) { if (this->first != 0) { if (this->first->trigger == trigger) { MoverTriggerEventListElement *temp = this->first->next; delete this->first; this->first = temp; } else { MoverTriggerEventListElement *temp = this->first; while (temp != 0) { if (temp->next && (temp->next->trigger == trigger)) { MoverTriggerEventListElement *temp2 = temp->next->next; delete temp->next; temp->next = temp2; } temp = temp->next; } } } } } bool MoverTriggerEventList::isEmpty() { return (this->first == 0); } bool MoverTriggerEventList::isTriggered(const std::string& triggerName) { MoverTriggerEventListElement *temp = this->first; bool isTriggered = false; while (temp != 0) { if (temp->trigger && (temp->trigger->getName() == triggerName)) { if (temp->trigger->isTriggered()) { isTriggered = true; } else { if (temp->trigger->isObligatory()) return false; } } temp = temp->next; } return isTriggered; } MoverTriggerPointerList *MoverTriggerEventList::getPointerList(const std::string& triggerName) { MoverTriggerPointerList *list = new MoverTriggerPointerList(); MoverTriggerEventListElement *temp = this->first; while (temp != 0) { if (temp->trigger && (temp->trigger->getName() == triggerName)) list->addTrigger(temp->trigger); temp = temp->next; } return list; } //////////////////////////////////////////////////////// MoverTriggerEventListElement::MoverTriggerEventListElement(MoverTrigger *trigger) { this->trigger = trigger; this->next = 0; } MoverTriggerEventListElement::~MoverTriggerEventListElement() { }