Skip to content

Commit

Permalink
Add burnt luacontroller (so you don't lose your program after an over…
Browse files Browse the repository at this point in the history
…heat) and prevent interrupts from piling up (fixes #101, metadata trashing). Idea for burnt luacontroller comes from ShadowNinja.
  • Loading branch information
Uberi committed May 16, 2013
1 parent 6f83f4c commit 682cf34
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 4 deletions.
48 changes: 44 additions & 4 deletions mesecons_luacontroller/init.lua
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 --
------------------------
Expand Down
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 682cf34

Please sign in to comment.