Attemptive lua structuring and more mapgeneration code
This commit is contained in:
parent
e8ccda2faf
commit
b950673952
145
data/mapgen.lua
145
data/mapgen.lua
|
@ -1,3 +1,5 @@
|
|||
require "data/maproombuilder"
|
||||
|
||||
-- Setting up some functions
|
||||
local time = os.time
|
||||
local random = math.random
|
||||
|
@ -10,67 +12,22 @@ RIGHT = 3
|
|||
DOWN = 4
|
||||
|
||||
-- BEGIN FUNCTIONS
|
||||
function add_tiles_to_room (map, texture)
|
||||
for i=0,15 do
|
||||
for j=0,11 do
|
||||
if (i >= 1 and i <= 14 and j >= 1 and j <= 10) then
|
||||
if (i == 1 and j == 1) then
|
||||
add_tile(map, i, j, texture, 0, 48, false)
|
||||
elseif (i == 1 and j == 10) then
|
||||
add_tile(map, i, j, texture, 0, 80, false)
|
||||
elseif (i == 14 and j == 1) then
|
||||
add_tile(map, i, j, texture, 32, 48, false)
|
||||
elseif (i == 14 and j == 10) then
|
||||
add_tile(map, i, j, texture, 32, 80, false)
|
||||
elseif (i == 1) then
|
||||
add_tile(map, i, j, texture, 0, 64, false)
|
||||
elseif (j == 1) then
|
||||
add_tile(map, i, j, texture, 16, 48, false)
|
||||
elseif (i == 14) then
|
||||
add_tile(map, i, j, texture, 32, 64, false)
|
||||
elseif (j == 10) then
|
||||
add_tile(map, i, j, texture, 16, 80, false)
|
||||
else
|
||||
add_tile(map, i, j, texture, 16, 64, false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function add_walls_to_room (map, texture)
|
||||
for i=0,15 do
|
||||
for j=0,11 do
|
||||
if (i == 0 and j == 0) then
|
||||
add_tile(map, i, j, texture, 0, 48, true)
|
||||
elseif (i == 15 and j == 0) then
|
||||
add_tile(map, i, j, texture, 32, 48, true)
|
||||
elseif (i == 0 and j == 11) then
|
||||
add_tile(map, i, j, texture, 0, 80, true)
|
||||
elseif (i == 15 and j == 11) then
|
||||
add_tile(map, i, j, texture, 32, 80, true)
|
||||
elseif (i == 0 or i == 15) then
|
||||
add_tile(map, i, j, texture, 0, 64, true)
|
||||
elseif (j == 0 or j == 11) then
|
||||
add_tile(map, i, j, texture, 16, 48, true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function matrix_coverage (matrix)
|
||||
local cov = 0
|
||||
for i=1,10 do
|
||||
for j=1,10 do
|
||||
if matrix[i][j] > 0 then cov = cov + 1 end
|
||||
if matrix[i][j].active then cov = cov + 1 end
|
||||
end
|
||||
end
|
||||
return cov
|
||||
end
|
||||
|
||||
function create_room ()
|
||||
local room = {}
|
||||
room.exits = {}
|
||||
function reverse_direction(dir)
|
||||
if dir == UP then return DOWN
|
||||
elseif dir == DOWN then return UP
|
||||
elseif dir == LEFT then return RIGHT
|
||||
elseif dir == RIGHT then return LEFT
|
||||
end
|
||||
end
|
||||
|
||||
function generate_path ()
|
||||
|
@ -78,7 +35,7 @@ function generate_path ()
|
|||
for i=1,10 do
|
||||
map_matrix[i] = {}
|
||||
for j=1,10 do
|
||||
map_matrix[i][j] = 0
|
||||
map_matrix[i][j] = create_room()
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -88,98 +45,70 @@ function generate_path ()
|
|||
randomseed(seed)
|
||||
local direction = 0;
|
||||
local lastDirection = 0;
|
||||
while matrix_coverage(map_matrix) < 30 do
|
||||
while matrix_coverage(map_matrix) < 10 do
|
||||
local direction = random(4)
|
||||
|
||||
if lastDirection > 0 then
|
||||
if random(24) <= 8 then direction = lastDirection end
|
||||
end
|
||||
|
||||
map_matrix[cx][cy].active = true
|
||||
if direction == UP and cy > 1 then -- UP
|
||||
map_matrix[cx][cy] = direction
|
||||
table.insert(map_matrix[cx][cy].exits, direction)
|
||||
map_matrix[cx][cy].path_dir = direction
|
||||
cy = cy - 1;
|
||||
table.insert(map_matrix[cx][cy].exits, reverse_direction(direction))
|
||||
elseif direction == LEFT and cx > 1 then -- LEFT
|
||||
map_matrix[cx][cy] = direction
|
||||
table.insert(map_matrix[cx][cy].exits, direction)
|
||||
map_matrix[cx][cy].path_dir = direction
|
||||
cx = cx - 1;
|
||||
table.insert(map_matrix[cx][cy].exits, reverse_direction(direction))
|
||||
elseif direction == RIGHT and cx < 10 then -- RIGHT
|
||||
map_matrix[cx][cy] = direction
|
||||
table.insert(map_matrix[cx][cy].exits, direction)
|
||||
map_matrix[cx][cy].path_dir = direction
|
||||
cx = cx + 1;
|
||||
table.insert(map_matrix[cx][cy].exits, reverse_direction(direction))
|
||||
elseif direction == DOWN and cy < 10 then -- DOWN
|
||||
map_matrix[cx][cy] = direction
|
||||
table.insert(map_matrix[cx][cy].exits, direction)
|
||||
map_matrix[cx][cy].path_dir = direction
|
||||
cy = cy + 1;
|
||||
table.insert(map_matrix[cx][cy].exits, reverse_direction(direction))
|
||||
end
|
||||
lastDirection = direction
|
||||
end
|
||||
map_matrix[cx][cy] = 5 -- The final room
|
||||
map_matrix[cx][cy].active = true -- Last room
|
||||
map_matrix[cx][cy].goal = true -- Last room
|
||||
|
||||
return map_matrix;
|
||||
end
|
||||
|
||||
function add_exit(map, direction, floorTexture, wallTexture)
|
||||
if direction > 4 then return end
|
||||
|
||||
if direction == UP then
|
||||
add_tile(map, 7, 0, floorTexture, 16, 64, false)
|
||||
elseif direction == LEFT then
|
||||
add_tile(map, 0, 5, floorTexture, 16, 64, false)
|
||||
elseif direction == RIGHT then
|
||||
add_tile(map, 15, 5, floorTexture, 16, 64, false)
|
||||
elseif direction == DOWN then
|
||||
add_tile(map, 7, 11, floorTexture, 16, 64, false)
|
||||
end
|
||||
end
|
||||
|
||||
function add_reverse_exit(map, direction, floorTexture, wallTexture)
|
||||
local reverseDirection
|
||||
|
||||
if direction == UP then reverseDirection = DOWN
|
||||
elseif direction == DOWN then reverseDirection = UP
|
||||
elseif direction == LEFT then reverseDirection = RIGHT
|
||||
elseif direction == RIGHT then reverseDirection = LEFT
|
||||
else reverseDirection = 5 end
|
||||
|
||||
add_exit(map, reverseDirection, floorTexture, wallTexture)
|
||||
end
|
||||
-- END FUNCTIONS
|
||||
|
||||
-- BEGIN SCRIPT
|
||||
map = create_map() -- 'map' needs to be global
|
||||
local floorTexture = add_texture(map, "assets/Objects/Floor.png")
|
||||
local wallTexture = add_texture(map, "assets/Objects/Wall.png")
|
||||
load_textures(map)
|
||||
local map_matrix = generate_path()
|
||||
|
||||
-- Print path [Debug]
|
||||
for i=1,10 do
|
||||
for j=1,10 do
|
||||
io.write(map_matrix[j][i] .. " ")
|
||||
if not map_matrix[j][i].goal then
|
||||
io.write(map_matrix[j][i].path_dir .. " ")
|
||||
else
|
||||
io.write("G ")
|
||||
end
|
||||
end
|
||||
io.write("\n")
|
||||
end
|
||||
|
||||
for i=1,10 do
|
||||
for j=1,10 do
|
||||
if map_matrix[i][j] > 0 then
|
||||
if map_matrix[i][j].active then
|
||||
set_current_room(map, i-1, j-1);
|
||||
add_tiles_to_room(map, floorTexture);
|
||||
add_walls_to_room(map, wallTexture);
|
||||
end
|
||||
end
|
||||
end
|
||||
for i=1,10 do
|
||||
for j=1,10 do
|
||||
if map_matrix[i][j] > 0 then
|
||||
set_current_room(map, i-1, j-1);
|
||||
add_exit(map, map_matrix[i][j], floorTexture, wallTexture);
|
||||
if map_matrix[i][j] == UP then
|
||||
set_current_room(map, i-1, j-2)
|
||||
elseif map_matrix[i][j] == LEFT then
|
||||
set_current_room(map, i-2, j-1)
|
||||
elseif map_matrix[i][j] == RIGHT then
|
||||
set_current_room(map, i, j-1)
|
||||
elseif map_matrix[i][j] == DOWN then
|
||||
set_current_room(map, i-1, j)
|
||||
add_tiles_to_room(map);
|
||||
add_walls_to_room(map);
|
||||
for exit=1, #map_matrix[i][j].exits do
|
||||
add_exit(map, map_matrix[i][j].exits[exit]);
|
||||
end
|
||||
add_reverse_exit(map, map_matrix[i][j], floorTexture, wallTexture);
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,120 @@
|
|||
-- Textures
|
||||
local floorTexture = nil
|
||||
local wallTexture = nil
|
||||
|
||||
local floor_center
|
||||
local floor_top
|
||||
local floor_bottom
|
||||
local floor_left
|
||||
local floor_right
|
||||
local floor_topleft
|
||||
local floor_topright
|
||||
local floor_bottomleft
|
||||
local floor_bottomright
|
||||
|
||||
local wall_topleft
|
||||
local wall_topright
|
||||
local wall_bottomleft
|
||||
local wall_bottomright
|
||||
local wall_vertical
|
||||
local wall_horizontal
|
||||
|
||||
function load_textures(map)
|
||||
floorTexture = add_texture(map, "assets/Objects/Floor.png")
|
||||
wallTexture = add_texture(map, "assets/Objects/Wall.png")
|
||||
|
||||
local xo = 0
|
||||
local yo = 48
|
||||
|
||||
floor_center = { floorTexture, xo + 16, yo + 16, false }
|
||||
floor_top = { floorTexture, xo + 16, yo + 0, false }
|
||||
floor_bottom = { floorTexture, xo + 16, yo + 32, false }
|
||||
floor_left = { floorTexture, xo + 0, yo + 16, false }
|
||||
floor_right = { floorTexture, xo + 32, yo + 16, false }
|
||||
floor_topleft = { floorTexture, xo + 0, yo + 0, false }
|
||||
floor_topright = { floorTexture, xo + 32, yo + 0, false }
|
||||
floor_bottomleft = { floorTexture, xo + 0, yo + 32, false }
|
||||
floor_bottomright = { floorTexture, xo + 32, yo + 32, false }
|
||||
|
||||
wall_topleft = { wallTexture, xo + 0, yo + 0, false }
|
||||
wall_topright = { wallTexture, xo + 32, yo + 0, false }
|
||||
wall_bottomleft = { wallTexture, xo + 0, yo + 32, false }
|
||||
wall_bottomright = { wallTexture, xo + 32, yo + 32, false }
|
||||
wall_vertical = { wallTexture, xo + 0, yo + 16, false }
|
||||
wall_horizontal = { wallTexture, xo + 16, yo + 0, false }
|
||||
end
|
||||
|
||||
function create_room ()
|
||||
local room = {}
|
||||
room.exits = {}
|
||||
room.active = false
|
||||
room.goal = false
|
||||
room.path_dir = 0
|
||||
return room;
|
||||
end
|
||||
|
||||
function add_tiles_to_room (map)
|
||||
for i=0,15 do
|
||||
for j=0,11 do
|
||||
if (i >= 1 and i <= 14 and j >= 1 and j <= 10) then
|
||||
if (i == 1 and j == 1) then
|
||||
add_tile(map, i, j, unpack(floor_topleft))
|
||||
elseif (i == 14 and j == 1) then
|
||||
add_tile(map, i, j, unpack(floor_topright))
|
||||
elseif (i == 1 and j == 10) then
|
||||
add_tile(map, i, j, unpack(floor_bottomleft))
|
||||
elseif (i == 14 and j == 10) then
|
||||
add_tile(map, i, j, unpack(floor_bottomright))
|
||||
elseif (i == 1) then
|
||||
add_tile(map, i, j, unpack(floor_left))
|
||||
elseif (i == 14) then
|
||||
add_tile(map, i, j, unpack(floor_right))
|
||||
elseif (j == 1) then
|
||||
add_tile(map, i, j, unpack(floor_top))
|
||||
elseif (j == 10) then
|
||||
add_tile(map, i, j, unpack(floor_bottom))
|
||||
else
|
||||
add_tile(map, i, j, unpack(floor_center))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function add_walls_to_room (map)
|
||||
for i=0,15 do
|
||||
for j=0,11 do
|
||||
if (i == 0 and j == 0) then
|
||||
add_tile(map, i, j, unpack(wall_topleft))
|
||||
elseif (i == 15 and j == 0) then
|
||||
add_tile(map, i, j, unpack(wall_topright))
|
||||
elseif (i == 0 and j == 11) then
|
||||
add_tile(map, i, j, unpack(wall_bottomleft))
|
||||
elseif (i == 15 and j == 11) then
|
||||
add_tile(map, i, j, unpack(wall_bottomright))
|
||||
elseif (i == 0 or i == 15) then
|
||||
add_tile(map, i, j, unpack(wall_vertical))
|
||||
elseif (j == 0 or j == 11) then
|
||||
add_tile(map, i, j, unpack(wall_horizontal))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function add_exit(map, direction)
|
||||
if direction > 4 then return end
|
||||
|
||||
if direction == UP then
|
||||
add_tile(map, 7, 0, unpack(floor_center))
|
||||
add_tile(map, 8, 0, unpack(floor_center))
|
||||
elseif direction == LEFT then
|
||||
add_tile(map, 0, 5, unpack(floor_center))
|
||||
add_tile(map, 0, 6, unpack(floor_center))
|
||||
elseif direction == RIGHT then
|
||||
add_tile(map, 15, 5, unpack(floor_center))
|
||||
add_tile(map, 15, 6, unpack(floor_center))
|
||||
elseif direction == DOWN then
|
||||
add_tile(map, 7, 11, unpack(floor_center))
|
||||
add_tile(map, 8, 11, unpack(floor_center))
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue