Added decorations in lua and core

This commit is contained in:
Linus Probert 2017-12-08 09:45:57 +01:00
parent 577165a0f6
commit 698c92ae33
6 changed files with 137 additions and 24 deletions

View File

@ -1,3 +1,6 @@
-- FUNCTIONS
local random = math.random
-- CONSTANTS -- CONSTANTS
local UP = 1 local UP = 1
local LEFT = 2 local LEFT = 2
@ -6,8 +9,9 @@ local DOWN = 4
-- Textures -- Textures
local textures = { local textures = {
floorTexture = nil, floor = nil,
wallTexture = nil walls = nil,
decor = nil,
} }
local floor = { local floor = {
@ -19,7 +23,7 @@ local floor = {
topleft = nil, topleft = nil,
topright = nil, topright = nil,
bottomleft = nil, bottomleft = nil,
bottomright = nil, bottomright = nil
} }
local wall = { local wall = {
@ -31,29 +35,81 @@ local wall = {
horizontal = nil horizontal = nil
} }
local floorDecor = { }
local wallDecor = { }
function load_textures(map) function load_textures(map)
textures.floorTexture = add_texture(map, "assets/Objects/Floor.png") textures.floor = add_texture(map, "assets/Objects/Floor.png")
textures.wallTexture = add_texture(map, "assets/Objects/Wall.png") textures.walls = add_texture(map, "assets/Objects/Wall.png")
textures.decor = add_texture(map, "assets/Objects/Decor0.png")
local xo = 0 local xo = 0
local yo = 48 local yo = 48
floor.center = { textures.floorTexture, xo + 16, yo + 16, false } floor.center = { textures.floor, xo + 16, yo + 16, false }
floor.top = { textures.floorTexture, xo + 16, yo + 0, false } floor.top = { textures.floor, xo + 16, yo + 0, false }
floor.bottom = { textures.floorTexture, xo + 16, yo + 32, false } floor.bottom = { textures.floor, xo + 16, yo + 32, false }
floor.left = { textures.floorTexture, xo + 0, yo + 16, false } floor.left = { textures.floor, xo + 0, yo + 16, false }
floor.right = { textures.floorTexture, xo + 32, yo + 16, false } floor.right = { textures.floor, xo + 32, yo + 16, false }
floor.topleft = { textures.floorTexture, xo + 0, yo + 0, false } floor.topleft = { textures.floor, xo + 0, yo + 0, false }
floor.topright = { textures.floorTexture, xo + 32, yo + 0, false } floor.topright = { textures.floor, xo + 32, yo + 0, false }
floor.bottomleft = { textures.floorTexture, xo + 0, yo + 32, false } floor.bottomleft = { textures.floor, xo + 0, yo + 32, false }
floor.bottomright = { textures.floorTexture, xo + 32, yo + 32, false } floor.bottomright = { textures.floor, xo + 32, yo + 32, false }
wall.topleft = { textures.wallTexture, xo + 0, yo + 0, true } wall.topleft = { textures.walls, xo + 0, yo + 0, true }
wall.topright = { textures.wallTexture, xo + 32, yo + 0, true } wall.topright = { textures.walls, xo + 32, yo + 0, true }
wall.bottomleft = { textures.wallTexture, xo + 0, yo + 32, true } wall.bottomleft = { textures.walls, xo + 0, yo + 32, true }
wall.bottomright = { textures.wallTexture, xo + 32, yo + 32, true } wall.bottomright = { textures.walls, xo + 32, yo + 32, true }
wall.vertical = { textures.wallTexture, xo + 0, yo + 16, true } wall.vertical = { textures.walls, xo + 0, yo + 16, true }
wall.horizontal = { textures.wallTexture, xo + 16, yo + 0, true } wall.horizontal = { textures.walls, xo + 16, yo + 0, true }
-- Skulls
table.insert(floorDecor, { textures.decor, 0, 12 * 16, false })
table.insert(floorDecor, { textures.decor, 32, 12 * 16, false })
table.insert(floorDecor, { textures.decor, 0, 13 * 16, false })
table.insert(floorDecor, { textures.decor, 32, 13 * 16, false })
-- Bones
table.insert(floorDecor, { textures.decor, 16, 12 * 16, false })
table.insert(floorDecor, { textures.decor, 48, 12 * 16, false })
table.insert(floorDecor, { textures.decor, 16, 13 * 16, false })
table.insert(floorDecor, { textures.decor, 48, 13 * 16, false })
-- Urns
table.insert(floorDecor, { textures.decor, 0 * 16, 48, true })
table.insert(floorDecor, { textures.decor, 1 * 16, 48, true })
table.insert(floorDecor, { textures.decor, 2 * 16, 48, true })
table.insert(floorDecor, { textures.decor, 3 * 16, 48, true })
table.insert(floorDecor, { textures.decor, 4 * 16, 48, true })
table.insert(floorDecor, { textures.decor, 5 * 16, 48, true })
table.insert(floorDecor, { textures.decor, 6 * 16, 48, false })
table.insert(floorDecor, { textures.decor, 7 * 16, 48, false })
-- Headstones
table.insert(floorDecor, { textures.decor, 0 * 16, 17 * 16, true })
table.insert(floorDecor, { textures.decor, 1 * 16, 17 * 16, true })
table.insert(floorDecor, { textures.decor, 2 * 16, 17 * 16, true })
table.insert(floorDecor, { textures.decor, 3 * 16, 17 * 16, true })
table.insert(floorDecor, { textures.decor, 4 * 16, 17 * 16, true })
table.insert(floorDecor, { textures.decor, 0 * 16, 18 * 16, true })
table.insert(floorDecor, { textures.decor, 1 * 16, 18 * 16, true })
table.insert(floorDecor, { textures.decor, 2 * 16, 18 * 16, true })
table.insert(floorDecor, { textures.decor, 3 * 16, 18 * 16, true })
table.insert(floorDecor, { textures.decor, 4 * 16, 18 * 16, true })
-- Webs
table.insert(floorDecor, { textures.decor, 0 * 16, 19 * 16, false })
table.insert(floorDecor, { textures.decor, 1 * 16, 19 * 16, false })
table.insert(floorDecor, { textures.decor, 2 * 16, 19 * 16, false })
table.insert(floorDecor, { textures.decor, 3 * 16, 19 * 16, false })
table.insert(floorDecor, { textures.decor, 4 * 16, 19 * 16, false })
-- Altars
table.insert(floorDecor, { textures.decor, 0 * 16, 20 * 16, true })
table.insert(floorDecor, { textures.decor, 1 * 16, 20 * 16, true })
table.insert(floorDecor, { textures.decor, 2 * 16, 20 * 16, true })
table.insert(floorDecor, { textures.decor, 3 * 16, 20 * 16, true })
table.insert(floorDecor, { textures.decor, 4 * 16, 20 * 16, true })
end end
function create_room () function create_room ()
@ -66,6 +122,13 @@ function create_room ()
} }
end end
local function add_random_decor_to_room()
local decor_count = random(4) - 1
for i=1,decor_count do
add_decoration(map, random(11)+1, random(8)+1, unpack(floorDecor[random(#floorDecor)]))
end
end
local function add_tiles_to_room (map) local function add_tiles_to_room (map)
for i=0,15 do for i=0,15 do
for j=0,11 do for j=0,11 do
@ -92,6 +155,8 @@ local function add_tiles_to_room (map)
end end
end end
end end
add_random_decor_to_room()
end end
local function add_walls_to_room (map) local function add_walls_to_room (map)

View File

@ -73,7 +73,6 @@ bool initSDL()
return false; return false;
} }
return true; return true;
} }

View File

@ -12,6 +12,7 @@ Room* create_room()
for (i=0; i < MAP_ROOM_WIDTH; ++i) { for (i=0; i < MAP_ROOM_WIDTH; ++i) {
for (j=0; j < MAP_ROOM_HEIGHT; ++j) { for (j=0; j < MAP_ROOM_HEIGHT; ++j) {
room->tiles[i][j] = NULL; room->tiles[i][j] = NULL;
room->decorations[i][j] = NULL;
} }
} }
return room; return room;
@ -46,6 +47,17 @@ void map_add_tile(Map *map, Position *tile_pos, MapTile *tile)
*oldTile = tile; *oldTile = tile;
} }
void map_add_decoration(Map *map, Position *tile_pos, MapTile *tile)
{
const Position *cr = &map->currentRoom;
MapTile **oldTile = &map->rooms[cr->x][cr->y]->decorations[tile_pos->x][tile_pos->y];
if (*oldTile != NULL) {
free(*oldTile);
*oldTile = NULL;
}
*oldTile = tile;
}
int map_add_texture(Map *map, const char *path, SDL_Renderer *renderer) int map_add_texture(Map *map, const char *path, SDL_Renderer *renderer)
{ {
Texture *t = texture_create(path, renderer); Texture *t = texture_create(path, renderer);
@ -103,6 +115,7 @@ void map_render(Map *map, Camera *cam)
roomCords.y + j*TILE_DIMENSION roomCords.y + j*TILE_DIMENSION
}; };
map_tile_render(map, room->tiles[i][j], &tilePos, cam); map_tile_render(map, room->tiles[i][j], &tilePos, cam);
map_tile_render(map, room->decorations[i][j], &tilePos, cam);
} }
} }
} }
@ -143,6 +156,9 @@ void map_room_destroy(Room *room)
if (room->tiles[i][j]) { if (room->tiles[i][j]) {
free(room->tiles[i][j]); free(room->tiles[i][j]);
} }
if (room->decorations[i][j]) {
free(room->decorations[i][j]);
}
} }
} }
free(room); free(room);

View File

@ -18,6 +18,7 @@ typedef struct MapTile_t {
typedef struct Room_t { typedef struct Room_t {
MapTile* tiles[MAP_ROOM_WIDTH][MAP_ROOM_HEIGHT]; MapTile* tiles[MAP_ROOM_WIDTH][MAP_ROOM_HEIGHT];
MapTile* decorations[MAP_ROOM_WIDTH][MAP_ROOM_HEIGHT];
} Room; } Room;
typedef struct Map_t { typedef struct Map_t {
@ -33,6 +34,8 @@ int map_add_texture(Map*, const char *path, SDL_Renderer*);
void map_add_tile(Map *map, Position *tile_pos, MapTile*); void map_add_tile(Map *map, Position *tile_pos, MapTile*);
void map_add_decoration(Map *map, Position *tile_pos, MapTile*);
void map_render(Map*, Camera*); void map_render(Map*, Camera*);
void map_set_current_room(Map*, Position*); void map_set_current_room(Map*, Position*);

View File

@ -113,6 +113,32 @@ int l_add_tile(lua_State *L)
return 0; return 0;
} }
static int l_add_decoration(lua_State *L)
{
Map *map;
int tile_x, tile_y;
int texture_index, tile_clip_x, tile_clip_y;
bool collider;
map = luaL_checkmap(L, 1);
tile_x = luaL_checkinteger(L, 2);
tile_y = luaL_checkinteger(L, 3);
texture_index = luaL_checkinteger(L, 4);
tile_clip_x = luaL_checkinteger(L, 5);
tile_clip_y = luaL_checkinteger(L, 6);
collider = lua_toboolean(L, 7);
Position tilePos = (Position) { tile_x, tile_y };
SDL_Rect clip = (SDL_Rect) { tile_clip_x, tile_clip_y, 16, 16 };
MapTile *tile = malloc(sizeof(MapTile));
*tile = (MapTile) { texture_index, clip, collider };
map_add_decoration(map, &tilePos, tile);
return 0;
}
Map* map_lua_generator_run(SDL_Renderer *renderer) Map* map_lua_generator_run(SDL_Renderer *renderer)
{ {
int status, result; int status, result;
@ -137,6 +163,9 @@ Map* map_lua_generator_run(SDL_Renderer *renderer)
lua_pushcfunction(L, l_add_tile); lua_pushcfunction(L, l_add_tile);
lua_setglobal(L, "add_tile"); lua_setglobal(L, "add_tile");
lua_pushcfunction(L, l_add_decoration);
lua_setglobal(L, "add_decoration");
lua_pushcfunction(L, l_add_texture); lua_pushcfunction(L, l_add_texture);
lua_setglobal(L, "add_texture"); lua_setglobal(L, "add_texture");

View File

@ -21,9 +21,10 @@ void roommatrix_populate_from_map(RoomMatrix *rm, Map *m)
for (i = 0; i < MAP_ROOM_WIDTH; ++i) { for (i = 0; i < MAP_ROOM_WIDTH; ++i) {
for (j = 0; j < MAP_ROOM_HEIGHT; ++j) { for (j = 0; j < MAP_ROOM_HEIGHT; ++j) {
if (!r->tiles[i][j]) if (r->tiles[i][j])
continue;
rm->spaces[i][j].occupied = r->tiles[i][j]->collider; 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;
} }
} }
} }