195 lines
6.2 KiB
C
195 lines
6.2 KiB
C
|
#include "objects.h"
|
||
|
#include "message.h"
|
||
|
|
||
|
SERVER_OBJECTS* srv_create_objects(SERVER_OBJECTS* objects, int ship_size, int bullet_size, int comet_size, int explosion_size)
|
||
|
{
|
||
|
if(!objects)
|
||
|
{
|
||
|
SERVER_OBJECTS* objects = (SERVER_OBJECTS*)malloc(sizeof(SERVER_OBJECTS));
|
||
|
show_message_error(objects, "Failed to allocate space for SERVER_OBJECTS");
|
||
|
}
|
||
|
|
||
|
objects->ship_size = ship_size;
|
||
|
objects->bullet_size = bullet_size;
|
||
|
objects->comet_size = comet_size;
|
||
|
objects->explosion_size = explosion_size;
|
||
|
|
||
|
objects->ships = srv_create_ships(ship_size);
|
||
|
objects->bullets = srv_create_bullets(bullet_size);
|
||
|
objects->comets = srv_create_comets(comet_size);
|
||
|
objects->explosions = srv_create_explosions(explosion_size);
|
||
|
|
||
|
return objects;
|
||
|
}
|
||
|
|
||
|
void srv_free_objects(SERVER_OBJECTS* objects)
|
||
|
{
|
||
|
srv_destroy_objects(objects);
|
||
|
free(objects);
|
||
|
}
|
||
|
|
||
|
void srv_destroy_objects(SERVER_OBJECTS* objects)
|
||
|
{
|
||
|
if(objects->ship_size > 0)
|
||
|
{
|
||
|
for(int i = 0; i < objects->ship_size; i++)
|
||
|
free(objects->ships[i]);
|
||
|
free(objects->ships);
|
||
|
}
|
||
|
|
||
|
if(objects->bullet_size > 0)
|
||
|
{
|
||
|
for(int i = 0; i < objects->bullet_size; i++)
|
||
|
free(objects->bullets[i]);
|
||
|
free(objects->bullets);
|
||
|
}
|
||
|
|
||
|
if(objects->comet_size > 0)
|
||
|
{
|
||
|
for(int i = 0; i < objects->comet_size; i++)
|
||
|
free(objects->comets[i]);
|
||
|
free(objects->comets);
|
||
|
}
|
||
|
|
||
|
if(objects->explosion_size > 0)
|
||
|
{
|
||
|
for(int i = 0; i < objects->explosion_size; i++)
|
||
|
free(objects->explosions[i]);
|
||
|
free(objects->explosions);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static SERVER_SHIP** srv_create_ships(int size)
|
||
|
{
|
||
|
SERVER_SHIP** ships = (SERVER_SHIP**)malloc(sizeof(SERVER_SHIP*) * size);
|
||
|
show_message_error(ships, "Failed to allocate space for SERVER_SHIP collection");
|
||
|
|
||
|
for(int i = 0; i < size; i++)
|
||
|
{
|
||
|
ships[i] = (SERVER_SHIP*)malloc(sizeof(SERVER_SHIP));
|
||
|
show_message_error(ships[i], "Failed to allocate space for SERVER_SHIP");
|
||
|
}
|
||
|
|
||
|
return ships;
|
||
|
}
|
||
|
|
||
|
static SERVER_BULLET** srv_create_bullets(int size)
|
||
|
{
|
||
|
SERVER_BULLET** bullets = (SERVER_BULLET**)malloc(sizeof(SERVER_BULLET*) * size);
|
||
|
show_message_error(bullets, "Failed to allocate space for SERVER_BULLET collection");
|
||
|
|
||
|
for(int i = 0; i < size; i++)
|
||
|
{
|
||
|
bullets[i] = (SERVER_BULLET*)malloc(sizeof(SERVER_BULLET));
|
||
|
show_message_error(bullets[i], "Failed to allocate space for SERVER_BULLET");
|
||
|
}
|
||
|
|
||
|
return bullets;
|
||
|
}
|
||
|
|
||
|
static SERVER_COMET** srv_create_comets(int size)
|
||
|
{
|
||
|
SERVER_COMET** comets = (SERVER_COMET**)malloc(sizeof(SERVER_COMET*) * size);
|
||
|
show_message_error(comets, "Failed to allocate space for SERVER_COMET collection");
|
||
|
|
||
|
for(int i = 0; i < size; i++)
|
||
|
{
|
||
|
comets[i] = (SERVER_COMET*)malloc(sizeof(SERVER_COMET));
|
||
|
show_message_error(comets[i], "Failed to allocate space for SERVER_COMET");
|
||
|
}
|
||
|
|
||
|
return comets;
|
||
|
}
|
||
|
|
||
|
static SERVER_EXPLOSION** srv_create_explosions(int size)
|
||
|
{
|
||
|
SERVER_EXPLOSION** explosions = (SERVER_EXPLOSION**)malloc(sizeof(SERVER_EXPLOSION*) * size);
|
||
|
show_message_error(explosions, "Failed to allocate space for SERVER_EXPLOSION collection");
|
||
|
|
||
|
for(int i = 0; i < size; i++)
|
||
|
{
|
||
|
explosions[i] = (SERVER_EXPLOSION*)malloc(sizeof(SERVER_EXPLOSION));
|
||
|
show_message_error(explosions[i], "Failed to allocate space for SERVER_EXPLOSION");
|
||
|
}
|
||
|
|
||
|
return explosions;
|
||
|
}
|
||
|
|
||
|
void srv_init_ships(SERVER_OBJECTS* objects, int key_ship, int ID, int animation_columns, int animation_direction, int animation_row, int boundx, int boundy, int cur_frame,
|
||
|
int frame_count, int frame_delay, int frame_height, int frame_width, int lives, int max_frame, int score, int speed, int x, int y)
|
||
|
{
|
||
|
SERVER_SHIP* ship = objects->ships[key_ship];
|
||
|
|
||
|
ship->ID = ID;
|
||
|
ship->animation_columns = animation_columns;
|
||
|
ship->animation_direction = animation_direction;
|
||
|
ship->animation_row = animation_row;
|
||
|
ship->boundx = boundx;
|
||
|
ship->boundy = boundy;
|
||
|
ship->cur_frame = cur_frame;
|
||
|
ship->frame_count = frame_count;
|
||
|
ship->frame_delay = frame_delay;
|
||
|
ship->frame_height = frame_height;
|
||
|
ship->frame_width = frame_width;
|
||
|
ship->lives = lives;
|
||
|
ship->max_frame = max_frame;
|
||
|
ship->score = score;
|
||
|
ship->speed = speed;
|
||
|
ship->x = x;
|
||
|
ship->y = y;
|
||
|
ship->active = true;
|
||
|
}
|
||
|
|
||
|
void srv_init_bullets(SERVER_OBJECTS* objects, int key_bullet, int ID, int speed, int x, int y)
|
||
|
{
|
||
|
SERVER_BULLET* bullet = objects->bullets[key_bullet];
|
||
|
|
||
|
bullet->ID = ID;
|
||
|
bullet->live = false;
|
||
|
bullet->speed = speed;
|
||
|
bullet->x = x;
|
||
|
bullet->y = y;
|
||
|
bullet->active = true;
|
||
|
}
|
||
|
|
||
|
void srv_init_comets(SERVER_OBJECTS* objects, int key_comet, int ID, int animation_columns, int animation_direction, int boundx, int boundy, int cur_frame,
|
||
|
int frame_count, int frame_delay, int frame_height, int frame_width, int max_frame, int speed, int x, int y)
|
||
|
{
|
||
|
SERVER_COMET* comet = objects->comets[key_comet];
|
||
|
|
||
|
comet->ID = ID;
|
||
|
comet->animation_columns = animation_columns;
|
||
|
comet->animation_direction = animation_direction;
|
||
|
comet->boundx = boundx;
|
||
|
comet->boundy = boundy;
|
||
|
comet->cur_frame = cur_frame;
|
||
|
comet->frame_count = frame_count;
|
||
|
comet->frame_delay = frame_delay;
|
||
|
comet->frame_height = frame_height;
|
||
|
comet->frame_width = frame_width;
|
||
|
comet->max_frame = max_frame;
|
||
|
comet->speed = speed;
|
||
|
comet->live = false;
|
||
|
comet->x = x;
|
||
|
comet->y = y;
|
||
|
}
|
||
|
|
||
|
void srv_init_explosions(SERVER_OBJECTS* objects, int key_explosion, int animation_columns, int animation_direction, int cur_frame,
|
||
|
int frame_count, int frame_delay, int frame_height, int frame_width, int max_frame, int x, int y)
|
||
|
{
|
||
|
SERVER_EXPLOSION* explosion = objects->explosions[key_explosion];
|
||
|
|
||
|
explosion->animation_columns = animation_columns;
|
||
|
explosion->animation_direction = animation_direction;
|
||
|
explosion->cur_frame = cur_frame;
|
||
|
explosion->frame_count = frame_count;
|
||
|
explosion->frame_delay = frame_delay;
|
||
|
explosion->frame_height = frame_height;
|
||
|
explosion->frame_width = frame_width;
|
||
|
explosion->live = false;
|
||
|
explosion->max_frame = max_frame;
|
||
|
explosion->x = x;
|
||
|
explosion->y = y;
|
||
|
explosion->lifetime = 0;
|
||
|
}
|