#include #include #include "fileHandler.h" #include "logHelper.h" #include "arenaEngine.h" /* * Arena generate functions */ TILE *createTileList(void) { TILE *tile_0 = NULL, *tile_1 = NULL, *tile_2 = NULL, *tile_3 = NULL, *tile_4 = NULL; tile_0 = calloc(1,sizeof(TILE)); tile_1 = calloc(1,sizeof(TILE)); tile_2 = calloc(1,sizeof(TILE)); tile_3 = calloc(1,sizeof(TILE)); tile_4 = calloc(1,sizeof(TILE)); tile_0->type_id = 0; tile_0->texture = IMG_Load("data/tile_grass.png"); tile_0->canBeMined = 0; tile_0->isGround = 1; tile_0->nextTile = tile_1; tile_1->type_id = 1; tile_1->texture = IMG_Load("data/tile_rock.png"); tile_1->canBeMined = 0; tile_1->isGround = 1; tile_1->nextTile = tile_2; tile_2->type_id = 2; tile_2->texture = IMG_Load("data/tile_tree.png"); tile_2->canBeMined = 0; tile_2->isGround = 0; tile_2->nextTile = tile_3; tile_3->type_id = 3; tile_3->texture = IMG_Load("data/tile_water.png"); tile_3->canBeMined = 0; tile_3->isGround = 0; tile_3->nextTile = tile_4; tile_4->type_id = 4; tile_4->texture = IMG_Load("data/tile_gold.png"); tile_4->canBeMined = 1; tile_4->isGround = 1; tile_4->nextTile = NULL; return tile_0; } PLAYER *createPlayerList(void) { PLAYER *p0 = NULL, *p1 = NULL, *p2 = NULL, *p3 = NULL; p0 = calloc(1,sizeof(PLAYER)); p1 = calloc(1,sizeof(PLAYER)); p2 = calloc(1,sizeof(PLAYER)); p3 = calloc(1,sizeof(PLAYER)); p0->Id = 0; p0->PositionX = 0; p0->PositionY = 0; p0->texture[DOWN] = IMG_Load("data/sprite_player_0.png"); p0->texture[UP] = IMG_Load("data/sprite_player_1.png"); p0->texture[LEFT] = IMG_Load("data/sprite_player_2.png"); p0->texture[RIGHT] = IMG_Load("data/sprite_player_3.png"); p0->suiv = p1; p1->Id = 1; p1->PositionX = A_WIDTH; p1->PositionY = A_HEIGHT; p1->texture[DOWN] = IMG_Load("data/sprite_ia_0.png"); p1->texture[UP] = IMG_Load("data/sprite_ia_1.png"); p1->texture[LEFT] = IMG_Load("data/sprite_ia_2.png"); p1->texture[RIGHT] = IMG_Load("data/sprite_ia_3.png"); p1->suiv = p2; p2->Id = 0; p2->PositionX = 0; p2->PositionY = A_HEIGHT; //p2->texture[DOWN] = IMG_Load("data/sprite_player_0.png"); //p2->texture[UP] = IMG_Load("data/sprite_player_1.png"); //p2->texture[LEFT] = IMG_Load("data/sprite_player_2.png"); //p2->texture[RIGHT] = IMG_Load("data/sprite_player_3.png"); p2->suiv = p3; p3->Id = 0; p3->PositionX = A_WIDTH; p3->PositionY = 0; //p3->texture[DOWN] = IMG_Load("data/sprite_player_0.png"); //p3->texture[UP] = IMG_Load("data/sprite_player_1.png"); //p3->texture[LEFT] = IMG_Load("data/sprite_player_2.png"); //p3->texture[RIGHT] = IMG_Load("data/sprite_player_3.png"); p3->suiv = NULL; return p1; } void clearRessourcesCache(TILE *t, PLAYER *p) { } ARENA_H_TILE* createHTile(ARENA_H_TILE* prevHTile) { ARENA_H_TILE* tile_h = NULL; if (prevHTile == NULL) { tile_h = calloc(1,sizeof(ARENA_H_TILE)); //Using calloc because of resetting all memory allocated to 0 tile_h->type_id = random_lim(5); //tile_h->playerOnTile = NULL; tile_h->nextRow = NULL; tile_h->nextColumn = NULL; } else if (prevHTile != NULL) { tile_h = calloc(1,sizeof(ARENA_H_TILE)); prevHTile->nextRow = tile_h; tile_h->type_id = random_lim(5); //tile_h->playerOnTile = NULL; tile_h->nextRow = NULL; tile_h->nextColumn = NULL; } return tile_h; } ARENA_W_TILE* createWTile(ARENA_H_TILE* prevHTile, ARENA_W_TILE* prevWTile) { ARENA_W_TILE* tile_w = NULL; if (prevHTile != NULL && prevWTile == NULL) { tile_w = calloc(1,sizeof(ARENA_W_TILE)); prevHTile->nextColumn = tile_w; tile_w->type_id = random_lim(5); //tile_w->playerOnTile = NULL; tile_w->nextColumn = NULL; return tile_w; } else if (prevHTile == NULL && prevWTile != NULL) { tile_w = calloc(1,sizeof(ARENA_W_TILE)); prevWTile->nextColumn = tile_w; tile_w->type_id = random_lim(5); //tile_w->playerOnTile = NULL; tile_w->nextColumn = NULL; } return NULL; } ARENA_H_TILE* genNewArena(int size_h, int size_w) { ARENA_H_TILE* arenaOrigin = NULL; ARENA_H_TILE* TmpCursor_h = NULL; ARENA_W_TILE* TmpCursor_w = NULL; int i,j; for(i=0;inextColumn; } } return arenaOrigin; } /* * Arena delete functions */ void deleteWTile(ARENA_W_TILE* WTile) { if (WTile->nextColumn != NULL) { deleteWTile(WTile->nextColumn); } free(WTile); } void deleteHTile(ARENA_H_TILE* HTile) { if (HTile->nextRow != NULL) { deleteHTile(HTile->nextRow); } deleteWTile(HTile->nextColumn); free(HTile); } void deleteArena(ARENA_H_TILE* arena) { deleteHTile(arena); } /* * Arena status functions */ int getTileTypeID(ARENA_H_TILE* arena, int coord_x, int coord_y) { int type_id = -1; int i; if (coord_x > A_WIDTH || coord_y > A_HEIGHT) return -1; if (coord_y == 0) { ARENA_H_TILE* tile_h = NULL; tile_h = arena; if (coord_x != 0) { for (i=0;inextRow; } } type_id = tile_h->type_id; } else { ARENA_W_TILE* tile_w = NULL; ARENA_H_TILE* tile_h = NULL; tile_h = arena; if (coord_x != 0) { for (i=0;inextRow; } } tile_w = tile_h->nextColumn; if (coord_y != 0) { for (i=0;inextColumn; } } type_id = tile_w->type_id; } return type_id; } SDL_Surface *getTileSurfaceFromID(TILE *t_list, int id) { SDL_Surface *t_surface = NULL; TILE *tmp_tile = NULL; int i=0; tmp_tile = t_list; while (inextTile; i++; } t_surface = tmp_tile->texture; return t_surface; } int isPlayerAdjacent(PLAYER* p1, PLAYER* p2) { int adjPlayer = -1; if ((p1->PositionX-1 || p1->PositionX+1) == p2->PositionX && (p1->PositionY-1 || p1->PositionY+1) == p2->PositionY) adjPlayer = 1; return adjPlayer; } int isMoveCorrect(int coord_x, int coord_y, int direction) { if (!((coord_x <= 0 && direction == LEFT) || (coord_y <= 0 && direction == UP) || (coord_x >= A_HEIGHT && direction == RIGHT) || (coord_y >= A_WIDTH && direction == DOWN))) return 1; return 0; } int getRelativeDirection(SDL_Rect pos1, SDL_Rect pos2) { int _x,_y; _x = pos2.x - pos1.x; _y = pos2.y - pos1.y; if (_x>1) { return DOWN; } else if (_x<1) { return UP; } else if (_y>1) { return RIGHT; } else if (_y<1) { return LEFT; } else { return -1; } }