Fix biomegen offset_y
This commit is contained in:
parent
4bd2f3aa93
commit
c451a0fc75
|
@ -84,6 +84,8 @@ local function calculate_noises(minp)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function calc_biome_from_noise(heat, humid, pos)
|
local function calc_biome_from_noise(heat, humid, pos)
|
||||||
|
--water_level = multi_map.get_absolute_centerpoint(multi_map.get_layer(p.y))
|
||||||
|
local offsety= multi_map.get_offset_y(pos.y,multi_map.get_layer(pos.y))
|
||||||
local biome_closest = nil
|
local biome_closest = nil
|
||||||
local biome_closest_blend = nil
|
local biome_closest_blend = nil
|
||||||
local dist_min = 31000
|
local dist_min = 31000
|
||||||
|
@ -91,14 +93,15 @@ local function calc_biome_from_noise(heat, humid, pos)
|
||||||
|
|
||||||
for i, biome in pairs(biomes) do
|
for i, biome in pairs(biomes) do
|
||||||
local min_pos, max_pos = biome.min_pos, biome.max_pos
|
local min_pos, max_pos = biome.min_pos, biome.max_pos
|
||||||
if pos.y >= min_pos.y and pos.y <= max_pos.y+biome.vertical_blend
|
--if offsety >= min_pos.y and
|
||||||
|
if offsety <= max_pos.y+biome.vertical_blend
|
||||||
and pos.x >= min_pos.x and pos.x <= max_pos.x
|
and pos.x >= min_pos.x and pos.x <= max_pos.x
|
||||||
and pos.z >= min_pos.z and pos.z <= max_pos.z then
|
and pos.z >= min_pos.z and pos.z <= max_pos.z then
|
||||||
local d_heat = heat - biome.heat_point
|
local d_heat = heat - biome.heat_point
|
||||||
local d_humid = humid - biome.humidity_point
|
local d_humid = humid - biome.humidity_point
|
||||||
local dist = d_heat*d_heat + d_humid*d_humid -- Pythagorean distance
|
local dist = d_heat*d_heat + d_humid*d_humid -- Pythagorean distance
|
||||||
|
|
||||||
if pos.y <= max_pos.y then -- Within y limits of biome
|
if offsety <= max_pos.y then -- Within y limits of biome
|
||||||
if dist < dist_min then
|
if dist < dist_min then
|
||||||
dist_min = dist
|
dist_min = dist
|
||||||
biome_closest = biome
|
biome_closest = biome
|
||||||
|
@ -289,7 +292,9 @@ local liquid = setmetatable({}, {
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
local function can_place_deco(deco, data, vi, pattern)
|
local function can_place_deco(deco, data, vi, pattern,y)
|
||||||
|
local offsety= multi_map.get_offset_y(y,multi_map.get_layer(y))
|
||||||
|
if offsety < deco.y_min or offsety > deco.y_max then return false end
|
||||||
if not deco.place_on[data[vi]] then
|
if not deco.place_on[data[vi]] then
|
||||||
return false
|
return false
|
||||||
elseif deco.num_spawn_by <= 0 then
|
elseif deco.num_spawn_by <= 0 then
|
||||||
|
@ -395,7 +400,7 @@ local function place_deco(deco, data, a, vm, minp, maxp, blockseed)
|
||||||
for _, y in ipairs(floors) do
|
for _, y in ipairs(floors) do
|
||||||
if y >= biome.y_min and y <= biome.y_max then
|
if y >= biome.y_min and y <= biome.y_max then
|
||||||
local pos = {x=x, y=y, z=z}
|
local pos = {x=x, y=y, z=z}
|
||||||
if can_place_deco(deco, data, vi, pattern) then
|
if can_place_deco(deco, data, vi, pattern,y) then
|
||||||
deco:generate(vm, ps, pos, false)
|
deco:generate(vm, ps, pos, false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -406,7 +411,7 @@ local function place_deco(deco, data, a, vm, minp, maxp, blockseed)
|
||||||
for _, y in ipairs(ceilings) do
|
for _, y in ipairs(ceilings) do
|
||||||
if y >= biome.y_min and y <= biome.y_max then
|
if y >= biome.y_min and y <= biome.y_max then
|
||||||
local pos = {x=x, y=y, z=z}
|
local pos = {x=x, y=y, z=z}
|
||||||
if can_place_deco(deco, data, vi, pattern) then
|
if can_place_deco(deco, data, vi, pattern,y) then
|
||||||
deco:generate(vm, ps, pos, true)
|
deco:generate(vm, ps, pos, true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -449,7 +454,7 @@ local function place_deco(deco, data, a, vm, minp, maxp, blockseed)
|
||||||
|
|
||||||
if biome_ok then
|
if biome_ok then
|
||||||
local pos = {x=x, y=y, z=z}
|
local pos = {x=x, y=y, z=z}
|
||||||
if can_place_deco(deco, data, a:index(x,y,z), pattern) then
|
if can_place_deco(deco, data, a:index(x,y,z), pattern,y) then
|
||||||
deco:generate(vm, ps, pos, false)
|
deco:generate(vm, ps, pos, false)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -497,9 +502,6 @@ local dustable = setmetatable({}, {
|
||||||
|
|
||||||
local function dust_top_nodes(data, a, vm, minp, maxp)
|
local function dust_top_nodes(data, a, vm, minp, maxp)
|
||||||
water_level = multi_map.get_absolute_centerpoint()
|
water_level = multi_map.get_absolute_centerpoint()
|
||||||
if maxp.y < water_level then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local full_maxp = a.MaxEdge
|
local full_maxp = a.MaxEdge
|
||||||
|
|
||||||
|
@ -559,7 +561,7 @@ biomegen = {
|
||||||
}
|
}
|
||||||
|
|
||||||
function biomegen.generate_all(data, a, vm, minp, maxp, seed)
|
function biomegen.generate_all(data, a, vm, minp, maxp, seed)
|
||||||
water_level = multi_map.get_absolute_centerpoint()
|
water_level = multi_map.get_absolute_centerpoint(multi_map.get_layer(minp.y))
|
||||||
generate_biomes(data, a, minp, maxp)
|
generate_biomes(data, a, minp, maxp)
|
||||||
vm:set_data(data)
|
vm:set_data(data)
|
||||||
place_all_decos(data, a, vm, minp, maxp, seed)
|
place_all_decos(data, a, vm, minp, maxp, seed)
|
||||||
|
|
Loading…
Reference in New Issue