[nalc_technic] Tentative pour améliorer les performances
This commit is contained in:
parent
d8016d3b71
commit
1822cf2d48
@ -9,7 +9,7 @@ minetest.register_craft({
|
|||||||
{"technic:motor", "technic:quarry", "technic:diamond_drill_head"},
|
{"technic:motor", "technic:quarry", "technic:diamond_drill_head"},
|
||||||
{"technic:quarry", "technic:hv_cable", "technic:quarry"}
|
{"technic:quarry", "technic:hv_cable", "technic:quarry"}
|
||||||
},
|
},
|
||||||
output = "nalc_technic:superquarry",
|
output = "nalc:superquarry",
|
||||||
})
|
})
|
||||||
|
|
||||||
local superquarry_dig_above_nodes = 3 -- How far above the superquarry we will dig nodes
|
local superquarry_dig_above_nodes = 3 -- How far above the superquarry we will dig nodes
|
||||||
@ -21,7 +21,7 @@ local function set_superquarry_formspec(meta)
|
|||||||
local radius = meta:get_int("size")
|
local radius = meta:get_int("size")
|
||||||
local formspec = "size[6,4.3]"..
|
local formspec = "size[6,4.3]"..
|
||||||
"list[context;cache;0,1;4,3;]"..
|
"list[context;cache;0,1;4,3;]"..
|
||||||
"item_image[4.8,0;1,1;nalc_technic:superquarry]"..
|
"item_image[4.8,0;1,1;nalc:superquarry]"..
|
||||||
"label[0,0.2;"..S("%s superquarry"):format("HV").."]"..
|
"label[0,0.2;"..S("%s superquarry"):format("HV").."]"..
|
||||||
"field[4.3,3.5;2,1;size;"..S("Radius:")..";"..radius.."]"
|
"field[4.3,3.5;2,1;size;"..S("Radius:")..";"..radius.."]"
|
||||||
if meta:get_int("enabled") == 0 then
|
if meta:get_int("enabled") == 0 then
|
||||||
@ -104,7 +104,7 @@ local function superquarry_run(pos, node)
|
|||||||
local inv = meta:get_inventory()
|
local inv = meta:get_inventory()
|
||||||
-- initialize cache for the case we load an older world
|
-- initialize cache for the case we load an older world
|
||||||
inv:set_size("cache", 12)
|
inv:set_size("cache", 12)
|
||||||
-- toss a coin whether we do an automatic purge. Chance 1:100
|
-- toss a coin whether we do an automatic purge. Chance 1:200
|
||||||
local purge_rand = math.random()
|
local purge_rand = math.random()
|
||||||
if purge_rand <= 0.005 then
|
if purge_rand <= 0.005 then
|
||||||
meta:set_int("purge_on", 1)
|
meta:set_int("purge_on", 1)
|
||||||
@ -122,15 +122,6 @@ local function superquarry_run(pos, node)
|
|||||||
vector.new(0, superquarry_dig_above_nodes, 0)),
|
vector.new(0, superquarry_dig_above_nodes, 0)),
|
||||||
pdir),
|
pdir),
|
||||||
vector.multiply(qdir, -radius))
|
vector.multiply(qdir, -radius))
|
||||||
local endpos = vector.add(vector.add(vector.add(startpos,
|
|
||||||
vector.new(0, -superquarry_dig_above_nodes-superquarry_max_depth, 0)),
|
|
||||||
vector.multiply(pdir, diameter-1)),
|
|
||||||
vector.multiply(qdir, diameter-1))
|
|
||||||
local vm = VoxelManip()
|
|
||||||
local minpos, maxpos = vm:read_from_map(startpos, endpos)
|
|
||||||
local area = VoxelArea:new({MinEdge=minpos, MaxEdge=maxpos})
|
|
||||||
local data = vm:get_data()
|
|
||||||
local c_air = minetest.get_content_id("air")
|
|
||||||
local owner = meta:get_string("owner")
|
local owner = meta:get_string("owner")
|
||||||
local nd = meta:get_int("dug")
|
local nd = meta:get_int("dug")
|
||||||
while nd ~= diameter*diameter * (superquarry_dig_above_nodes+1+superquarry_max_depth) do
|
while nd ~= diameter*diameter * (superquarry_dig_above_nodes+1+superquarry_max_depth) do
|
||||||
@ -154,7 +145,17 @@ local function superquarry_run(pos, node)
|
|||||||
if can_dig then
|
if can_dig then
|
||||||
dignode = technic.get_or_load_node(digpos) or minetest.get_node(digpos)
|
dignode = technic.get_or_load_node(digpos) or minetest.get_node(digpos)
|
||||||
local dignodedef = minetest.registered_nodes[dignode.name] or {diggable=false}
|
local dignodedef = minetest.registered_nodes[dignode.name] or {diggable=false}
|
||||||
if not dignodedef.diggable or (dignodedef.can_dig and not dignodedef.can_dig(digpos, nil)) then
|
-- doors mod among other thing does NOT like a nil digger...
|
||||||
|
local fakedigger = {
|
||||||
|
get_player_name = function()
|
||||||
|
return "!technic_quarry_fake_digger"
|
||||||
|
end,
|
||||||
|
is_player = function() return false end,
|
||||||
|
get_wielded_item = function()
|
||||||
|
return ItemStack("air")
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
if not dignodedef.diggable or (dignodedef.can_dig and not dignodedef.can_dig(digpos, fakedigger)) then
|
||||||
can_dig = false
|
can_dig = false
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -209,7 +210,7 @@ local function send_move_error(player)
|
|||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node("nalc_technic:superquarry", {
|
minetest.register_node(":nalc:superquarry", {
|
||||||
description = S("%s superquarry"):format("HV"),
|
description = S("%s superquarry"):format("HV"),
|
||||||
tiles = {
|
tiles = {
|
||||||
"moreores_mithril_block.png",
|
"moreores_mithril_block.png",
|
||||||
@ -270,6 +271,6 @@ minetest.register_node("nalc_technic:superquarry", {
|
|||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
technic.register_machine("HV", "nalc_technic:superquarry", technic.receiver)
|
technic.register_machine("HV", "nalc:superquarry", technic.receiver)
|
||||||
|
|
||||||
minetest.register_alias("nalc:superquarry", "nalc_technic:superquarry")
|
minetest.register_alias("nalc_technic:superquarry", "nalc:superquarry")
|
||||||
|
Loading…
Reference in New Issue
Block a user