#ifndef cmoblist_c
#define cmoblist_c
#include <iostream.h>
#include <stdio.h>
#include <ctype.h>
FILE *file_mob_in;
FILE *file_mob_out;
#include "cmob.h"
#include "cmoblist.h"
void cmoblist::list(void)
{
sort();
cmobelement *tmp = first; int lines = 0; char tmpchar;
printf("%-15s%s\n","MOB NUMBER","MOB NAMES");
while(tmp)
{
printf("#%-14d",tmp->item->get_number());
tmp->item->display_name_list();
printf("\n");
if(!((lines+1)%24))
{
printf("MORE -- Press Any Key");
tmpchar = getchar();
if(toupper(tmpchar) == 'Q')
return;
printf("\n");
}
tmp = tmp->next; lines++;
}
printf("\n");
}
void cmoblist::sort(void)
{
cmobelement *oldcurrent = current;
cmobelement *b;
int sorted = 0;
current = first;
while(!sorted)
{
sorted = 1;
current = first;
while(current->next)
{
if(current->item->get_number() < current->next->item->get_number())
{
current = current->next;
continue;
}
// items need to be swapped.
sorted = 0;
b = current->next;
if(first == current)
{
first = b;
}
if(last == b)
last = current;
if(current->prev)
current->prev->next = b;
current->next = b->next;
b->next = current;
b->prev = current->prev;
current->prev = b;
// swapped;
current = current->next;
}
}
current = oldcurrent;
}
cmoblist::~cmoblist(void)
{
cmobelement *tmp = first;
while(tmp) {
delete tmp->item;
tmp = tmp->next;
delete(tmp);
}
}
cmob *cmoblist::remove(void)
{
cmobelement *tmpprev = current->prev;
cmobelement *tmpnext = current->next;
delete current->item;
delete current;
}
cmob *cmoblist::load(const char *filename)
{
first = new(cmobelement);
first->next = NULL;
first->prev = NULL;
current = first;
first->item = new cmob(filename);
first->item->load();
while(!feof(file_mob_in))
{
cmobelement *tmp = current;
current = (current->next = new cmobelement);
current->prev = tmp;
current->item = new cmob();
current->item->load();
printf("Loaded Mob #%d\r",current->item->get_number());
current->next = NULL;
}
last = current;
sort();
current = first;
return current->item;
}
void cmoblist::save(const char *filename)
{
sort();
cmobelement *cur = first;
if(!first) return;
cur->item->write(filename);
while(cur->next)
{
cur = cur->next;
cur->item->write();
}
fclose(file_mob_out);
}
cmob *cmoblist::create(void)
{
//special case, no items:
if(!first)
{
first = last = current = new cmobelement;
current->next = NULL;
current->prev = NULL;
current->item = new cmob;
return current->item;
}
sort();
cmobelement *newitem = new cmobelement;
last->next = newitem;
newitem->prev = last;
current = (last = newitem);
newitem->next = NULL;
newitem->item = new cmob;
newitem->item->set_number(last->prev->item->get_number()+1);
// this is where code should be to assign a new number
return newitem->item;
}
cmob *cmoblist::gomob(long mobnumber)
{
sort();
cmobelement *tmp = first;
while(tmp)
{
if(tmp->item->get_number() == mobnumber)
break;
tmp = tmp->next;
}
if(!tmp)
{
printf("Mob not found!\n");
return current->item;
}
current = tmp;
return current->item;
}
cmob *cmoblist::gomob(const char *mobname)
{
sort();
cmobelement *tmp = first;
while(tmp)
{
if(tmp->item->areyou(mobname))
break;
tmp = tmp->next;
}
if(!tmp)
{
printf("Mob not found!\n");
return current->item;
}
current = tmp;
return current->item;
}
cmob *cmoblist::next(void)
{
if(current->next)
{
current = current->next;
return current->item;
}
printf("No more mobs!\n");
return current->item;
}
cmob *cmoblist::prev(void)
{
if(current->prev)
{
current = current->prev;
return current->item;
}
printf("No more mobs!\n");
return current->item;
}
#endif