Skip to content
Snippets Groups Projects
Commit f08bb117 authored by dg's avatar dg
Browse files

Static map generator can request a specific A* connectivity check

git-svn-id: http://svn.net-core.org/repos/t-engine4@671 51575b47-30f0-44d4-a5cc-537603b46e54
parent 1df2aa3e
No related branches found
No related tags found
No related merge requests found
......@@ -485,6 +485,7 @@ function _M:newLevel(level_data, lev, old_lev, game)
-- Check for connectivity from entrance to exit
local a = Astar.new(map, game:getPlayer())
print("[LEVEL GENERATION] checking entrance to exit A*", ux, uy, "to", dx, dy)
if ux and uy and dx and dy and (ux ~= dx or uy ~= dy) and not a:calc(ux, uy, dx, dy) then
print("Level unconnected, no way from entrance to exit", ux, uy, "to", dx, dy)
level:removed()
......@@ -499,6 +500,7 @@ function _M:newLevel(level_data, lev, old_lev, game)
else cx, cy = spot.check_connectivity.x, spot.check_connectivity.y
end
print("[LEVEL GENERATION] checking A*", spot.x, spot.y, "to", cx, cy)
if spot.x and spot.y and cx and cy and (spot.x ~= cx or spot.y ~= cy) and not a:calc(spot.x, spot.y, cx, cy) then
print("Level unconnected, no way from", spot.x, spot.y, "to", cx, cy)
level:removed()
......
......@@ -26,6 +26,7 @@ function _M:init(zone, map, level, data)
engine.Generator.init(self, zone, map, level)
self.grid_list = zone.grid_list
self.subgen = {}
self.spots = {}
self.data = data
if data.adjust_level then
......@@ -68,6 +69,15 @@ function _M:loadMap(file)
addData = function(t)
table.merge(self.level.data, t, true)
end,
checkConnectivity = function(dst, src)
self.spots[#self.spots+1] = {x=dst[1], y=dst[2], check_connectivity=src}
print("********************************************")
print("********************************************")
print(dst[1], dst[2], src)
print("********************************************")
print("********************************************")
print("********************************************")
end,
}
setfenv(f, setmetatable(g, {__index=_G}))
local ret, err = f()
......@@ -113,6 +123,8 @@ function _M:resolve(typ, c)
end
function _M:generate(lev, old_lev)
local spots = {}
for i = 1, self.gen_map.w do for j = 1, self.gen_map.h do
local c = self.gen_map[i][j]
self.map(i-1, j-1, Map.TERRAIN, self:resolve("grid", c))
......@@ -160,11 +172,13 @@ function _M:generate(lev, old_lev)
self.level,
data
)
local ux, uy, dx, dy = generator:generate(lev, old_lev)
local ux, uy, dx, dy, subspots = generator:generate(lev, old_lev)
self.map:import(map, g.x, g.y)
map:close()
table.append(self.spots, subspots)
if g.define_up then self.gen_map.startx, self.gen_map.starty = ux + g.x, uy + g.y end
if g.define_down then self.gen_map.endx, self.gen_map.endy = dx + g.x, dy + g.y end
end
......@@ -175,5 +189,5 @@ function _M:generate(lev, old_lev)
if self.gen_map.startx and self.gen_map.starty then
self.map.room_map[self.gen_map.endx][self.gen_map.endy].special = "exit"
end
return self.gen_map.startx, self.gen_map.starty, self.gen_map.endx, self.gen_map.endy
return self.gen_map.startx, self.gen_map.starty, self.gen_map.endx, self.gen_map.endy, self.spots
end
......@@ -62,6 +62,10 @@ function table.mergeAdd(dst, src, deep)
end
end
function table.append(dst, src)
for i = 1, #src do dst[#dst+1] = src[i] end
end
function table.reverse(t)
local tt = {}
for i, e in ipairs(t) do tt[e] = i end
......
......@@ -22,6 +22,9 @@ defineTile('.', "WATER_FLOOR")
defineTile('#', "WATER_WALL")
defineTile('s', "WATER_FLOOR", nil, "UKLLMSWWIK")
startx = 0
starty = 6
return {
[[##################################################]],
[[##..............................................##]],
......
......@@ -39,6 +39,8 @@ subGenerator{
define_up = true,
}
checkConnectivity({26,44}, "entrance")
return {
[[ ]],
[[ ]],
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment