mod-simple_models/samples.lua

303 lines
7.1 KiB
Lua

local smodel = simple_models
-- cubes
core.register_node("simple_models:node_tall", {
description = "Tall Node",
drawtype = "mesh",
mesh = smodel.cube.mesh,
tiles = {"simple_models_sample_cube_1x2x1_map.png"},
collision_box = {
type = "fixed",
fixed = smodel.cube.box,
},
selection_box = {
type = "fixed",
fixed = smodel.cube.box,
},
paramtype2 = "colorfacedir",
palette = "simple_models_sample_palette.png",
groups = {oddly_breakable_by_hand=1},
})
-- panels
core.register_node("simple_models:panel", {
description = "Front Panel",
drawtype = "mesh",
tiles = {"simple_models_sample_panel_1x2x1_map.png"},
mesh = smodel.panel.mesh,
collision_box = {
type = "fixed",
fixed = smodel.panel.box,
},
selection_box = {
type = "fixed",
fixed = smodel.panel.box,
},
paramtype2 = "colorfacedir",
palette = "simple_models_sample_palette.png",
groups = {oddly_breakable_by_hand=1},
on_rightclick = function(pos, node, clicker, stack, pointed_thing)
core.swap_node(pos, {
name = "simple_models:panel_mid",
param1 = node.param1,
param2 = node.param2,
})
if core.global_exists("sounds") and sounds.woosh then
sounds.woosh()
end
return stack
end,
})
core.register_node("simple_models:panel_mid", {
description = "Mid Panel",
drawtype = "mesh",
tiles = {"simple_models_sample_panel_1x2x1_map.png"},
mesh = smodel.panel_mid.mesh,
collision_box = {
type = "fixed",
fixed = smodel.panel_mid.box,
},
selection_box = {
type = "fixed",
fixed = smodel.panel_mid.box,
},
paramtype2 = "colorfacedir",
palette = "simple_models_sample_palette.png",
groups = {oddly_breakable_by_hand=1},
on_rightclick = function(pos, node, clicker, stack, pointed_thing)
core.swap_node(pos, {
name = "simple_models:panel_rear",
param1 = node.param1,
param2 = node.param2,
})
if core.global_exists("sounds") and sounds.woosh then
sounds.woosh()
end
return stack
end,
})
core.register_node("simple_models:panel_rear", {
description = "Rear Panel",
drawtype = "mesh",
tiles = {"simple_models_sample_panel_1x2x1_map.png"},
mesh = smodel.panel_rear.mesh,
collision_box = {
type = "fixed",
fixed = smodel.panel_rear.box,
},
selection_box = {
type = "fixed",
fixed = smodel.panel_rear.box,
},
paramtype2 = "colorfacedir",
palette = "simple_models_sample_palette.png",
groups = {oddly_breakable_by_hand=1},
on_rightclick = function(pos, node, clicker, stack, pointed_thing)
core.swap_node(pos, {
name="simple_models:panel",
param1 = node.param1,
param2 = node.param2,
})
if core.global_exists("sounds") and sounds.woosh then
sounds.woosh()
end
return stack
end,
})
-- doors
local door_def = {
base = {
drawtype = "mesh",
tiles = {"simple_models_sample_panel_1x2x1_map.png"},
mesh = smodel.panel.mesh,
collision_box = {
type = "fixed",
fixed = smodel.panel.box,
},
selection_box = {
type = "fixed",
fixed = smodel.panel.box,
},
paramtype2 = "colorfacedir",
palette = "simple_models_sample_palette.png",
groups = {oddly_breakable_by_hand=1},
},
["in"] = {
desc = "inward",
func = {
closed = smodel.door_inward_open,
open = smodel.door_inward_close,
},
},
["out"] = {
desc = "outward",
func = {
closed = smodel.door_outward_open,
open = smodel.door_outward_close,
},
},
}
door_def.base_alt = table.copy(door_def.base)
door_def.base_alt.mesh = smodel.panel_rear.mesh
door_def.base_alt.collision_box.fixed = smodel.panel_rear.box
door_def.base_alt.selection_box.fixed = smodel.panel_rear.box
for _, dir in ipairs({"l", "r"}) do
for _, swing in ipairs({"in", "out"}) do
for _, state in ipairs({"closed", "open"}) do
local door_base
if swing == "in" and state == "open" then
door_base = table.copy(door_def.base_alt)
else
door_base = table.copy(door_def.base)
end
local door_aux = door_def[swing]
local door_name = "simple_models:door_" .. dir .. "_" .. swing .. "_" .. state
local invert = dir == "r"
door_base.description = "Door "
if dir == "l" then
door_base.description = door_base.description .. "L"
else
door_base.description = door_base.description .. "R"
end
door_base.description = door_base.description .. " (" .. door_aux.desc .. " opening)"
if state == "closed" then
door_base.on_rightclick = function(pos, node, clicker, stack, pointed_thing)
door_aux.func[state](smodel, pos,
"simple_models:door_" .. dir .. "_" .. swing .. "_open", invert)
if core.global_exists("sounds") and sounds.door_open then
sounds.door_open()
end
return stack
end
door_base.after_place_node = function(pos, placer, stack, pointed_thing)
local node = core.get_node(pos)
node.param2 = node.param2 + (3 * 32)
core.swap_node(pos, {name=node.name, param1=node.param1, param2=node.param2})
end
else
door_base.drop = "simple_models:door_" .. dir .. "_" .. swing .. "_closed"
door_base.groups.not_in_creative_inventory = 1
door_base.on_rightclick = function(pos, node, clicker, stack, pointed_thing)
door_aux.func[state](smodel, pos, door_base.drop, invert)
if core.global_exists("sounds") and sounds.door_close then
sounds.door_close()
end
return stack
end
door_base.after_place_node = function(pos, placer, stack, pointed_thing)
local node = core.get_node(pos)
core.swap_node(pos, {
name = door_base.drop,
param1 = node.param1,
param2 = node.param2,
})
end
end
core.register_node(door_name, door_base)
end
end
end
-- stairs
core.register_node("simple_models:stair_2s", {
description = "Stair (2-step)",
drawtype = "mesh",
tiles = {"simple_models_sample_stair_2s_1x1x1_map.png"},
mesh = smodel.stair_2s.mesh,
collision_box = {
type = "fixed",
fixed = smodel.stair_2s.box,
},
selection_box = {
type = "fixed",
fixed = smodel.stair_2s.box,
},
paramtype2 = "facedir",
groups = {oddly_breakable_by_hand=1, stair=1},
})
core.register_node("simple_models:stair_4s", {
description = "Stair (4-step)",
drawtype = "mesh",
tiles = {"simple_models_sample_stair_4s_1x1x1_map.png"},
mesh = smodel.stair_4s.mesh,
collision_box = {
type = "fixed",
fixed = smodel.stair_4s.box,
},
selection_box = {
type = "fixed",
fixed = smodel.stair_4s.box,
},
paramtype2 = "facedir",
groups = {oddly_breakable_by_hand=1, stair=1},
})
-- slopes
core.register_node("simple_models:slope", {
description = "Slope",
drawtype = "mesh",
tiles = {"simple_models_sample_slope_1x1x1_map.png"},
mesh = smodel.slope.mesh,
collision_box = {
type = "fixed",
fixed = smodel.slope.box,
},
selection_box = {
type = "fixed",
fixed = smodel.slope.box,
},
paramtype2 = "facedir",
groups = {oddly_breakable_by_hand=1, slope=1},
})
core.register_node("simple_models:slope_long", {
description = "Long Slope",
drawtype = "mesh",
tiles = {"simple_models_sample_slope_1x1x2_map.png"},
mesh = smodel.slope_long.mesh,
collision_box = {
type = "fixed",
fixed = smodel.slope_long.box,
},
selection_box = {
type = "fixed",
fixed = smodel.slope_long.box,
},
paramtype2 = "facedir",
groups = {oddly_breakable_by_hand=1, slope=1},
})