

Definition at line 17 of file LevelNode.h.
Public Types | |
| enum | eState { STATE_HIDDEN, STATE_FAR, STATE_OPEN, STATE_SOLVED } |
Public Member Functions | |
| LevelNode (const std::string &codename, const Path &datafile, const V2 &loc, const std::string &poster="") | |
| Default state is STATE_FAR. | |
| virtual | ~LevelNode () |
| Free self and all children. | |
| void | setState (eState state) |
| Set state for this node and open his followers. | |
| eState | getState () const |
| void | setDepth (int depth) |
| int | getDepth () const |
| void | bestSolution (int moves, const std::string &author) |
| int | getBestMoves () const |
| std::string | getBestAuthor () const |
| std::string | getCodename () const |
| V2 | getLoc () const |
| std::string | getPoster () const |
| Level * | createLevel () const |
| void | addChild (LevelNode *new_node) |
| Add child node. | |
| LevelNode * | findSelected (const V2 &cursor) |
| Find selected node under cursor. | |
| LevelNode * | findNamed (const std::string &codename) |
| Find named node in whole tree. | |
| bool | areAllSolved () const |
| Returns true when all nodes are solved. | |
| bool | isLeaf () const |
| void | drawPath (const NodeDrawer *drawer) const |
| Draws self and path to all children. | |
|
|
Definition at line 19 of file LevelNode.h. 00019 {
00020 STATE_HIDDEN,
00021 STATE_FAR,
00022 STATE_OPEN,
00023 STATE_SOLVED
00024 };
|
|
||||||||||||||||||||
|
Default state is STATE_FAR.
Definition at line 21 of file LevelNode.cpp. 00023 : m_codename(codename), m_poster(poster), m_datafile(datafile), m_loc(loc)
00024 {
00025 m_state = STATE_FAR;
00026 m_depth = 1;
00027 m_bestMoves = -1;
00028 }
|
|
|
Free self and all children.
Definition at line 33 of file LevelNode.cpp. 00034 {
00035 t_children::iterator end = m_children.end();
00036 for (t_children::iterator i = m_children.begin(); i != end; ++i) {
00037 delete *i;
00038 }
00039 }
|
|
|
Add child node. NOTE: cycles in graph are not supported. Definition at line 168 of file LevelNode.cpp. 00169 {
00170 m_children.push_back(new_node);
00171
00172 new_node->setDepth(m_depth + 1);
00173 if (m_state == STATE_SOLVED && new_node->getState() < STATE_OPEN) {
00174 new_node->setState(STATE_OPEN);
00175 }
00176 }
|
|
|
Returns true when all nodes are solved.
Definition at line 143 of file LevelNode.cpp. 00144 {
00145 if (m_state != STATE_SOLVED) {
00146 return false;
00147 }
00148 t_children::const_iterator end = m_children.end();
00149 for (t_children::const_iterator i = m_children.begin(); i != end; ++i) {
00150 if (!(*i)->areAllSolved()) {
00151 return false;
00152 }
00153 }
00154 return true;
00155 }
|
|
||||||||||||
|
Definition at line 70 of file LevelNode.cpp. 00071 {
00072 m_bestMoves = moves;
00073 m_bestAuthor = author;
00074 }
|
|
|
Definition at line 158 of file LevelNode.cpp. 00159 {
00160 return new Level(m_codename, m_datafile, m_depth);
00161 }
|
|
|
Draws self and path to all children. Children are drawed recursive. Definition at line 183 of file LevelNode.cpp. 00184 {
00185 if (m_state > STATE_HIDDEN) {
00186 t_children::const_iterator end = m_children.end();
00187 for (t_children::const_iterator i = m_children.begin();
00188 i != end; ++i)
00189 {
00190 if ((*i)->getState() > STATE_HIDDEN) {
00191 drawer->drawEdge(this, *i);
00192 (*i)->drawPath(drawer);
00193 }
00194 }
00195 drawer->drawNode(this);
00196 }
00197 }
|
|
|
Find named node in whole tree.
Definition at line 120 of file LevelNode.cpp. 00121 {
00122 if (m_codename == codename) {
00123 return this;
00124 }
00125 else {
00126 t_children::const_iterator end = m_children.end();
00127 for (t_children::const_iterator i = m_children.begin();
00128 i != end; ++i)
00129 {
00130 LevelNode *named = (*i)->findNamed(codename);
00131 if (named) {
00132 return named;
00133 }
00134 }
00135 }
00136 return NULL;
00137 }
|
|
|
Find selected node under cursor. Only solved and open nodes are traversed.
Definition at line 94 of file LevelNode.cpp. 00095 {
00096 if (m_state >= STATE_OPEN) {
00097 if (isUnder(cursor)) {
00098 return this;
00099 }
00100 else {
00101 t_children::const_iterator end = m_children.end();
00102 for (t_children::const_iterator i = m_children.begin();
00103 i != end; ++i)
00104 {
00105 LevelNode *selected = (*i)->findSelected(cursor);
00106 if (selected) {
00107 return selected;
00108 }
00109 }
00110 }
00111 }
00112 return NULL;
00113 }
|
|
|
Definition at line 50 of file LevelNode.h. 00050 { return m_bestAuthor; }
|
|
|
Definition at line 49 of file LevelNode.h. 00049 { return m_bestMoves; }
|
|
|
Definition at line 52 of file LevelNode.h. 00052 { return m_codename; }
|
|
|
Definition at line 46 of file LevelNode.h. 00046 { return m_depth; }
|
|
|
Definition at line 53 of file LevelNode.h. 00053 { return m_loc; }
|
|
|
Definition at line 54 of file LevelNode.h. 00054 { return m_poster; }
|
|
|
Definition at line 44 of file LevelNode.h. 00044 { return m_state; }
|
|
|
Definition at line 62 of file LevelNode.h. 00062 { return m_children.empty(); }
|
|
|
Definition at line 45 of file LevelNode.h. 00045 { m_depth = depth; }
|
|
|
Set state for this node and open his followers.
Definition at line 45 of file LevelNode.cpp. 00046 {
00047 t_children::iterator end = m_children.end();
00048 switch (state) {
00049 case STATE_HIDDEN:
00050 case STATE_FAR:
00051 case STATE_OPEN:
00052 break;
00053 case STATE_SOLVED:
00054 for (t_children::iterator i = m_children.begin();
00055 i != end; ++i)
00056 {
00057 if ((*i)->getState() < STATE_OPEN) {
00058 (*i)->setState(STATE_OPEN);
00059 }
00060 }
00061 break;
00062 default:
00063 assert(!"unknown level node state");
00064 break;
00065 }
00066 m_state = state;
00067 }
|
1.4.2