optimisations
parent
022fa1d794
commit
b9cb3a4d70
|
@ -9,51 +9,48 @@ Valid strings:
|
||||||
]]--
|
]]--
|
||||||
|
|
||||||
|
|
||||||
local color_list = {"cdf4e9","f9fcfb","7c5e3d","1826c9","16f4f4","f483fc","9712bc","ea1212","adadad","535454","19e52a","549159","ef8813","ebf704","000000","e502d6","e8e3e3"}
|
--local color_list = {"cdf4e9","f9fcfb","7c5e3d","1826c9","16f4f4","f483fc","9712bc","ea1212","adadad","535454","19e52a","549159","ef8813","ebf704","000000","e502d6","e8e3e3"}
|
||||||
|
|
||||||
local function get_beacon_beam(glass_nodename)
|
local function get_beacon_beam(glass_nodename)
|
||||||
if string.match(glass_nodename, "cyan") then
|
if string.match(glass_nodename, "cyan") then
|
||||||
return "mcl_beacons:beacon_beam_cdf4e9"
|
return 1
|
||||||
elseif string.match(glass_nodename,"white") then
|
elseif string.match(glass_nodename,"white") then
|
||||||
return "mcl_beacons:beacon_beam_f9fcfb"
|
return 2
|
||||||
elseif string.match(glass_nodename,"brown") then
|
elseif string.match(glass_nodename,"brown") then
|
||||||
return "mcl_beacons:beacon_beam_7c5e3d"
|
return 3
|
||||||
elseif string.match(glass_nodename,"blue") and not string.match(glass_nodename, "light") then
|
elseif string.match(glass_nodename,"blue") and not string.match(glass_nodename, "light") then
|
||||||
return "mcl_beacons:beacon_beam_1826c9"
|
return 4
|
||||||
elseif string.match(glass_nodename,"light_blue") then
|
elseif string.match(glass_nodename,"light_blue") then
|
||||||
return "mcl_beacons:beacon_beam_16f4f4"
|
return 5
|
||||||
elseif string.match(glass_nodename,"pink") then
|
elseif string.match(glass_nodename,"pink") then
|
||||||
return "mcl_beacons:beacon_beam_f483fc"
|
return 6
|
||||||
elseif string.match(glass_nodename, "purple") then
|
elseif string.match(glass_nodename, "purple") then
|
||||||
return "mcl_beacons:beacon_beam_9712bc"
|
return 7
|
||||||
elseif string.match(glass_nodename, "red") then
|
elseif string.match(glass_nodename, "red") then
|
||||||
return "mcl_beacons:beacon_beam_ea1212"
|
return 8
|
||||||
elseif string.match(glass_nodename, "silver") then
|
elseif string.match(glass_nodename, "silver") then
|
||||||
return "mcl_beacons:beacon_beam_adadad"
|
return 9
|
||||||
elseif string.match(glass_nodename, "gray") then
|
elseif string.match(glass_nodename, "gray") then
|
||||||
return "mcl_beacons:beacon_beam_535454"
|
return 10
|
||||||
elseif string.match(glass_nodename, "lime") then
|
elseif string.match(glass_nodename, "lime") then
|
||||||
return "mcl_beacons:beacon_beam_19e52a"
|
return 11
|
||||||
elseif string.match(glass_nodename, "green") then
|
elseif string.match(glass_nodename, "green") then
|
||||||
return "mcl_beacons:beacon_beam_549159"
|
return 12
|
||||||
elseif string.match(glass_nodename, "orange") then
|
elseif string.match(glass_nodename, "orange") then
|
||||||
return "mcl_beacons:beacon_beam_ef8813"
|
return 13
|
||||||
elseif string.match(glass_nodename, "yellow") then
|
elseif string.match(glass_nodename, "yellow") then
|
||||||
return "mcl_beacons:beacon_beam_ebf704"
|
return 14
|
||||||
elseif string.match(glass_nodename, "black") then
|
elseif string.match(glass_nodename, "black") then
|
||||||
return "mcl_beacons:beacon_beam_000000"
|
return 15
|
||||||
elseif string.match(glass_nodename, "magenta") then
|
elseif string.match(glass_nodename, "magenta") then
|
||||||
return "mcl_beacons:beacon_beam_e502d6"
|
return 16
|
||||||
else
|
else
|
||||||
return "mcl_beacons:beacon_beam_e8e3e3"
|
return 0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
minetest.register_node("mcl_beacons:beacon_beam", {
|
||||||
|
tiles = {"^[colorize:#b8bab9"},
|
||||||
for _, color in ipairs(color_list) do
|
|
||||||
minetest.register_node("mcl_beacons:beacon_beam_"..color, {
|
|
||||||
tiles = {"^[colorize:#"..color},
|
|
||||||
drawtype = "nodebox",
|
drawtype = "nodebox",
|
||||||
node_box = {
|
node_box = {
|
||||||
type = "fixed",
|
type = "fixed",
|
||||||
|
@ -61,14 +58,18 @@ for _, color in ipairs(color_list) do
|
||||||
{-0.1250, -0.5000, -0.1250, 0.1250, 0.5000, 0.1250}
|
{-0.1250, -0.5000, -0.1250, 0.1250, 0.5000, 0.1250}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
pointable= false,
|
||||||
light_source = 15,
|
light_source = 15,
|
||||||
walkable = false,
|
walkable = false,
|
||||||
groups = {not_in_creative_inventory=1},
|
groups = {not_in_creative_inventory=1},
|
||||||
_mcl_blast_resistance = 1200,
|
_mcl_blast_resistance = 1200,
|
||||||
|
paramtype2 = "color",
|
||||||
|
palette = "beacon_beam_palette.png",
|
||||||
|
palette_index = 0,
|
||||||
|
buildable_to = true,
|
||||||
})
|
})
|
||||||
mesecon.register_mvps_stopper("mcl_beacons:beacon_beam_"..color)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
mesecon.register_mvps_stopper("mcl_beacons:beacon_beam")
|
||||||
|
|
||||||
local formspec_string=
|
local formspec_string=
|
||||||
"size[11,14]"..
|
"size[11,14]"..
|
||||||
|
@ -101,7 +102,7 @@ local formspec_string=
|
||||||
"list[current_player;main;1,12.5;9,1;]"
|
"list[current_player;main;1,12.5;9,1;]"
|
||||||
|
|
||||||
local function remove_beacon_beam(pos)
|
local function remove_beacon_beam(pos)
|
||||||
for y=pos.y+1, pos.y+401 do
|
for y=pos.y, pos.y+301 do
|
||||||
local node = minetest.get_node({x=pos.x,y=y,z=pos.z})
|
local node = minetest.get_node({x=pos.x,y=y,z=pos.z})
|
||||||
if node.name ~= "air" and node.name ~= "mcl_core:bedrock" and node.name ~= "mcl_core:void" then
|
if node.name ~= "air" and node.name ~= "mcl_core:bedrock" and node.name ~= "mcl_core:void" then
|
||||||
if node.name == "ignore" then
|
if node.name == "ignore" then
|
||||||
|
@ -109,7 +110,7 @@ local function remove_beacon_beam(pos)
|
||||||
node = minetest.get_node({x=pos.x,y=y,z=pos.z})
|
node = minetest.get_node({x=pos.x,y=y,z=pos.z})
|
||||||
end
|
end
|
||||||
|
|
||||||
if string.match(node.name,"mcl_beacons:beacon_beam_") then
|
if node.name == "mcl_beacons:beacon_beam" then
|
||||||
minetest.remove_node({x=pos.x,y=y,z=pos.z})
|
minetest.remove_node({x=pos.x,y=y,z=pos.z})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -159,11 +160,13 @@ local function globalstep_function(pos,player)
|
||||||
if meta:get_int("effect_level") == 2 and power_level < 4 then
|
if meta:get_int("effect_level") == 2 and power_level < 4 then
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
|
local colorblock = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||||
local obstructed = false
|
local obstructed = false
|
||||||
for y=pos.y+1, pos.y+301 do
|
for y=pos.y+1, pos.y+200 do
|
||||||
|
|
||||||
local nodename = minetest.get_node({x=pos.x,y=y, z = pos.z}).name
|
local nodename = minetest.get_node({x=pos.x,y=y, z = pos.z}).name
|
||||||
if nodename ~= "mcl_core:bedrock" and nodename ~= "air" and nodename ~= "ignore" and nodename ~= "mcl_core:void" then --ignore means not loaded, let's just assume that's air
|
if nodename ~= "mcl_core:bedrock" and nodename ~= "air" and nodename ~= "mcl_core:void" and nodename ~= "ignore" then --ignore means not loaded, let's just assume that's air
|
||||||
if not string.match(nodename,"mcl_beacons:beacon_beam_") then
|
if nodename ~="mcl_beacons:beacon_beam" then
|
||||||
if minetest.get_item_group(nodename,"glass") == 0 then
|
if minetest.get_item_group(nodename,"glass") == 0 then
|
||||||
obstructed = true
|
obstructed = true
|
||||||
remove_beacon_beam(pos)
|
remove_beacon_beam(pos)
|
||||||
|
@ -270,9 +273,9 @@ minetest.register_node("mcl_beacons:beacon", {
|
||||||
input:take_item()
|
input:take_item()
|
||||||
inv:set_stack("input",1,input)
|
inv:set_stack("input",1,input)
|
||||||
|
|
||||||
local beam_itemstring = "mcl_beacons:beacon_beam_e8e3e3"
|
local beam_palette_index = 0
|
||||||
remove_beacon_beam(pos)
|
remove_beacon_beam(pos)
|
||||||
for y = pos.y +1, pos.y + 401 do
|
for y = pos.y +1, pos.y + 201 do
|
||||||
local node = minetest.get_node({x=pos.x,y=y,z=pos.z})
|
local node = minetest.get_node({x=pos.x,y=y,z=pos.z})
|
||||||
if node.name == ignore then
|
if node.name == ignore then
|
||||||
minetest.get_voxel_manip():read_from_map({x=pos.x,y=y,z=pos.z}, {x=pos.x,y=y,z=pos.z})
|
minetest.get_voxel_manip():read_from_map({x=pos.x,y=y,z=pos.z}, {x=pos.x,y=y,z=pos.z})
|
||||||
|
@ -282,12 +285,12 @@ minetest.register_node("mcl_beacons:beacon", {
|
||||||
|
|
||||||
if y == pos.y+1 then
|
if y == pos.y+1 then
|
||||||
if minetest.get_item_group(node.name, "glass") ~= 0 then
|
if minetest.get_item_group(node.name, "glass") ~= 0 then
|
||||||
beam_itemstring = get_beacon_beam(node.name)
|
beam_palette_index = get_beacon_beam(node.name)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if node.name == "air" then
|
if node.name == "air" then
|
||||||
minetest.set_node({x=pos.x,y=y,z=pos.z},{name=beam_itemstring})
|
minetest.set_node({x=pos.x,y=y,z=pos.z},{name="mcl_beacons:beacon_beam",param2=beam_palette_index})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
globalstep_function(pos,sender)--call it once outside the globalstep so the player gets the effect right after selecting it
|
globalstep_function(pos,sender)--call it once outside the globalstep so the player gets the effect right after selecting it
|
||||||
|
@ -331,6 +334,23 @@ minetest.register_globalstep(function(dtime)
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
minetest.register_abm{
|
||||||
|
label="update beacon beam",
|
||||||
|
nodenames = {"mcl_beacons:beacon_beam"},
|
||||||
|
interval = 1,
|
||||||
|
chance = 1,
|
||||||
|
action = function(pos)
|
||||||
|
local node_below = minetest.get_node({x=pos.x,y=pos.y-1,z=pos.z})
|
||||||
|
local node_above = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z})
|
||||||
|
|
||||||
|
if node_below.name == "air" then
|
||||||
|
remove_beacon_beam(pos)
|
||||||
|
elseif node_above.name == "air" then
|
||||||
|
minetest.set_node({x=pos.x,y=pos.y+1,z=pos.z},{name="mcl_beacons:beacon_beam",param2=node_above.param2})
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = "mcl_beacons:beacon",
|
output = "mcl_beacons:beacon",
|
||||||
recipe = {
|
recipe = {
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 613 B |
Loading…
Reference in New Issue