From 682cf3479209cb9a62724e957b65a0e450a6dfeb Mon Sep 17 00:00:00 2001 From: Anthony Zhang Date: Wed, 15 May 2013 21:36:16 -0400 Subject: [PATCH] Add burnt luacontroller (so you don't lose your program after an overheat) and prevent interrupts from piling up (fixes #101, metadata trashing). Idea for burnt luacontroller comes from ShadowNinja. --- mesecons_luacontroller/init.lua | 48 ++++++++++++++++-- .../jeija_luacontroller_burnt_top.png | Bin 0 -> 8706 bytes 2 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 mesecons_textures/textures/jeija_luacontroller_burnt_top.png diff --git a/mesecons_luacontroller/init.lua b/mesecons_luacontroller/init.lua index b4b9040..76abcca 100644 --- a/mesecons_luacontroller/init.lua +++ b/mesecons_luacontroller/init.lua @@ -149,8 +149,17 @@ local getinterrupt = function(pos) local iid = iid or math.random() local meta = minetest.env:get_meta(pos) local interrupts = minetest.deserialize(meta:get_string("lc_interrupts")) or {} - table.insert (interrupts, iid) - meta:set_string("lc_interrupts", minetest.serialize(interrupts)) + local found = false + for _, i in ipairs(interrupts) do + if minetest.serialize(i) == minetest.serialize(event.iid) then + found = true + break + end + end + if not found then + table.insert(interrupts, iid) + meta:set_string("lc_interrupts", minetest.serialize(interrupts)) + end minetest.after(time, interrupt, {pos=pos, iid = iid}) end return interrupt @@ -251,9 +260,9 @@ local do_overheat = function (pos, meta) heat(meta) minetest.after(0.5, cool, meta) if overheat(meta) then - minetest.env:remove_node(pos) + mesecon:swap_node(pos, BASENAME.."_burnt") + minetest.env:get_meta(pos):set_string("lc_interrupts", "") minetest.after(0.2, overheat_off, pos) -- wait for pending operations - minetest.env:add_item(pos, BASENAME.."0000") return true end end @@ -479,6 +488,37 @@ end end end +--overheated luacontroller +minetest.register_node(BASENAME .. "_burnt", { + drawtype = "nodebox", + tiles = { + "jeija_luacontroller_burnt_top.png", + "jeija_microcontroller_bottom.png", + "jeija_microcontroller_sides.png", + "jeija_microcontroller_sides.png", + "jeija_microcontroller_sides.png", + "jeija_microcontroller_sides.png" + }, + inventory_image = "jeija_luacontroller_burnt_top.png", + paramtype = "light", + groups = {dig_immediate=2, not_in_creative_inventory=1}, + drop = BASENAME.."0000", + sunlight_propagates = true, + selection_box = selectionbox, + node_box = nodebox, + on_construct = reset_meta, + on_receive_fields = function(pos, formname, fields) + reset(pos) + reset_meta(pos, fields.code) + local err = lc_update(pos, {type="program"}) + if err then print(err) end + reset_meta(pos, fields.code, err) + end, + sounds = default.node_sound_stone_defaults(), + is_luacontroller = true, + virtual_portstates = {a = false, b = false, c = false, d = false}, +}) + ------------------------ -- Craft Registration -- ------------------------ diff --git a/mesecons_textures/textures/jeija_luacontroller_burnt_top.png b/mesecons_textures/textures/jeija_luacontroller_burnt_top.png new file mode 100644 index 0000000000000000000000000000000000000000..d1a17af2d4ca7d1e623f0d9492bc85977302b641 GIT binary patch literal 8706 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 literal 0 HcmV?d00001