#include <ReachableCell.h>
Public Member Functions | |
virtual | ~ReachableCell () |
Empty Destructor. | |
virtual void | draw () |
Draw the cell content with OpenGL. | |
virtual bool | reachable (Worshiper *w) |
Is the Cell reachable ? | |
virtual std::list< Worshiper * > * | getPeople () |
Return the list of the Worshipers currently on the Cell. | |
virtual std::map< Pheromone *, unsigned int > * | getPheromones () |
Return the map of Pheromones currently on the Cell, associated to their life-time. | |
virtual bool | addWorshiper (Worshiper *w) |
Add a Worshiper to the Cell. | |
virtual bool | removeWorshiper (const Worshiper *w) |
Remove a Worshiper to the Cell. | |
virtual void | addPheromone (Pheromone *p) |
Add a Pheromone to the Cell. | |
virtual void | push (ReachableCell *next) |
Push that Cell upon an other. | |
virtual ReachableCell * | pop () |
Pop that Cell and restore the previous one. | |
virtual Cell * | makeActions () |
Make the actions needed by the Cell for one iteration. | |
Protected Member Functions | |
ReachableCell () | |
Constructor. | |
Protected Attributes | |
std::list< Worshiper * > * | _people |
std::map< Pheromone *, unsigned int > * | _pheromones |
ReachableCell * | _next |
Definition at line 39 of file ReachableCell.h.
bool ReachableCell::reachable | ( | Worshiper * | w | ) | [virtual] |
Is the Cell reachable ?
Reimplemented from Cell.
Reimplemented in ColonyCell, and CorridorCell.
Definition at line 68 of file ReachableCell.cpp.
References _next, _people, MAX_WORSHIPER_PER_CELL, and reachable().
Referenced by addWorshiper(), reachable(), and CorridorCell::reachable().
00068 { 00069 return (_people->size() < MAX_WORSHIPER_PER_CELL) && 00070 (_next != NULL ? _next->reachable(w) : true); 00071 }
std::list< Worshiper * > * ReachableCell::getPeople | ( | ) | [virtual] |
Return the list of the Worshipers currently on the Cell.
Reimplemented from Cell.
Definition at line 73 of file ReachableCell.cpp.
References _people.
Referenced by ColonyCell::makeActions().
00073 { 00074 return _people; 00075 }
std::map< Pheromone *, unsigned int > * ReachableCell::getPheromones | ( | ) | [virtual] |
Return the map of Pheromones currently on the Cell, associated to their life-time.
Reimplemented from Cell.
Definition at line 77 of file ReachableCell.cpp.
References _pheromones.
00077 { 00078 return _pheromones; 00079 }
bool ReachableCell::addWorshiper | ( | Worshiper * | w | ) | [virtual] |
w | the Worshiper to add |
Reimplemented from Cell.
Definition at line 81 of file ReachableCell.cpp.
References _people, and reachable().
00081 { 00082 bool ok = reachable(w); 00083 00084 if(ok) { 00085 _people->push_back(w); 00086 } 00087 00088 return ok; 00089 }
bool ReachableCell::removeWorshiper | ( | const Worshiper * | w | ) | [virtual] |
Remove a Worshiper to the Cell.
w | the Worshiper to remove |
Reimplemented from Cell.
Definition at line 91 of file ReachableCell.cpp.
References _people.
Referenced by ColonyCell::makeActions().
00091 { 00092 std::list<Worshiper *>::iterator it, end = _people->end(); 00093 bool find = false; 00094 00095 for(it = _people->begin(); !find && it != end; ++it) { 00096 if(find = ((*it) == w)) { 00097 _people->erase(it); 00098 } 00099 } 00100 00101 return find; 00102 }
void ReachableCell::addPheromone | ( | Pheromone * | p | ) | [virtual] |
p | the Pheromone to add |
Reimplemented from Cell.
Definition at line 104 of file ReachableCell.cpp.
References PHEROMONE_LIFE_TIME.
00104 { 00105 (*_pheromones)[p] = PHEROMONE_LIFE_TIME; 00106 }
void ReachableCell::push | ( | ReachableCell * | next | ) | [virtual] |
Push that Cell upon an other.
next | the Cell we want to cover |
Definition at line 108 of file ReachableCell.cpp.
References _next, _people, and _pheromones.
Referenced by World::addGodsGift(), and World::fight().
00108 { 00109 _next = next; 00110 _people = _next->_people; 00111 _pheromones = _next->_pheromones; 00112 }
ReachableCell * ReachableCell::pop | ( | ) | [virtual] |
Pop that Cell and restore the previous one.
Definition at line 114 of file ReachableCell.cpp.
References _next, _people, and _pheromones.
Referenced by GodsGiftFood::makeActions(), and CorpseFood::makeActions().
00114 { 00115 ReachableCell *next = NULL; 00116 00117 if(_next != NULL) { 00118 // petite astuce : pour éviter que le destructeur de cette Cell détruise 00119 // la Cell en dessous ainsi que les pointeurs qu'elle partage avec elle, 00120 // on les positionnent à NULL 00121 _people = NULL; 00122 _pheromones = NULL; 00123 next = _next; 00124 _next = NULL; 00125 } 00126 // puis on s'auto-détruit 00127 delete this; 00128 00129 // et on retourne la Cell qui était précédement en dessous 00130 return next; 00131 }
Cell * ReachableCell::makeActions | ( | ) | [virtual] |
Make the actions needed by the Cell for one iteration.
Reimplemented from Cell.
Reimplemented in ColonyCell, CorpseFood, FoodCell, and GodsGiftFood.
Definition at line 133 of file ReachableCell.cpp.
References _pheromones.
Referenced by FoodCell::makeActions(), and ColonyCell::makeActions().
00133 { 00134 std::map<Pheromone*, unsigned int>::iterator it, end; 00135 00136 // on met à jour les phéromones en fonction de leur durée de vie 00137 end = _pheromones->end(); 00138 for(it = _pheromones->begin(); it != end; ++it) { 00139 if(it->second <= 1) { 00140 // on supprime la phéromone 00141 _pheromones->erase(it); 00142 } else { 00143 // sinon on la décrémente 00144 it->second--; 00145 } 00146 } 00147 00148 return this; 00149 }
std::list<Worshiper *>* ReachableCell::_people [protected] |
The Worshipers on the Cell
Definition at line 44 of file ReachableCell.h.
Referenced by addWorshiper(), draw(), getPeople(), pop(), push(), reachable(), ReachableCell(), removeWorshiper(), and ~ReachableCell().
std::map<Pheromone*, unsigned int>* ReachableCell::_pheromones [protected] |
The Pheromones on the Cell
Definition at line 47 of file ReachableCell.h.
Referenced by getPheromones(), makeActions(), pop(), push(), ReachableCell(), and ~ReachableCell().
ReachableCell* ReachableCell::_next [protected] |
The Cell under the current one
Definition at line 50 of file ReachableCell.h.
Referenced by pop(), push(), and reachable().