Reveal tool: also reveal places where blocks can be placed.

This commit is contained in:
Auke Kok 2017-09-27 21:19:57 -07:00
parent 5450041080
commit ede4e1ec56
3 changed files with 39 additions and 15 deletions

View File

@ -14,8 +14,12 @@ local function nm(s)
return ss:gsub("^%l", string.upper)
end
-- tilecache API
nodes = {}
local tilecache = {}
local get_tiles = function(name)
function nodes.get_tiles(name)
if tilecache[name] then
return tilecache[name]
else
@ -154,18 +158,18 @@ local function placeholder_particles(pos)
if placeable == "" then
return false
end
local nodes = minetest.parse_json(placeable)
local nodelist = minetest.parse_json(placeable)
for _, obj in pairs(minetest.get_objects_inside_radius(pos, 3)) do
if obj:is_player() then
local pname = obj:get_player_name()
local itemstack = obj:get_wielded_item()
local name = itemstack:get_name()
if itemstack and nodes[name] then
if itemstack and nodelist[name] then
minetest.add_particle({
pos = pos,
expirationtime = 0.55,
size = 5,
texture = get_tiles(name),
texture = nodes.get_tiles(name),
glow = 14,
playername = pname,
})
@ -208,7 +212,7 @@ minetest.register_node("nodes:placeholder", {
-- [4] sounds
-- [5] falling node
local nodes = {
local nodelist = {
{"bricks_clay", true, "pickaxe", sounds.stone},
{"bricks_limestone", true, "pickaxe", sounds.stone},
{"bricks_marble", true, "pickaxe", sounds.stone},
@ -292,7 +296,7 @@ local function make_stair_slab(name, groups, b1, b2, snd, tex)
})
end
for _, v in pairs(nodes) do
for _, v in pairs(nodelist) do
local groups = {node = 1}
if v[5] then
groups.falling_node = 1

View File

@ -1 +1,2 @@
frame
nodes

View File

@ -455,7 +455,7 @@ minetest.register_tool("tools:grow", {
frame.register("tools:grow")
minetest.register_tool("tools:reveal", {
description = "Reveal breakable nodes",
description = "Reveal breakable nodes and Placeholder nodes",
inventory_image = "reveal_tool.png",
on_use = function(itemstack, digger, pointed_thing)
if not digger then
@ -477,6 +477,15 @@ minetest.register_tool("tools:reveal", {
}
end
local off = {
{ x = 0, y = 0, z = -9/16},
{ x = 0, y = 0, z = 9/16},
{ x = 0, y = -9/16, z = 0},
{ x = 0, y = 9/16, z = 0},
{ x = -9/16, y = 0, z = 0},
{ x = 9/16, y = 0, z = 0},
}
local ppos = vector.floor(digger:get_pos())
for x = math.max(ppos.x - 8, box.minp.x + 1),
math.min(ppos.x + 8, box.maxp.x - 1) do
@ -484,14 +493,6 @@ minetest.register_tool("tools:reveal", {
math.min(ppos.y + 8, box.maxp.y - 1) do
for z = math.max(ppos.z - 8, box.minp.z + 1),
math.min(ppos.z + 8, box.maxp.z - 1) do
local off = {
{ x = 0, y = 0, z = -9/16},
{ x = 0, y = 0, z = 9/16},
{ x = 0, y = -9/16, z = 0},
{ x = 0, y = 9/16, z = 0},
{ x = -9/16, y = 0, z = 0},
{ x = 9/16, y = 0, z = 0},
}
local pos = vector.new(x, y, z)
local node = minetest.get_node(pos)
local groups = minetest.registered_nodes[node.name] and
@ -520,6 +521,24 @@ minetest.register_tool("tools:reveal", {
})
end
end
if node.name == "nodes:placeholder" then
local meta = minetest.get_meta(pos)
local placeable = meta:get_string("placeable")
if placeable ~= "" then
local nodelist = minetest.parse_json(placeable)
--FIXME just do the first placeholder, only
local n, _ = next(nodelist)
minetest.add_particle({
pos = pos,
expirationtime = 8,
size = 3,
texture = nodes.get_tiles(n),
glow = 14,
playername = name,
})
end
end
end
end
end