mirror of
https://gitlab.com/gaelysam/mapgen_rivers.git
synced 2024-12-28 03:40:39 +01:00
terrainlib: compute current queue length instead of using '#' operator.
Important speedup.
This commit is contained in:
parent
0bc100030c
commit
2acefb2660
@ -134,15 +134,18 @@ local function flow_routing(dem, dirs, lakes) -- 'dirs' and 'lakes' are optional
|
||||
local queue = {singular[ib]} -- Start with the singular node, then this queue will be filled with water donors neighbours
|
||||
basin_links = {}
|
||||
links[#links+1] = basin_links
|
||||
while #queue > 0 do
|
||||
local i = tremove(queue)
|
||||
local cur = 1
|
||||
while cur > 0 do
|
||||
local i = queue[cur]
|
||||
cur = cur - 1
|
||||
basin_id[i] = ib
|
||||
local d = dirs2[i] -- Get the directions water is coming from
|
||||
|
||||
-- Iterate through the 4 directions
|
||||
if d >= 8 then -- River coming from the East
|
||||
d = d - 8
|
||||
queue[#queue+1] = i+1
|
||||
cur = cur + 1
|
||||
queue[cur] = i+1
|
||||
-- If no river is coming from the East, we might be at the limit of two basins, thus we need to test adjacency.
|
||||
elseif i%X > 0 then
|
||||
add_link(i, i+1, ib, false)
|
||||
@ -152,7 +155,8 @@ local function flow_routing(dem, dirs, lakes) -- 'dirs' and 'lakes' are optional
|
||||
|
||||
if d >= 4 then -- River coming from the South
|
||||
d = d - 4
|
||||
queue[#queue+1] = i+X
|
||||
cur = cur + 1
|
||||
queue[cur] = i+X
|
||||
elseif i <= X*(Y-1) then
|
||||
add_link(i, i+X, ib, true)
|
||||
else
|
||||
@ -161,7 +165,8 @@ local function flow_routing(dem, dirs, lakes) -- 'dirs' and 'lakes' are optional
|
||||
|
||||
if d >= 2 then -- River coming from the West
|
||||
d = d - 2
|
||||
queue[#queue+1] = i-1
|
||||
cur = cur + 1
|
||||
queue[cur] = i-1
|
||||
elseif i%X ~= 1 then
|
||||
add_link(i, i-1, ib, false)
|
||||
else
|
||||
@ -169,7 +174,8 @@ local function flow_routing(dem, dirs, lakes) -- 'dirs' and 'lakes' are optional
|
||||
end
|
||||
|
||||
if d >= 1 then -- River coming from the North
|
||||
queue[#queue+1] = i-X
|
||||
cur = cur + 1
|
||||
queue[cur] = i-X
|
||||
elseif i > X then
|
||||
add_link(i, i-X, ib, true)
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user