From edc10dac472cf89818fed4c30e7b12cb9275fb30 Mon Sep 17 00:00:00 2001 From: Novatux Date: Wed, 5 Jun 2013 06:45:19 +0200 Subject: [PATCH] Add an ABM function which resets heat to 0, since gates/controllers won't be cooled normally if they are moved (piston, etc...) during the cooling delay. --- mesecons/services.lua | 10 ++++++++++ mesecons_gates/init.lua | 6 +++--- mesecons_luacontroller/init.lua | 20 ++++++++++---------- mesecons_microcontroller/init.lua | 20 ++++++++++---------- 4 files changed, 33 insertions(+), 23 deletions(-) diff --git a/mesecons/services.lua b/mesecons/services.lua index a2f9d01..ed95205 100644 --- a/mesecons/services.lua +++ b/mesecons/services.lua @@ -25,5 +25,15 @@ mesecon.on_dignode = function (pos, node) end end +minetest.register_abm({ + nodenames = {"group:overheat"}, + interval = 1.0, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local meta = minetest.env:get_meta(pos) + meta:set_int("heat",0) + end, +}) + minetest.register_on_placenode(mesecon.on_placenode) minetest.register_on_dignode(mesecon.on_dignode) diff --git a/mesecons_gates/init.lua b/mesecons_gates/init.lua index 162c7d8..37b046f 100644 --- a/mesecons_gates/init.lua +++ b/mesecons_gates/init.lua @@ -47,7 +47,7 @@ function set_gate(pos, on) local meta = minetest.env:get_meta(pos) if on ~= gate_state(pos) then yc_heat(meta) - minetest.after(0.5, yc_cool, meta) + --minetest.after(0.5, yc_cool, meta) if yc_overheat(meta) then pop_gate(pos) else @@ -112,13 +112,13 @@ for _, gate in ipairs(gates) do drop = nodename.."_off" nodename = nodename.."_"..onoff description = "You hacker you!" - groups = {dig_immediate=2, not_in_creative_inventory=1} + groups = {dig_immediate=2, not_in_creative_inventory=1, overheat = 1} else onoff = "off" drop = nil nodename = nodename.."_"..onoff description = gate.name.." Gate" - groups = {dig_immediate=2} + groups = {dig_immediate=2, overheat = 1} end tiles = "jeija_microcontroller_bottom.png^".. diff --git a/mesecons_luacontroller/init.lua b/mesecons_luacontroller/init.lua index 02bde9f..4c6ff30 100644 --- a/mesecons_luacontroller/init.lua +++ b/mesecons_luacontroller/init.lua @@ -100,17 +100,17 @@ local heat = function (meta) -- warm up end end -local cool = function (meta) -- cool down after a while - h = meta:get_int("heat") - if h ~= nil then - meta:set_int("heat", h - 1) - end -end +--local cool = function (meta) -- cool down after a while +-- h = meta:get_int("heat") +-- if h ~= nil then +-- meta:set_int("heat", h - 1) +-- end +--end local overheat = function (meta) -- determine if too hot h = meta:get_int("heat") if h == nil then return true end -- if nil then overheat - if h > 20 then + if h > 40 then return true else return false @@ -258,7 +258,7 @@ end local do_overheat = function (pos, meta) -- Overheat protection heat(meta) - minetest.after(0.5, cool, meta) + --minetest.after(0.5, cool, meta) if overheat(meta) then mesecon:swap_node(pos, BASENAME.."_burnt") minetest.env:get_meta(pos):set_string("lc_interrupts", "") @@ -412,9 +412,9 @@ if d == 1 then end if a + b + c + d ~= 0 then - groups = {dig_immediate=2, not_in_creative_inventory=1} + groups = {dig_immediate=2, not_in_creative_inventory=1, overheat = 1} else - groups = {dig_immediate=2} + groups = {dig_immediate=2, overheat = 1} end output_rules[cid] = {} diff --git a/mesecons_microcontroller/init.lua b/mesecons_microcontroller/init.lua index 0f6a7cd..c3ddb4e 100644 --- a/mesecons_microcontroller/init.lua +++ b/mesecons_microcontroller/init.lua @@ -19,9 +19,9 @@ if tostring(d) == "1" then top = top.."^jeija_microcontroller_LED_D.png" end if tostring(d)..tostring(c)..tostring(b)..tostring(a) ~= "0000" then - groups = {dig_immediate=2, not_in_creative_inventory=1, mesecon = 3} + groups = {dig_immediate=2, not_in_creative_inventory=1, mesecon = 3, overheat = 1} else - groups = {dig_immediate=2, mesecon = 3} + groups = {dig_immediate=2, mesecon = 3, overheat = 1} end local rules={} if (a == 1) then table.insert(rules, {x = -1, y = 0, z = 0}) end @@ -162,7 +162,7 @@ end function update_yc(pos) local meta = minetest.env:get_meta(pos) yc_heat(meta) - minetest.after(0.5, yc_cool, meta) + --minetest.after(0.5, yc_cool, meta) if (yc_overheat(meta)) then minetest.env:remove_node(pos) minetest.after(0.2, yc_overheat_off, pos) --wait for pending parsings @@ -674,17 +674,17 @@ function yc_heat(meta) end end -function yc_cool(meta) - h = meta:get_int("heat") - if h ~= nil then - meta:set_int("heat", h - 1) - end -end +--function yc_cool(meta) +-- h = meta:get_int("heat") +-- if h ~= nil then +-- meta:set_int("heat", h - 1) +-- end +--end function yc_overheat(meta) h = meta:get_int("heat") if h == nil then return true end -- if nil the overheat - if h>30 then + if h>60 then return true else return false