Can open/close fence gate by function call
This commit is contained in:
parent
8fb4d67bce
commit
d4fd1af87c
@ -1,4 +1,4 @@
|
||||
-- Functions/ABMs
|
||||
## Functions
|
||||
|
||||
### `default.is_sapling_growing(pos)`
|
||||
|
||||
@ -12,12 +12,14 @@ Returns true on success or false if it was not a sapling.
|
||||
### `default.grow_sapling(pos)`
|
||||
If there's a sapling node at `pos`, will grow it into
|
||||
a tree instantly, if it has enough space.
|
||||
Returns true on successs.
|
||||
Returns true on success.
|
||||
|
||||
### `default.is_dry_biome(biomename)`
|
||||
Returns true if the given biome is considered to be
|
||||
a 'dry' biome (e.g. for dry grass). Custom or unknown
|
||||
biomes are never dry.
|
||||
### `default.toggle_fence_gate(pos)`
|
||||
If there's a fence gate node at `pos`,
|
||||
it will be opened when it's closed, or
|
||||
it will be closed when it's opened.
|
||||
|
||||
Returns true on success.
|
||||
|
||||
## Functions for builtin biomes
|
||||
|
||||
@ -51,3 +53,10 @@ Returns metadata for a builtin biome. Returns a table with these fields:
|
||||
Note: `dirt_blob`, `sand_blob` and `gravel_blob` are used to create ores after all builtin
|
||||
biomes were created. These fields are useless for biomes from
|
||||
external mods.
|
||||
|
||||
### `default.is_dry_biome(biomename)`
|
||||
Returns true if the given biome is considered to be
|
||||
a 'dry' biome (e.g. for dry grass). Custom or unknown
|
||||
biomes are never dry.
|
||||
|
||||
|
||||
|
@ -74,46 +74,67 @@ local function register_fence(name, def)
|
||||
minetest.register_node(name_painted, def_painted)
|
||||
end
|
||||
|
||||
local function toggle_fence_gate_raw(pos, node)
|
||||
local def = minetest.registered_nodes[node.name]
|
||||
if not def then
|
||||
return false
|
||||
end
|
||||
|
||||
local is_open = minetest.get_item_group(node.name, "fence_gate") == 2
|
||||
local is_painted = minetest.get_item_group(node.name, "paintable") == 1
|
||||
local base_name = node.name
|
||||
if is_painted then
|
||||
-- Remove "_painted" suffix
|
||||
base_name = string.sub(base_name, 1, -9)
|
||||
end
|
||||
if is_open then
|
||||
-- Remove "_open" suffix
|
||||
base_name = string.sub(base_name, 1, -6)
|
||||
else
|
||||
-- Remove "_closed" suffix
|
||||
base_name = string.sub(base_name, 1, -8)
|
||||
end
|
||||
|
||||
local new_id
|
||||
if is_open then
|
||||
minetest.sound_play(def._sound_close, {gain = def._sound_gain_close, max_hear_distance = 10, pos = pos}, true)
|
||||
if is_painted then
|
||||
new_id = base_name .. "_closed_painted"
|
||||
else
|
||||
new_id = base_name .. "_closed"
|
||||
end
|
||||
minetest.set_node(pos, {name=new_id, param1=node.param1, param2=node.param2})
|
||||
return true
|
||||
else
|
||||
minetest.sound_play(def._sound_open, {gain = def._sound_gain_open, max_hear_distance = 10, pos = pos}, true)
|
||||
if is_painted then
|
||||
new_id = base_name .. "_open_painted"
|
||||
else
|
||||
new_id = base_name .. "_open"
|
||||
end
|
||||
minetest.set_node(pos, {name=new_id, param1=node.param1, param2=node.param2})
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
function default.toggle_fence_gate(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
return toggle_fence_gate_raw(pos)
|
||||
end
|
||||
|
||||
local function register_fence_gate(name, def)
|
||||
local gate_id_closed = name .. "_closed"
|
||||
local gate_id_open = name .. "_open"
|
||||
local gate_id_closed_painted = name .. "_closed_painted"
|
||||
local gate_id_open_painted = name .. "_open_painted"
|
||||
|
||||
local sound_open = def.sound_open or "rp_default_fence_gate_wood_open"
|
||||
local sound_close = def.sound_close or "rp_default_fence_gate_wood_close"
|
||||
local sound_gain_open = def.sound_gain_open or 0.3
|
||||
local sound_gain_close = def.sound_gain_close or 0.3
|
||||
def._sound_open = def._sound_open or "rp_default_fence_gate_wood_open"
|
||||
def._sound_close = def._sound_close or "rp_default_fence_gate_wood_close"
|
||||
def._sound_gain_open = def._sound_gain_open or 0.3
|
||||
def._sound_gain_close = def._sound_gain_close or 0.3
|
||||
local description_painted = def.description_painted
|
||||
def.sound_open = nil
|
||||
def.sound_close = nil
|
||||
def.sound_sound_gain_open = nil
|
||||
def.sound_sound_gain_close = nil
|
||||
def.description_painted = nil
|
||||
|
||||
local function toggle_gate(pos, node)
|
||||
local is_open = minetest.get_item_group(node.name, "fence_gate") == 2
|
||||
local is_painted = minetest.get_item_group(node.name, "paintable") == 1
|
||||
local new_id
|
||||
if is_open then
|
||||
minetest.sound_play(sound_close, {gain = sound_gain_close, max_hear_distance = 10, pos = pos}, true)
|
||||
if is_painted then
|
||||
new_id = gate_id_closed_painted
|
||||
else
|
||||
new_id = gate_id_closed
|
||||
end
|
||||
minetest.set_node(pos, {name=new_id, param1=node.param1, param2=node.param2})
|
||||
else
|
||||
minetest.sound_play(sound_open, {gain = sound_gain_open, max_hear_distance = 10, pos = pos}, true)
|
||||
if is_painted then
|
||||
new_id = gate_id_open_painted
|
||||
else
|
||||
new_id = gate_id_open
|
||||
end
|
||||
minetest.set_node(pos, {name=new_id, param1=node.param1, param2=node.param2})
|
||||
end
|
||||
end
|
||||
|
||||
local def_open = table.copy(def)
|
||||
local default_fields_open = {
|
||||
walkable = false,
|
||||
@ -151,7 +172,7 @@ local function register_fence_gate(name, def)
|
||||
groups = {},
|
||||
drop = gate_id_closed,
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
toggle_gate(pos, node)
|
||||
toggle_fence_gate_raw(pos, node)
|
||||
end,
|
||||
}
|
||||
for k, v in pairs(default_fields_open) do
|
||||
|
Loading…
x
Reference in New Issue
Block a user