|
|
|
|
@ -19,50 +19,119 @@ void ListPrintForward(List *list){
|
|
|
|
|
|
|
|
|
|
printf("\n[\n");
|
|
|
|
|
while(current != 0){
|
|
|
|
|
//printf("(%f | %f),\n", current->data.x, current->data.y);
|
|
|
|
|
printf("%f,\n", current->data->depth);
|
|
|
|
|
current = current->next;
|
|
|
|
|
}
|
|
|
|
|
printf("]\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ListInsertFront(List *list, Sprite *data){
|
|
|
|
|
Node *new = ListCreateNode(data);
|
|
|
|
|
void ListInsertBefore(List *list, Node *new, Node *current){
|
|
|
|
|
new->next = current;
|
|
|
|
|
new->prev = current->prev;
|
|
|
|
|
current->prev = new;
|
|
|
|
|
|
|
|
|
|
if(list->head == 0){
|
|
|
|
|
if(current == list->head){
|
|
|
|
|
list->head = new;
|
|
|
|
|
list->tail = new;
|
|
|
|
|
}
|
|
|
|
|
else if(list->head == list->tail){
|
|
|
|
|
list->head = new;
|
|
|
|
|
list->head->next = list->tail;
|
|
|
|
|
list->tail->prev = list->head;
|
|
|
|
|
else{
|
|
|
|
|
new->prev->next = new;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ListInsertAfter(List *list, Node *new, Node *current){
|
|
|
|
|
new->prev = current;
|
|
|
|
|
new->next = current->next;
|
|
|
|
|
current->next = new;
|
|
|
|
|
|
|
|
|
|
if(current == list->tail){
|
|
|
|
|
list->tail = new;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
list->head->prev = new;
|
|
|
|
|
new->next = list->head;
|
|
|
|
|
list->head = new;
|
|
|
|
|
new->next->prev = new;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ListInsertBack(List *list, Sprite *data){
|
|
|
|
|
void ListInsert(List *list, Sprite *data){
|
|
|
|
|
Node *new = ListCreateNode(data);
|
|
|
|
|
|
|
|
|
|
if(list->head == 0){
|
|
|
|
|
list->head = new;
|
|
|
|
|
list->tail = new;
|
|
|
|
|
}
|
|
|
|
|
else if(list->head == list->tail){
|
|
|
|
|
list->tail = new;
|
|
|
|
|
list->head->next = list->tail;
|
|
|
|
|
list->tail->prev = list->head;
|
|
|
|
|
list->head = new;
|
|
|
|
|
list->tail = new;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
list->tail->next = new;
|
|
|
|
|
new->prev = list->tail;
|
|
|
|
|
list->tail = new;
|
|
|
|
|
Node *current = list->head;
|
|
|
|
|
|
|
|
|
|
while(current != 0){
|
|
|
|
|
if(new->data->depth < current->data->depth){
|
|
|
|
|
ListInsertBefore(list, new, current);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
current = current->next;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListInsertAfter(list, new, list->tail);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ListSpriteChanged(List *list, Node *changed){
|
|
|
|
|
if(changed != list->tail && changed->data->depth > changed->next->data->depth){
|
|
|
|
|
//Nach rechts
|
|
|
|
|
|
|
|
|
|
Node *current = changed->next;
|
|
|
|
|
ListRemove(list, changed);
|
|
|
|
|
|
|
|
|
|
while(current != 0){
|
|
|
|
|
if(changed->data->depth < current->data->depth){
|
|
|
|
|
ListInsertBefore(list, changed, current);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
current = current->next;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListInsertAfter(list, changed, list->tail);
|
|
|
|
|
}
|
|
|
|
|
else if(changed != list->head && changed->data->depth < changed->prev->data->depth){
|
|
|
|
|
//Nach links
|
|
|
|
|
|
|
|
|
|
Node *current = changed->prev;
|
|
|
|
|
ListRemove(list, changed);
|
|
|
|
|
|
|
|
|
|
while(current != 0){
|
|
|
|
|
if(changed->data->depth > current->data->depth){
|
|
|
|
|
ListInsertAfter(list, changed, current);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
current = current->prev;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListInsertBefore(list, changed, list->head);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ListRemove(List *list, Node *remove){
|
|
|
|
|
if(remove == 0){
|
|
|
|
|
printf("WARNING: TRIED TO REMOVE NULLPOINTER\n");
|
|
|
|
|
}
|
|
|
|
|
else if(list->head == remove && list->tail == remove){
|
|
|
|
|
list->head = 0;
|
|
|
|
|
list->tail = 0;
|
|
|
|
|
}
|
|
|
|
|
else if(list->head == remove){
|
|
|
|
|
remove->next->prev = 0;
|
|
|
|
|
list->head = remove->next;
|
|
|
|
|
}
|
|
|
|
|
else if(list->tail == remove){
|
|
|
|
|
remove->prev->next = 0;
|
|
|
|
|
list->tail = remove->prev;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
remove->prev->next = remove->next;
|
|
|
|
|
remove->next->prev = remove->prev;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
remove->next = 0;
|
|
|
|
|
remove->prev = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List * ListInit(){
|
|
|
|
|
List *newList = malloc(sizeof(List));
|
|
|
|
|
@ -106,13 +175,15 @@ void ListDrawAllSprites(List *list, IsometricMap **map, Camera2D *camera){
|
|
|
|
|
|
|
|
|
|
// iterates over all Sprites in the list and does their acting (moving etc)
|
|
|
|
|
void ListActAllSprites(Game *game){
|
|
|
|
|
|
|
|
|
|
ListPrintForward(game->sprites);
|
|
|
|
|
// Sprites move towards their destination
|
|
|
|
|
float movementSpeed = 150.0f * GetFrameTime();
|
|
|
|
|
Node *current = game->sprites->head;
|
|
|
|
|
|
|
|
|
|
int counter = 0;
|
|
|
|
|
while (current != 0){
|
|
|
|
|
current->data->depth = current->data->x + current->data->y + current->data->z;
|
|
|
|
|
ListSpriteChanged(game->sprites, current);
|
|
|
|
|
counter ++;
|
|
|
|
|
if(current->data->hasDestination == 1){
|
|
|
|
|
Vector2 movement = {
|
|
|
|
|
|