diff options
Diffstat (limited to 'src/being.cpp')
-rw-r--r-- | src/being.cpp | 257 |
1 files changed, 130 insertions, 127 deletions
diff --git a/src/being.cpp b/src/being.cpp index 31b87d73..4404854a 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -30,6 +30,7 @@ NODE *player_node = NULL; NODE *head = NULL; // First node of the list unsigned int b_count = 0; // Number of beings in the list + PATH_NODE::PATH_NODE(unsigned short x, unsigned short y): next(NULL) { @@ -44,172 +45,174 @@ PATH_NODE *calculate_path( return find_path(1, src_x, src_y, dest_x, dest_y); } -/** Returns the first node of the list */ -NODE *get_head() { - return head; -} - -/** Creates a empty node */ NODE::NODE(): - id(0), job(0), - next(NULL), - action(0), frame(0), - path(NULL), - speech(NULL), speech_time(0), - tick_time(0), speed(150), - emotion(0), emotion_time(0), - text_x(0), text_y(0), - hair_style(1), hair_color(1), - weapon(0) + id(0), job(0), + next(NULL), + action(0), frame(0), + path(NULL), + speech(NULL), speech_time(0), + tick_time(0), speed(150), + emotion(0), emotion_time(0), + text_x(0), text_y(0), + hair_style(1), hair_color(1), + weapon(0) { memset(coordinates, 0, 3); speech_color = makecol(0, 0, 0); } -/** Returns number of beings in the list */ +NODE *get_head() { + return head; +} + unsigned int get_count() { - return b_count; + return b_count; } -/** Removes all beings from the list */ void empty() { - NODE *node = head; - NODE *next; - while(node) { - next = node->next; - delete node; - node = next; - } - b_count = 0; - head = NULL; + NODE *node = head; + NODE *next; + while(node) { + next = node->next; + delete node; + node = next; + } + b_count = 0; + head = NULL; } -/** Add a node to the list */ void add_node(NODE *node) { - NODE *temp = head; - if(temp) { - while(temp->next) - temp = temp->next; - temp->next = node; - } else head = node; - b_count++; + NODE *temp = head; + if(temp) { + while(temp->next) + temp = temp->next; + temp->next = node; + } else head = node; + b_count++; } -/** Remove a node */ void remove_node(unsigned int id) { - unsigned int temp; - NODE *node_old, *node_new; - node_old = head; - node_new = NULL; - while(node_old) { - temp = get_id(node_old); - if(temp==id) { - if(node_new==NULL) { - head = node_old->next; - delete node_old; - b_count--; - return; - } else { + unsigned int temp; + NODE *node_old, *node_new; + node_old = head; + node_new = NULL; + while (node_old) { + temp = get_id(node_old); + if (temp==id) { + if (node_new==NULL) { + head = node_old->next; + delete node_old; + b_count--; + return; + } else { node_new->next = node_old->next; - delete node_old; - b_count--; - return; - } + delete node_old; + b_count--; + return; + } } else { - node_new = node_old; - node_old = node_old->next; + node_new = node_old; + node_old = node_old->next; + } } - } } -/** Returns the id of a being in the list */ unsigned int get_id(NODE *node) { - return node->id; + return node->id; } -/** Find a NPC id based on its coordinates */ unsigned int find_npc(unsigned short x, unsigned short y) { - NODE *node = head; - while(node) { - if((node->job>=46)&&(node->job<=125)) { // Check if is a NPC (only low job ids) - if((get_x(node->coordinates)==x)&&(get_y(node->coordinates)==y)) - return node->id; - else node = node->next; - } else { - node = node->next; - //alert("id","","","","",0,0); - } - } - return 0; + NODE *node = head; + while (node) { + // Check if is a NPC (only low job ids) + if ((node->job >= 46) && (node->job <= 125)) { + if ((get_x(node->coordinates) == x) && + (get_y(node->coordinates) == y)) + { + return node->id; + } + else { + node = node->next; + } + } else { + node = node->next; + } + } + return 0; } -/** Find a MONSTER id based on its coordinates */ unsigned int find_monster(unsigned short x, unsigned short y) { - NODE *node = head; - while(node) { - if(node->job>200) { // Check if is a MONSTER - if(get_x(node->coordinates)==x && get_y(node->coordinates)==y) - return node->id; + NODE *node = head; + while (node) { + // Check if is a MONSTER + if (node->job > 200) { + if (get_x(node->coordinates) == x && + get_y(node->coordinates) == y) + { + return node->id; + } + } + node = node->next; } - node = node->next; - } - return 0; + return 0; } -/** Return a specific id node */ NODE *find_node(unsigned int id) { - NODE *node = head; - while(node) - if(node->id==id) - return node; - else node = node->next; - return NULL; + NODE *node = head; + while (node) { + if (node->id == id) { + return node; + } + else { + node = node->next; + } + return NULL; + } } -/** Sort beings in vertical order using bubble sort */ void sort() { - NODE *p, *q, *r, *s, *temp; - s = NULL; - - while(s!=head->next) { - r = p = head; - q = p->next; - - while(p!=s) { - if(get_y(p->coordinates)>get_y(q->coordinates)) { - if(p==head) { - temp = q->next; - q->next = p; - p->next = temp; - head = q; - r = q; - } else { - temp = q->next; - q->next = p; - p->next = temp; - r->next = q; - r = q; + NODE *p, *q, *r, *s, *temp; + s = NULL; + + // Bubble sort + while (s != head->next) { + r = p = head; + q = p->next; + + while (p != s) { + if (get_y(p->coordinates) > get_y(q->coordinates)) { + if (p == head) { + temp = q->next; + q->next = p; + p->next = temp; + head = q; + r = q; + } else { + temp = q->next; + q->next = p; + p->next = temp; + r->next = q; + r = q; + } + } else { + r = p; + p = p->next; + } + q = p->next; + if (q == s) s = p; } - } else { - r = p; - p = p->next; - } - q = p->next; - if(q==s)s = p; } - } } -/** Remove all path nodes from a being */ void empty_path(NODE *node) { - if(node) { - PATH_NODE *temp = node->path; - PATH_NODE *next; - while(temp) { - next = temp->next; - delete temp; - temp = next; + if (node) { + PATH_NODE *temp = node->path; + PATH_NODE *next; + while (temp) { + next = temp->next; + delete temp; + temp = next; + } + node->path = NULL; } - node->path = NULL; - } } |