2017-12-05 15:03:20 +01:00
|
|
|
#include "roommatrix.h"
|
|
|
|
#include "util.h"
|
|
|
|
#include "map.h"
|
|
|
|
|
|
|
|
RoomMatrix* roommatrix_create()
|
|
|
|
{
|
|
|
|
RoomMatrix *m = ec_malloc(sizeof(RoomMatrix));
|
|
|
|
roommatrix_reset(m);
|
|
|
|
return m;
|
|
|
|
}
|
|
|
|
|
|
|
|
void roommatrix_populate_from_map(RoomMatrix *rm, Map *m)
|
|
|
|
{
|
|
|
|
int i, j;
|
|
|
|
Room *r;
|
|
|
|
|
2017-12-07 23:58:29 +01:00
|
|
|
roommatrix_reset(rm);
|
|
|
|
|
2017-12-06 11:44:17 +01:00
|
|
|
rm->roomPos = m->currentRoom;
|
|
|
|
r = m->rooms[rm->roomPos.x][rm->roomPos.y];
|
2017-12-05 15:03:20 +01:00
|
|
|
|
|
|
|
for (i = 0; i < MAP_ROOM_WIDTH; ++i) {
|
|
|
|
for (j = 0; j < MAP_ROOM_HEIGHT; ++j) {
|
2017-12-08 09:45:57 +01:00
|
|
|
if (r->tiles[i][j])
|
|
|
|
rm->spaces[i][j].occupied = r->tiles[i][j]->collider;
|
|
|
|
if (!rm->spaces[i][j].occupied && r->decorations[i][j])
|
|
|
|
rm->spaces[i][j].occupied = r->decorations[i][j]->collider;
|
2017-12-05 15:03:20 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void roommatrix_reset(RoomMatrix *m)
|
|
|
|
{
|
|
|
|
int i, j;
|
|
|
|
|
|
|
|
for (i = 0; i < MAP_ROOM_WIDTH; ++i) {
|
|
|
|
for (j = 0; j < MAP_ROOM_HEIGHT; ++j) {
|
|
|
|
m->spaces[i][j].occupied = false;
|
|
|
|
m->spaces[i][j].character = NULL;
|
|
|
|
m->spaces[i][j].player = NULL;
|
|
|
|
}
|
|
|
|
}
|
2017-12-06 11:44:17 +01:00
|
|
|
m->roomPos = (Position) { 0, 0 };
|
2017-12-05 15:03:20 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void roommatrix_destroy(RoomMatrix *m)
|
|
|
|
{
|
|
|
|
free(m);
|
|
|
|
}
|