summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeija <norrepli@gmail.com>2012-12-09 13:28:32 +0100
committerJeija <norrepli@gmail.com>2012-12-09 13:28:32 +0100
commit961b955f2d0872c4e84d9df63ea10a18643dfcbe (patch)
tree4bc759d701d5ff21a0a24900d36f1460e15469b6
parenta0a3328f7c6b8618c40a8cb60c13111f06b6562a (diff)
downloadmesecons-961b955f2d0872c4e84d9df63ea10a18643dfcbe.tar
mesecons-961b955f2d0872c4e84d9df63ea10a18643dfcbe.tar.gz
mesecons-961b955f2d0872c4e84d9df63ea10a18643dfcbe.tar.bz2
mesecons-961b955f2d0872c4e84d9df63ea10a18643dfcbe.tar.xz
mesecons-961b955f2d0872c4e84d9df63ea10a18643dfcbe.zip
Port door, fix button/lever bug, new visual style for receiver
-rw-r--r--mesecons/presets.lua14
-rw-r--r--mesecons_button/init.lua38
-rw-r--r--mesecons_compatibility/init.lua174
-rw-r--r--mesecons_receiver/init.lua10
-rw-r--r--mesecons_textures/textures/receiver_bottom_off.pngbin242 -> 494 bytes
-rw-r--r--mesecons_textures/textures/receiver_bottom_on.pngbin247 -> 239 bytes
-rw-r--r--mesecons_textures/textures/receiver_fb_off.pngbin374 -> 494 bytes
-rw-r--r--mesecons_textures/textures/receiver_fb_on.pngbin517 -> 239 bytes
-rw-r--r--mesecons_textures/textures/receiver_lr_off.pngbin317 -> 494 bytes
-rw-r--r--mesecons_textures/textures/receiver_lr_on.pngbin321 -> 239 bytes
-rw-r--r--mesecons_textures/textures/receiver_top_off.pngbin240 -> 494 bytes
-rw-r--r--mesecons_textures/textures/receiver_top_on.pngbin245 -> 239 bytes
-rw-r--r--mesecons_walllever/init.lua34
13 files changed, 205 insertions, 65 deletions
diff --git a/mesecons/presets.lua b/mesecons/presets.lua
index 463a0f8..9988d22 100644
--- a/mesecons/presets.lua
+++ b/mesecons/presets.lua
@@ -1,4 +1,4 @@
-mesecon.rules={}
+mesecon.rules = {}
mesecon.state = {}
mesecon.rules.default =
@@ -23,5 +23,17 @@ mesecon.rules.buttonlike =
{x = 1, y =-1, z =-1},
{x = 2, y = 0, z = 0}}
+mesecon.rules.buttonlike_get = function(node)
+ local rules = mesecon.rules.buttonlike
+ if node.param2 == 2 then
+ rules=mesecon:rotate_rules_left(rules)
+ elseif node.param2 == 3 then
+ rules=mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules))
+ elseif node.param2 == 0 then
+ rules=mesecon:rotate_rules_right(rules)
+ end
+ return rules
+end
+
mesecon.state.on = "on"
mesecon.state.off = "off"
diff --git a/mesecons_button/init.lua b/mesecons_button/init.lua
index d4e6802..282e305 100644
--- a/mesecons_button/init.lua
+++ b/mesecons_button/init.lua
@@ -2,6 +2,15 @@
-- A button that when pressed emits power for 1 second
-- and then turns off again
+mesecon.button_turnoff = function (pos)
+ local node = minetest.env:get_node(pos)
+ if node.name=="mesecons_button:button_on" then --has not been dug
+ mesecon:swap_node(pos, "mesecons_button:button_off")
+ local rules = mesecon.rules.buttonlike_get(node)
+ mesecon:receptor_off(pos, rules)
+ end
+end
+
minetest.register_node("mesecons_button:button_off", {
drawtype = "nodebox",
tiles = {
@@ -32,13 +41,12 @@ minetest.register_node("mesecons_button:button_off", {
description = "Button",
on_punch = function (pos, node)
mesecon:swap_node(pos, "mesecons_button:button_on")
- local rules=mesecon.button_get_rules(node)
- mesecon:receptor_on(pos, rules)
- minetest.after(1, mesecon.button_turnoff, {pos=pos, param2=node.param2})
+ mesecon:receptor_on(pos, mesecon.rules.buttonlike_get(node))
+ minetest.after(1, mesecon.button_turnoff, pos)
end,
mesecons = {receptor = {
state = mesecon.state.off,
- rules = button_get_rules
+ rules = mesecon.rules.buttonlike_get
}}
})
@@ -74,30 +82,10 @@ minetest.register_node("mesecons_button:button_on", {
description = "Button",
mesecons = {receptor = {
state = mesecon.state.on,
- rules = button_get_rules
+ rules = mesecon.rules.buttonlike_get
}}
})
-mesecon.button_turnoff = function (params)
- if minetest.env:get_node(params.pos).name=="mesecons_button:button_on" then
- mesecon:swap_node(params.pos, "mesecons_button:button_off")
- local rules=mesecon.button_get_rules(params)
- mesecon:receptor_off(params.pos, rules)
- end
-end
-
-mesecon.button_get_rules = function(node)
- local rules = mesecon.rules.buttonlike
- if node.param2 == 2 then
- rules=mesecon:rotate_rules_left(rules)
- elseif node.param2 == 3 then
- rules=mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules))
- elseif node.param2 == 0 then
- rules=mesecon:rotate_rules_right(rules)
- end
- return rules
-end
-
minetest.register_craft({
output = '"mesecons_button:button_off" 2',
recipe = {
diff --git a/mesecons_compatibility/init.lua b/mesecons_compatibility/init.lua
index dcf94de..b2f793c 100644
--- a/mesecons_compatibility/init.lua
+++ b/mesecons_compatibility/init.lua
@@ -1,11 +1,165 @@
-minetest.after(0,
-function ()
- if minetest.registered_nodes["doors:door_wood_b_1"] then
- mesecon:register_effector("doors:door_wood_b_1", "doors:door_wood_b_2")
- mesecon:register_on_signal_change(function(pos, node)
- if node.name == "doors:door_wood_b_2" or node.name == "doors:door_wood_b_1" then
- minetest.registered_nodes[node.name].on_punch(pos, node)
- end
- end)
+doors = {}
+
+-- Registers a door - REDEFINITION ONLY | DOORS MOD MUST HAVE BEEN LOADED BEFORE
+-- name: The name of the door
+-- def: a table with the folowing fields:
+-- description
+-- inventory_image
+-- groups
+-- tiles_bottom: the tiles of the bottom part of the door {front, side}
+-- tiles_top: the tiles of the bottom part of the door {front, side}
+-- If the following fields are not defined the default values are used
+-- node_box_bottom
+-- node_box_top
+-- selection_box_bottom
+-- selection_box_top
+-- only_placer_can_open: if true only the player who placed the door can
+-- open it
+
+function doors:register_door(name, def)
+ def.groups.not_in_creative_inventory = 1
+
+ local box = {{-0.5, -0.5, -0.5, 0.5, 0.5, -0.5+1.5/16}}
+
+ if not def.node_box_bottom then
+ def.node_box_bottom = box
+ end
+ if not def.node_box_top then
+ def.node_box_top = box
+ end
+ if not def.selection_box_bottom then
+ def.selection_box_bottom= box
+ end
+ if not def.selection_box_top then
+ def.selection_box_top = box
+ end
+
+ local tt = def.tiles_top
+ local tb = def.tiles_bottom
+
+ local function after_dig_node(pos, name)
+ if minetest.env:get_node(pos).name == name then
+ minetest.env:remove_node(pos)
+ end
+ end
+
+ local function on_punch(pos, dir, check_name, replace, replace_dir, params)
+ pos.y = pos.y+dir
+ if not minetest.env:get_node(pos).name == check_name then
+ return
+ end
+ local p2 = minetest.env:get_node(pos).param2
+ p2 = params[p2+1]
+
+ local meta = minetest.env:get_meta(pos):to_table()
+ minetest.env:set_node(pos, {name=replace_dir, param2=p2})
+ minetest.env:get_meta(pos):from_table(meta)
+
+ pos.y = pos.y-dir
+ meta = minetest.env:get_meta(pos):to_table()
+ minetest.env:set_node(pos, {name=replace, param2=p2})
+ minetest.env:get_meta(pos):from_table(meta)
end
-end)
+
+ local function on_mesecons_signal_open (pos, node)
+ on_punch(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0})
+ end
+
+ local function on_mesecons_signal_close (pos, node)
+ on_punch(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2})
+ end
+
+ local function check_player_priv(pos, player)
+ if not def.only_placer_can_open then
+ return true
+ end
+ local meta = minetest.env:get_meta(pos)
+ local pn = player:get_player_name()
+ return meta:get_string("doors_owner") == pn
+ end
+
+ minetest.register_node(":"..name.."_b_1", {
+ tiles = {tb[2], tb[2], tb[2], tb[2], tb[1], tb[1].."^[transformfx"},
+ paramtype = "light",
+ paramtype2 = "facedir",
+ drop = name,
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = def.node_box_bottom
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = def.selection_box_bottom
+ },
+ groups = def.groups,
+
+ after_dig_node = function(pos, oldnode, oldmetadata, digger)
+ pos.y = pos.y+1
+ after_dig_node(pos, name.."_t_1")
+ end,
+
+ on_punch = function(pos, node, puncher)
+ if check_player_priv(pos, puncher) then
+ on_punch(pos, 1, name.."_t_1", name.."_b_2", name.."_t_2", {1,2,3,0})
+ end
+ end,
+
+ mesecons = {effector = {
+ action_on = on_mesecons_signal_open
+ }},
+
+ can_dig = check_player_priv,
+ })
+
+ minetest.register_node(":"..name.."_b_2", {
+ tiles = {tb[2], tb[2], tb[2], tb[2], tb[1].."^[transformfx", tb[1]},
+ paramtype = "light",
+ paramtype2 = "facedir",
+ drop = name,
+ drawtype = "nodebox",
+ node_box = {
+ type = "fixed",
+ fixed = def.node_box_bottom
+ },
+ selection_box = {
+ type = "fixed",
+ fixed = def.selection_box_bottom
+ },
+ groups = def.groups,
+
+ after_dig_node = function(pos, oldnode, oldmetadata, digger)
+ pos.y = pos.y+1
+ after_dig_node(pos, name.."_t_2")
+ end,
+
+ on_punch = function(pos, node, puncher)
+ if check_player_priv(pos, puncher) then
+ on_punch(pos, 1, name.."_t_2", name.."_b_1", name.."_t_1", {3,0,1,2})
+ end
+ end,
+
+ mesecons = {effector = {
+ action_off = on_mesecons_signal_close
+ }},
+
+ can_dig = check_player_priv,
+ })
+end
+
+doors:register_door("doors:door_wood", {
+ description = "Wooden Door",
+ inventory_image = "door_wood.png",
+ groups = {snappy=1,choppy=2,oddly_breakable_by_hand=2,flammable=2,door=1},
+ tiles_bottom = {"door_wood_b.png", "door_brown.png"},
+ tiles_top = {"door_wood_a.png", "door_brown.png"},
+})
+
+doors:register_door("doors:door_steel", {
+ description = "Steel Door",
+ inventory_image = "door_steel.png",
+ groups = {snappy=1,bendy=2,cracky=1,melty=2,level=2,door=1},
+ tiles_bottom = {"door_steel_b.png", "door_grey.png"},
+ tiles_top = {"door_steel_a.png", "door_grey.png"},
+ only_placer_can_open = true,
+})
diff --git a/mesecons_receiver/init.lua b/mesecons_receiver/init.lua
index d830d19..de2b535 100644
--- a/mesecons_receiver/init.lua
+++ b/mesecons_receiver/init.lua
@@ -1,8 +1,8 @@
rcvboxes = {
{ -3/16, -3/16 , -8/16 , 3/16, 3/16, -13/32 }, -- the smaller bump
- { -5/32, -5/32 , -13/32 , 5/32, 5/32, -12/32 }, -- the receiver itself
- { -3/32, -.5-1/32, -.5 , 3/32, 0 , -.5002+3/32 }, -- the vertical wire bit
- { -3/32, -17/32 , -7/16+0.002 , 3/32, -13/32, 16/32+0.001 } -- the horizontal wire
+ { -1/32, -1/32 , -3/2 , 1/32, 1/32, -1/2 }, -- the wire through the block
+ { -2/32, -.5-1/32, -.5 , 2/32, 0 , -.5002+3/32 }, -- the vertical wire bit
+ { -2/32, -17/32 , -7/16+0.002 , 2/32, -14/32, 16/32+0.001 } -- the horizontal wire
}
local receiver_get_rules = function (node)
@@ -31,6 +31,7 @@ minetest.register_node("mesecons_receiver:receiver_on", {
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
+ walkable = false,
selection_box = {
type = "fixed",
fixed = { -3/16, -8/16, -8/16, 3/16, 3/16, 8/16 }
@@ -62,6 +63,7 @@ minetest.register_node("mesecons_receiver:receiver_off", {
paramtype = "light",
paramtype2 = "facedir",
sunlight_propagates = true,
+ walkable = false,
selection_box = {
type = "fixed",
fixed = { -3/16, -8/16, -8/16, 3/16, 3/16, 8/16 }
@@ -113,7 +115,7 @@ function mesecon:receiver_place(rcpt_pos)
minetest.env:dig_node(pos)
if mesecon:is_power_on(rcpt_pos) then
minetest.env:add_node(pos, {name = "mesecons_receiver:receiver_on", param2 = node.param2})
- mesecon:receptor_on(pos, receiver_get_rules(node.param2))
+ mesecon:receptor_on(pos, receiver_get_rules(node))
else
minetest.env:add_node(pos, {name = "mesecons_receiver:receiver_off", param2 = node.param2})
end
diff --git a/mesecons_textures/textures/receiver_bottom_off.png b/mesecons_textures/textures/receiver_bottom_off.png
index 8542e7d..b95903e 100644
--- a/mesecons_textures/textures/receiver_bottom_off.png
+++ b/mesecons_textures/textures/receiver_bottom_off.png
Binary files differ
diff --git a/mesecons_textures/textures/receiver_bottom_on.png b/mesecons_textures/textures/receiver_bottom_on.png
index 98ca72a..d0b7006 100644
--- a/mesecons_textures/textures/receiver_bottom_on.png
+++ b/mesecons_textures/textures/receiver_bottom_on.png
Binary files differ
diff --git a/mesecons_textures/textures/receiver_fb_off.png b/mesecons_textures/textures/receiver_fb_off.png
index 3decca5..aed3008 100644
--- a/mesecons_textures/textures/receiver_fb_off.png
+++ b/mesecons_textures/textures/receiver_fb_off.png
Binary files differ
diff --git a/mesecons_textures/textures/receiver_fb_on.png b/mesecons_textures/textures/receiver_fb_on.png
index 3715efd..0916736 100644
--- a/mesecons_textures/textures/receiver_fb_on.png
+++ b/mesecons_textures/textures/receiver_fb_on.png
Binary files differ
diff --git a/mesecons_textures/textures/receiver_lr_off.png b/mesecons_textures/textures/receiver_lr_off.png
index 50c602c..1fb2b3a 100644
--- a/mesecons_textures/textures/receiver_lr_off.png
+++ b/mesecons_textures/textures/receiver_lr_off.png
Binary files differ
diff --git a/mesecons_textures/textures/receiver_lr_on.png b/mesecons_textures/textures/receiver_lr_on.png
index 1eeda68..087c0b4 100644
--- a/mesecons_textures/textures/receiver_lr_on.png
+++ b/mesecons_textures/textures/receiver_lr_on.png
Binary files differ
diff --git a/mesecons_textures/textures/receiver_top_off.png b/mesecons_textures/textures/receiver_top_off.png
index 35bed5c..ae50106 100644
--- a/mesecons_textures/textures/receiver_top_off.png
+++ b/mesecons_textures/textures/receiver_top_off.png
Binary files differ
diff --git a/mesecons_textures/textures/receiver_top_on.png b/mesecons_textures/textures/receiver_top_on.png
index 158dda2..5b48cac 100644
--- a/mesecons_textures/textures/receiver_top_on.png
+++ b/mesecons_textures/textures/receiver_top_on.png
Binary files differ
diff --git a/mesecons_walllever/init.lua b/mesecons_walllever/init.lua
index da427be..6fc0770 100644
--- a/mesecons_walllever/init.lua
+++ b/mesecons_walllever/init.lua
@@ -1,22 +1,6 @@
-- WALL LEVER
-local walllever_get_rules = function(node)
- local rules = {
- {x = 1, y = 0, z = 0},
- {x = 1, y = 1, z = 0},
- {x = 1, y =-1, z = 0},
- {x = 1, y =-1, z = 1},
- {x = 1, y =-1, z =-1},
- {x = 2, y = 0, z = 0}}
- if node.param2 == 2 then
- rules=mesecon:rotate_rules_left(rules)
- elseif node.param2 == 3 then
- rules=mesecon:rotate_rules_right(mesecon:rotate_rules_right(rules))
- elseif node.param2 == 0 then
- rules=mesecon:rotate_rules_right(rules)
- end
- return rules
-end
-
+-- Basically a switch that can be attached to a wall
+-- Powers the block 2 nodes behind (using a receiver)
minetest.register_node("mesecons_walllever:wall_lever_off", {
drawtype = "nodebox",
tiles = {
@@ -49,10 +33,10 @@ minetest.register_node("mesecons_walllever:wall_lever_off", {
description="Lever",
on_punch = function (pos, node)
mesecon:swap_node(pos, "mesecons_walllever:wall_lever_on")
- mesecon:receptor_on(pos, walllever_get_rules(node))
+ mesecon:receptor_on(pos, mesecon.rules.buttonlike_get(node))
end,
- mesecon = {receptor = {
- rules = walllever_get_rules,
+ mesecons = {receptor = {
+ rules = mesecon.rules.buttonlike_get,
state = mesecon.state.off
}}
})
@@ -84,15 +68,15 @@ minetest.register_node("mesecons_walllever:wall_lever_on", {
{ -2/16, -1/16, 3/16, 2/16, 1/16, 4/16 }, -- the lever "hinge"
{ -1/16, 0, 4/16, 1/16, 8/16, 6/16 }} -- the lever itself.
},
- groups = {dig_immediate=2,not_in_creative_inventory=1, mesecon = 3, mesecon_needs_receiver = 1},
+ groups = {dig_immediate = 2, not_in_creative_inventory = 1, mesecon_needs_receiver = 1},
drop = '"mesecons_walllever:wall_lever_off" 1',
description="Lever",
on_punch = function (pos, node)
mesecon:swap_node(pos, "mesecons_walllever:wall_lever_off")
- mesecon:receptor_off(pos, walllever_get_rules(node))
+ mesecon:receptor_off(pos, mesecon.rules.buttonlike_get(node))
end,
- mesecon = {receptor = {
- rules = walllever_get_rules,
+ mesecons = {receptor = {
+ rules = mesecon.rules.buttonlike_get,
state = mesecon.state.on
}}
})