forked from minetest-mods/technic
Remove unnescescary function calls from forcefields and add an enable/disable button
This commit is contained in:
parent
cbe78c13c1
commit
e5d48e9492
|
@ -1,7 +1,7 @@
|
||||||
--Forcefield mod by ShadowNinja
|
--Forcefield mod by ShadowNinja
|
||||||
|
|
||||||
local forcefield_emitter_buffer_size = 10000
|
local forcefield_emitter_buffer_size = 10000
|
||||||
local forcefield_emitter_power_consumption = 1
|
local forcefield_emitter_power_consumption = 0.8
|
||||||
local forcefield_update_interval = 1
|
local forcefield_update_interval = 1
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
|
@ -16,7 +16,7 @@ minetest.register_craft({
|
||||||
local function get_forcefield_count(range)
|
local function get_forcefield_count(range)
|
||||||
local count = 0
|
local count = 0
|
||||||
for x=-range,range do
|
for x=-range,range do
|
||||||
for y=0,range do
|
for y=-range,range do
|
||||||
for z=-range,range do
|
for z=-range,range do
|
||||||
if ((x*x+y*y+z*z) <= (range * range + range)) then
|
if ((x*x+y*y+z*z) <= (range * range + range)) then
|
||||||
if (y == 0) or ((range-1) * (range-1) + (range-1) <= x*x+y*y+z*z) then
|
if (y == 0) or ((range-1) * (range-1) + (range-1) <= x*x+y*y+z*z) then
|
||||||
|
@ -71,6 +71,13 @@ forcefield_receive_fields = function(pos, formname, fields, sender)
|
||||||
local range = meta:get_int("range")
|
local range = meta:get_int("range")
|
||||||
if fields.add then range = range + 1 end
|
if fields.add then range = range + 1 end
|
||||||
if fields.subtract then range = range - 1 end
|
if fields.subtract then range = range - 1 end
|
||||||
|
if fields.toggle then
|
||||||
|
if meta:get_int("enabled") == 1 then
|
||||||
|
meta:set_int("enabled", 0)
|
||||||
|
else
|
||||||
|
meta:set_int("enabled", 1)
|
||||||
|
end
|
||||||
|
end
|
||||||
if range <= 20 and range >= 0 and meta:get_int("range") ~= range then
|
if range <= 20 and range >= 0 and meta:get_int("range") ~= range then
|
||||||
remove_forcefield(pos, meta:get_int("range"))
|
remove_forcefield(pos, meta:get_int("range"))
|
||||||
meta:set_int("range", range)
|
meta:set_int("range", range)
|
||||||
|
@ -92,6 +99,7 @@ function get_forcefield_formspec(range, load)
|
||||||
"label[4,2;"..range.."]"..
|
"label[4,2;"..range.."]"..
|
||||||
"button[3,2;1,1;add;+]"..
|
"button[3,2;1,1;add;+]"..
|
||||||
"button[5,2;1,1;subtract;-]"..
|
"button[5,2;1,1;subtract;-]"..
|
||||||
|
"button[3,3;3,1;toggle;Enable/Disable]"..
|
||||||
"list[current_player;main;0,5;8,4;]"
|
"list[current_player;main;0,5;8,4;]"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -105,25 +113,32 @@ local function forcefield_check(pos)
|
||||||
meta:set_string("formspec", get_forcefield_formspec(meta:get_int("range"), load))
|
meta:set_string("formspec", get_forcefield_formspec(meta:get_int("range"), load))
|
||||||
|
|
||||||
local power_requirement = get_forcefield_count(meta:get_int("range")) * forcefield_emitter_power_consumption
|
local power_requirement = get_forcefield_count(meta:get_int("range")) * forcefield_emitter_power_consumption
|
||||||
if meta:get_int("mesecons_powered") == 0 and internal_EU_buffer >= power_requirement then
|
if meta:get_int("enabled") == 1 and internal_EU_buffer >= power_requirement then
|
||||||
if node.name == "technic:forcefield_emitter_off" then
|
if node.name == "technic:forcefield_emitter_off" then
|
||||||
hacky_swap_node(pos, "technic:forcefield_emitter_on")
|
hacky_swap_node(pos, "technic:forcefield_emitter_on")
|
||||||
minetest.env:get_node_timer(pos):start(forcefield_update_interval)
|
|
||||||
end
|
end
|
||||||
internal_EU_buffer=internal_EU_buffer-power_requirement;
|
internal_EU_buffer=internal_EU_buffer-power_requirement;
|
||||||
meta:set_float("internal_EU_buffer", internal_EU_buffer)
|
meta:set_float("internal_EU_buffer", internal_EU_buffer)
|
||||||
add_forcefield(pos, meta:get_int("range"))
|
add_forcefield(pos, meta:get_int("range"))
|
||||||
else
|
else
|
||||||
remove_forcefield(pos, meta:get_int("range"))
|
|
||||||
if node.name == "technic:forcefield_emitter_on" then
|
if node.name == "technic:forcefield_emitter_on" then
|
||||||
|
remove_forcefield(pos, meta:get_int("range"))
|
||||||
hacky_swap_node(pos, "technic:forcefield_emitter_off")
|
hacky_swap_node(pos, "technic:forcefield_emitter_off")
|
||||||
minetest.env:get_node_timer(pos):start(forcefield_update_interval)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return true
|
return true
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local mesecons = {effector = {
|
||||||
|
action_on = function(pos, node)
|
||||||
|
minetest.env:get_meta(pos):set_int("enabled", 0)
|
||||||
|
end,
|
||||||
|
action_off = function(pos, node)
|
||||||
|
minetest.env:get_meta(pos):set_int("enabled", 1)
|
||||||
|
end
|
||||||
|
}}
|
||||||
|
|
||||||
minetest.register_node("technic:forcefield_emitter_off", {
|
minetest.register_node("technic:forcefield_emitter_off", {
|
||||||
description = "Forcefield emitter",
|
description = "Forcefield emitter",
|
||||||
inventory_image = minetest.inventorycube("technic_forcefield_emitter_off.png"),
|
inventory_image = minetest.inventorycube("technic_forcefield_emitter_off.png"),
|
||||||
|
@ -140,18 +155,11 @@ minetest.register_node("technic:forcefield_emitter_off", {
|
||||||
meta:set_float("internal_EU_buffer", 0)
|
meta:set_float("internal_EU_buffer", 0)
|
||||||
meta:set_float("internal_EU_buffer_size", forcefield_emitter_buffer_size)
|
meta:set_float("internal_EU_buffer_size", forcefield_emitter_buffer_size)
|
||||||
meta:set_int("range", 10)
|
meta:set_int("range", 10)
|
||||||
meta:set_int("mesecons_powered", 0)
|
meta:set_int("enabled", 1)
|
||||||
meta:set_string("formspec", get_forcefield_formspec(meta:get_int("range", 0)))
|
meta:set_string("formspec", get_forcefield_formspec(meta:get_int("range", 0)))
|
||||||
meta:set_string("infotext", "Forcefield emitter");
|
meta:set_string("infotext", "Forcefield emitter");
|
||||||
end,
|
end,
|
||||||
mesecons = {effector = {
|
mesecons = mesecons
|
||||||
action_on = function (pos, node)
|
|
||||||
minetest.env:get_meta(pos):set_int("mesecons_powered", 1)
|
|
||||||
end,
|
|
||||||
action_off = function(pos, node)
|
|
||||||
minetest.env:get_meta(pos):set_int("mesecons_powered", 0)
|
|
||||||
end
|
|
||||||
}}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("technic:forcefield_emitter_on", {
|
minetest.register_node("technic:forcefield_emitter_on", {
|
||||||
|
@ -169,7 +177,7 @@ minetest.register_node("technic:forcefield_emitter_on", {
|
||||||
meta:set_float("internal_EU_buffer", 0)
|
meta:set_float("internal_EU_buffer", 0)
|
||||||
meta:set_float("internal_EU_buffer_size", forcefield_emitter_buffer_size)
|
meta:set_float("internal_EU_buffer_size", forcefield_emitter_buffer_size)
|
||||||
meta:set_int("range", 10)
|
meta:set_int("range", 10)
|
||||||
meta:set_int("mesecons_powered", 0)
|
meta:set_int("enabled", 1)
|
||||||
meta:set_string("formspec", get_forcefield_formspec(meta:get_int("range"), 0))
|
meta:set_string("formspec", get_forcefield_formspec(meta:get_int("range"), 0))
|
||||||
meta:set_string("infotext", "Forcefield emitter");
|
meta:set_string("infotext", "Forcefield emitter");
|
||||||
end,
|
end,
|
||||||
|
@ -178,14 +186,7 @@ minetest.register_node("technic:forcefield_emitter_on", {
|
||||||
return minetest.node_dig(pos, node, digger)
|
return minetest.node_dig(pos, node, digger)
|
||||||
end,
|
end,
|
||||||
technic_power_machine=1,
|
technic_power_machine=1,
|
||||||
mesecons = {effector = {
|
mesecons = mesecons
|
||||||
action_on = function(pos, node)
|
|
||||||
minetest.env:get_meta(pos):set_int("mesecons_powered", 1)
|
|
||||||
end,
|
|
||||||
action_off = function(pos, node)
|
|
||||||
minetest.env:get_meta(pos):set_int("mesecons_powered", 0)
|
|
||||||
end
|
|
||||||
}}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_node("technic:forcefield", {
|
minetest.register_node("technic:forcefield", {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user