mirror of
git://repo.or.cz/rocks.git
synced 2024-11-15 23:10:40 +01:00
Fixed wrong noisemap indexing.
This commit is contained in:
parent
153d6113ce
commit
d2b4bd6332
|
@ -9,8 +9,8 @@ local CcSoft=3
|
|||
|
||||
-- Claystone Sed soft in mudstone
|
||||
rocks.register_vein("clay",{
|
||||
spread = {x=10, y=10, z=10},
|
||||
treshold=0.75,
|
||||
spread = {x=30, y=10, z=30},
|
||||
treshold=0.2, -- clay should be plenty
|
||||
seed = 9,
|
||||
hmin=-8, hmax=nil,
|
||||
layers={ "mudstone" },
|
||||
|
|
62
mapgen.lua
62
mapgen.lua
|
@ -27,7 +27,26 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
d.nmap=minetest.get_perlin_map(np,map_lengths_xyz):get2dMap_flat({x=minp.x, y=minp.z})
|
||||
-- contene_id kamenov
|
||||
d.rock.ctx=d.rock.ctx or minetest.get_content_id(d.rock.node)
|
||||
table.insert(avl,d) -- pridame ju
|
||||
-- veiny
|
||||
local veinstodo={}
|
||||
for veinname,vd in pairs(d.veins) do
|
||||
-- todo: do not generate noise for blocks outside the layer
|
||||
veinstodo[veinname]=vd
|
||||
end
|
||||
for veinname,vd in pairs(veinstodo) do
|
||||
-- noise pre vein
|
||||
np=vd.np
|
||||
vd.nmap=minetest.get_perlin_map(np,map_lengths_xyz):get3dMap_flat(minp)
|
||||
vd.prng=nil
|
||||
vd.sum=0
|
||||
for i,ore in pairs(vd.ores) do
|
||||
-- contntid pre rudu
|
||||
ore.ctx=ore.ctx or minetest.get_content_id(ore.node)
|
||||
-- sum sanci pre vein
|
||||
vd.sum=vd.sum+ore.chance
|
||||
end
|
||||
end
|
||||
table.insert(avl,d) -- pridame vrstvu
|
||||
if (d.height-d.gain)>maxp.y then break end -- ak je mimo zhora tak uz dalsie nehladaj
|
||||
else
|
||||
--print(" no higher "..d.height.." than "..minp.y)
|
||||
|
@ -35,43 +54,66 @@ minetest.register_on_generated(function(minp, maxp, seed)
|
|||
end
|
||||
|
||||
--
|
||||
print("[rocks] afterinit "..os.clock()-timebefore.." #layers="..#avl)
|
||||
print("[rocks] gen2 "..os.clock()-timebefore.." #layers="..#avl.." minp.y="..minp.y.." maxp.y"..maxp.y)
|
||||
for lh,ld in ipairs(avl) do
|
||||
print(" "..lh.."->"..ld.name)
|
||||
print(" "..lh.."->"..ld.name.." top="..ld.height)
|
||||
for vn,vd in pairs(ld.veins) do
|
||||
print(" "..vn.."->"..#vd.ores)
|
||||
end
|
||||
end
|
||||
|
||||
local noise2d_ix = 1
|
||||
local noise3d_ix = 1
|
||||
|
||||
for x=minp.x,maxp.x,1 do
|
||||
for z=minp.z,maxp.z,1 do
|
||||
for y=minp.y,maxp.y,1 do
|
||||
for z=minp.z,maxp.z,1 do
|
||||
for y=minp.y,maxp.y,1 do
|
||||
for x=minp.x,maxp.x,1 do
|
||||
local p_pos = area:index(x, y, z)
|
||||
local layer,rock
|
||||
local layer,vein
|
||||
local rock
|
||||
|
||||
--* select layer
|
||||
for lh,ld in ipairs(avl) do
|
||||
if y<ld.nmap[noise2d_ix] then
|
||||
if (y<ld.nmap[noise2d_ix])and(ld.nmap[noise2d_ix]<ld.limit) then
|
||||
layer=ld
|
||||
rock=layer.rock
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if layer then
|
||||
--* select vein
|
||||
for veinname,vd in pairs(layer.veins) do
|
||||
if vd.nmap[noise3d_ix]>vd.treshold then
|
||||
vein=vd
|
||||
--rock not changed
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if vein then
|
||||
--* select ore
|
||||
for i,ore in pairs(vein.ores) do
|
||||
rock=ore
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
--* place rocks
|
||||
if (rock) and(nodes[p_pos]==stone_ctx) then
|
||||
nodes[p_pos] = rock.ctx
|
||||
end
|
||||
|
||||
noise3d_ix =noise3d_ix+1
|
||||
noise2d_ix = noise2d_ix+1
|
||||
end
|
||||
noise2d_ix = noise2d_ix+1
|
||||
noise2d_ix = noise2d_ix-side_length
|
||||
end
|
||||
end
|
||||
manipulator:set_data(nodes)
|
||||
manipulator:calc_lighting()
|
||||
manipulator:update_liquids()
|
||||
manipulator:write_to_map()
|
||||
print("[rocks] gen "..os.clock()-timebefore)
|
||||
print("[rocks] gen0 "..os.clock()-timebefore)
|
||||
end)
|
||||
|
||||
|
|
11
register.lua
11
register.lua
|
@ -10,6 +10,7 @@ rocks.ores = {}
|
|||
rocks.register_layer=function(name,params,rock)
|
||||
assert(name)
|
||||
assert(params)
|
||||
assert(rock)
|
||||
assert(params.gain)
|
||||
assert(params.height)
|
||||
local maxheight
|
||||
|
@ -18,8 +19,8 @@ rocks.register_layer=function(name,params,rock)
|
|||
gain=params.gain,
|
||||
height=params.height,
|
||||
maxheight=maxheight,
|
||||
limit=params.limit,
|
||||
seed=params.seed,
|
||||
limit=((params.limit or 2)*params.gain)+params.height,
|
||||
seed=params.seed or 0,
|
||||
rock={ node=rock },
|
||||
veins={},
|
||||
name=name
|
||||
|
@ -35,7 +36,7 @@ rocks.register_vein=function(name,params)
|
|||
rocks.veins[name]={
|
||||
np={
|
||||
offset=0, scale=1, octaves=1, presist=0.8,
|
||||
spread={x=params.spread.y, y=params.spread.z, z=params.spread.x},
|
||||
spread={x=params.spread.x, y=params.spread.y, z=params.spread.z},
|
||||
-- swapped, becouse we generate by horizontal layers
|
||||
seed=params.seed
|
||||
},
|
||||
|
@ -44,8 +45,8 @@ rocks.register_vein=function(name,params)
|
|||
layers=params.layers,
|
||||
ores={}
|
||||
}
|
||||
for ln,ld in pairs(rocks.layers_name) do
|
||||
ld.veins[name]=rocks.veins[name]
|
||||
for i,layername in pairs(params.layers) do
|
||||
rocks.layers_name[layername].veins[name]=rocks.veins[name]
|
||||
end
|
||||
print("[rocks] vein "..name)
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue
Block a user