Skip to content

Commit

Permalink
Merge pull request #5 from Zeno-/master
Browse files Browse the repository at this point in the history
Bug fix (falling nodes)
  • Loading branch information
HeroOfTheWinds committed Jul 5, 2014
2 parents 5fa14b4 + 9d2c0bd commit 7ebacfd
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 29 deletions.
26 changes: 13 additions & 13 deletions falling_ice.lua
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ minetest.register_entity("caverealms:falling_ice", {
if obj:is_player() then
obj:set_hp(obj:get_hp() - 8)
end
end
end
-- Note: walkable is in the node definition, not in item groups
if not bcd or
(bcd.walkable or
Expand Down Expand Up @@ -103,19 +103,19 @@ minetest.register_entity("caverealms:falling_ice", {
-- remove entity
--minetest.add_node(np, self.node)
self.object:remove()
nodeupdate(np)
caverealms:nodeupdate(np)
else
-- Do nothing
end
end
})

function spawn_falling_node(p, node)
function caverealms:spawn_falling_node(p, node)
obj = minetest.add_entity(p, "caverealms:falling_ice")
obj:get_luaentity():set_node(node)
end

function drop_attached_node(p)
function caverealms:drop_attached_node(p)
local nn = minetest.get_node(p).name
minetest.remove_node(p)
for _,item in ipairs(minetest.get_node_drops(nn, "")) do
Expand All @@ -128,7 +128,7 @@ function drop_attached_node(p)
end
end

function check_attached_node(p, n)
function caverealms:check_attached_node(p, n)
local def = minetest.registered_nodes[n.name]
local d = {x=0, y=0, z=0}
if def.paramtype2 == "wallmounted" then
Expand Down Expand Up @@ -161,7 +161,7 @@ end
-- Some common functions
--

function nodeupdate_single(p, delay)
function caverealms:nodeupdate_single(p, delay)
n = minetest.get_node(p)
if minetest.get_item_group(n.name, "falling_node") ~= 0 then
p_bottom = {x=p.x, y=p.y-1, z=p.z}
Expand All @@ -175,25 +175,25 @@ function nodeupdate_single(p, delay)
(not minetest.registered_nodes[n_bottom.name].walkable or
minetest.registered_nodes[n_bottom.name].buildable_to) then
if delay then
minetest.after(0.1, nodeupdate_single, {x=p.x, y=p.y, z=p.z}, false)
minetest.after(0.1, caverealms.nodeupdate_single, {x=p.x, y=p.y, z=p.z}, false)
else
n.level = minetest.env:get_node_level(p)
minetest.remove_node(p)
spawn_falling_node(p, n)
nodeupdate(p)
caverealms:spawn_falling_node(p, n)
caverealms:nodeupdate(p)
end
end
end

if minetest.get_item_group(n.name, "attached_node") ~= 0 then
if not check_attached_node(p, n) then
drop_attached_node(p)
nodeupdate(p)
caverealms:drop_attached_node(p)
caverealms:nodeupdate(p)
end
end
end

function nodeupdate(p, delay)
function caverealms:nodeupdate(p, delay)
-- Round p to prevent falling entities to get stuck
p.x = math.floor(p.x+0.5)
p.y = math.floor(p.y+0.5)
Expand All @@ -202,7 +202,7 @@ function nodeupdate(p, delay)
for x = -1,1 do
for y = -1,1 do
for z = -1,1 do
nodeupdate_single({x=p.x+x, y=p.y+y, z=p.z+z}, delay or not (x==0 and y==0 and z==0))
caverealms:nodeupdate_single({x=p.x+x, y=p.y+y, z=p.z+z}, delay or not (x==0 and y==0 and z==0))
end
end
end
Expand Down
38 changes: 22 additions & 16 deletions init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,14 @@ local modpath = minetest.get_modpath(minetest.get_current_modname())
--load companion lua files
dofile(modpath.."/config.lua") --configuration file; holds various constants
dofile(modpath.."/crafting.lua") --crafting recipes
dofile(modpath.."/falling_ice.lua") --complicated function for falling icicles
dofile(modpath.."/nodes.lua") --node definitions
dofile(modpath.."/functions.lua") --function definitions

if caverealms.config.falling_icicles == true then
dofile(modpath.."/falling_ice.lua") --complicated function for falling icicles
print("[caverealms] falling icicles enabled.")
end

-- Parameters

local YMIN = caverealms.config.ymin -- Approximate realm limits.
Expand Down Expand Up @@ -90,13 +94,13 @@ minetest.register_on_generated(function(minp, maxp, seed)
local x0 = minp.x
local y0 = minp.y
local z0 = minp.z

print ("[caverealms] chunk minp ("..x0.." "..y0.." "..z0..")") --tell people you are generating a chunk

local vm, emin, emax = minetest.get_mapgen_object("voxelmanip")
local area = VoxelArea:new{MinEdge=emin, MaxEdge=emax}
local data = vm:get_data()

--grab content IDs
local c_air = minetest.get_content_id("air")
local c_stone = minetest.get_content_id("default:stone")
Expand All @@ -118,21 +122,21 @@ minetest.register_on_generated(function(minp, maxp, seed)
local c_worm = minetest.get_content_id("caverealms:glow_worm")
local c_iciu = minetest.get_content_id("caverealms:icicle_up")
local c_icid = minetest.get_content_id("caverealms:icicle_down")

--mandatory values
local sidelen = x1 - x0 + 1 --length of a mapblock
local chulens = {x=sidelen, y=sidelen, z=sidelen} --table of chunk edges
local minposxyz = {x=x0, y=y0, z=z0} --bottom corner
local minposxz = {x=x0, y=z0} --2D bottom corner

local nvals_cave = minetest.get_perlin_map(np_cave, chulens):get3dMap_flat(minposxyz) --cave noise for structure
local nvals_wave = minetest.get_perlin_map(np_wave, chulens):get3dMap_flat(minposxyz) --wavy structure of cavern ceilings and floors
local nvals_biome = minetest.get_perlin_map(np_biome, chulens):get2dMap_flat({x=x0+150, y=z0+50}) --2D noise for biomes (will be 3D humidity/temp later)

local nixyz = 1 --3D node index
local nixz = 1 --2D node index
local nixyz2 = 1 --second 3D index for second loop

for z = z0, z1 do -- for each xy plane progressing northwards
--structure loop
for y = y0, y1 do -- for each x row progressing upwards
Expand All @@ -155,7 +159,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
vi = vi + 1
end
end

--decoration loop
for y = y0, y1 do -- for each x row progressing upwards
local tcave --same as above
Expand All @@ -168,7 +172,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
end
local vi = area:index(x0, y, z)
for x = x0, x1 do -- for each node do

--determine biome
local biome = false --preliminary declaration
n_biome = nvals_biome[nixz] --make an easier reference to the noise
Expand All @@ -186,14 +190,13 @@ minetest.register_on_generated(function(minp, maxp, seed)
else
biome = 3 --algae
end

if math.floor(((nvals_cave[nixyz2] + nvals_wave[nixyz2])/2)*100) == math.floor(tcave*100) then
--ceiling
local ai = area:index(x,y+1,z) --above index
if data[ai] == c_stone and data[vi] == c_air then --ceiling
if math.random() < ICICHA and (biome == 4 or biome == 5) then
local bi = area:index(x,y-1,z)
data[bi] = c_icid
data[vi] = c_icid
end
if math.random() < WORMCHA then
data[vi] = c_worm
Expand Down Expand Up @@ -259,15 +262,15 @@ minetest.register_on_generated(function(minp, maxp, seed)
data[ai] = c_iciu
end
end

if math.random() < STAGCHA then
caverealms:stalagmite(x,y,z, area, data)
end
if math.random() < CRYSTAL then
caverealms:crystal_stalagmite(x,y,z, area, data, biome)
end
end

end
nixyz2 = nixyz2 + 1
nixz = nixz + 1
Expand All @@ -277,7 +280,7 @@ minetest.register_on_generated(function(minp, maxp, seed)
end
nixz = nixz + sidelen --shift the 2D index up a layer
end

--send data back to voxelmanip
vm:set_data(data)
--calc lighting
Expand All @@ -289,3 +292,6 @@ minetest.register_on_generated(function(minp, maxp, seed)
local chugent = math.ceil((os.clock() - t1) * 1000) --grab how long it took
print ("[caverealms] "..chugent.." ms") --tell people how long
end)


print("[caverealms] loaded!")

0 comments on commit 7ebacfd

Please sign in to comment.