You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.9 KiB
112 lines
2.9 KiB
#include "entity.h"
|
|
#include "raymath.h"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "../Sprite/sprite.h"
|
|
|
|
Entity * EntityInit(Sprite *sprite){
|
|
Entity *new = malloc(sizeof(Entity));
|
|
|
|
new->sprite = sprite;
|
|
new->destX = 0;
|
|
new->destY = 0;
|
|
new->hasDestination = 0;
|
|
new->selected = 0;
|
|
new->next = 0;
|
|
new->prev = 0;
|
|
|
|
return new;
|
|
}
|
|
|
|
EntityList * EntityListInit(){
|
|
EntityList *new = malloc(sizeof(EntityList));
|
|
new->head = 0;
|
|
new->tail = 0;
|
|
return new;
|
|
}
|
|
|
|
void EntityListPrintForward(EntityList *entities){
|
|
|
|
}
|
|
|
|
void EntityListInsert(EntityList *entities, Entity *data){
|
|
if(entities->head == 0){
|
|
entities->head = data;
|
|
entities->tail = data;
|
|
}
|
|
else{
|
|
entities->tail->next = data;
|
|
data->prev = entities->tail;
|
|
entities->tail = data;
|
|
}
|
|
}
|
|
void EntityListRemove(EntityList *entities, Entity *remove){
|
|
if(remove == 0){
|
|
printf("WARNING: TRIED TO REMOVE NULLPOINTER\n");
|
|
}
|
|
else if(entities->head == remove && entities->tail == remove){
|
|
entities->head = 0;
|
|
entities->tail = 0;
|
|
}
|
|
else if(entities->head == remove){
|
|
remove->next->prev = 0;
|
|
entities->head = remove->next;
|
|
}
|
|
else if(entities->tail == remove){
|
|
remove->prev->next = 0;
|
|
entities->tail = remove->prev;
|
|
}
|
|
else{
|
|
remove->prev->next = remove->next;
|
|
remove->next->prev = remove->prev;
|
|
}
|
|
|
|
remove->next = 0;
|
|
remove->prev = 0;
|
|
}
|
|
void EntityListActAllEntities(Game *game){
|
|
|
|
EntityList *entities = game->entities;
|
|
//SpriteListPrintForward(game->sprites);
|
|
// Sprites move towards their destination
|
|
float movementSpeed = 150.0f * GetFrameTime();
|
|
Entity *current = entities->head;
|
|
|
|
int counter = 0;
|
|
while (current != 0){
|
|
counter ++;
|
|
if(current->hasDestination == 1){
|
|
Vector2 movement = {
|
|
current->destX - current->sprite->x,
|
|
current->destY - current->sprite->y
|
|
};
|
|
if(Vector2Length(movement) < movementSpeed){
|
|
current->hasDestination = 0;
|
|
current->sprite->x = current->destX;
|
|
current->sprite->y = current->destY;
|
|
}
|
|
else{
|
|
movement = Vector2Normalize(movement);
|
|
movement = Vector2Scale(movement, movementSpeed);
|
|
current->sprite->x += movement.x;
|
|
current->sprite->y += movement.y;
|
|
|
|
// Change sprite according to direction
|
|
Vector2 nullvektor = {0,0};
|
|
float angle = Vector2Angle(movement, nullvektor);
|
|
angle = angle * RAD2DEG;
|
|
angle -= 35.26;
|
|
|
|
current->sprite->angle = angle;
|
|
|
|
}
|
|
}
|
|
|
|
SpriteUpdate(current->sprite);
|
|
|
|
SpriteListSpriteChanged(game->sprites, current->sprite);
|
|
|
|
current = current->next;
|
|
}
|
|
}
|