152 lines
4.3 KiB
Lua
152 lines
4.3 KiB
Lua
local CONCRETE_COLORS = {
|
|
'#FFF',--white
|
|
'#AAA',--grey
|
|
'#666',--dark grey
|
|
'#333',--black
|
|
'#722ed4',--violet
|
|
'#2e56d4',--blue
|
|
'#5484ac',--cyan
|
|
'#135918',--dark green
|
|
'#3ad42e',--green
|
|
'#d4c12e',--yellow
|
|
'#592e13',--brown
|
|
'#d4652e',--orange
|
|
'#d42e2e',--red
|
|
'#d80481',--magenta
|
|
'#ff7272',--pink
|
|
}
|
|
local mix_base = terumet.id('block_conmix')
|
|
local block_base = terumet.id('block_con')
|
|
|
|
local FMT = string.format
|
|
|
|
local function mix_id(dye_index)
|
|
return FMT("%s_%s", mix_base, dye.dyes[dye_index][1])
|
|
end
|
|
function terumet.concrete_block_id(dye_index)
|
|
return FMT("%s_%s", block_base, dye.dyes[dye_index][1])
|
|
end
|
|
|
|
local NAMEFORMATS = {
|
|
mix="%s Concrete Mix",
|
|
block="%s Concrete Block",
|
|
door="%s Concrete Door",
|
|
wall="%s Concrete Wall",
|
|
stair="%s Concrete Stair",
|
|
slab="%s Concrete Slab"
|
|
}
|
|
|
|
local function make_name(name, dye_index)
|
|
return FMT(NAMEFORMATS[name], dye.dyes[dye_index][2])
|
|
end
|
|
|
|
local function texture(base, dye_index)
|
|
return FMT("%s^[multiply:%s", base, CONCRETE_COLORS[dye_index])
|
|
end
|
|
local function mix_texture(dye_index)
|
|
return texture(terumet.tex('block_conmix'), dye_index)
|
|
end
|
|
local function block_texture(dye_index)
|
|
return texture(terumet.tex('block_con'), dye_index)
|
|
end
|
|
local function door_texture(dye_index)
|
|
return texture(terumet.tex('door_con'), dye_index)
|
|
end
|
|
local function door_item_texture(dye_index)
|
|
return texture(terumet.tex('dinv_con'), dye_index)
|
|
end
|
|
|
|
local HARDEN_LIST = {}
|
|
local MIXES_LIST = {}
|
|
|
|
for index,dye_info in ipairs(dye.dyes) do
|
|
local con_id = 'con_'..dye_info[1]
|
|
|
|
minetest.register_node(mix_id(index), {
|
|
description = make_name('mix', index),
|
|
tiles = {mix_texture(index)},
|
|
is_ground_content = false,
|
|
groups = {crumbly=2},
|
|
--sounds = default.node_sound_sand_defaults(),
|
|
})
|
|
|
|
local block_id = terumet.concrete_block_id(index)
|
|
|
|
minetest.register_node(block_id, {
|
|
description = make_name('block', index),
|
|
tiles = {block_texture(index)},
|
|
is_ground_content = false,
|
|
groups = {cracky = 2, level = 1},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
})
|
|
|
|
if index ~= 1 then
|
|
local dye_id = "group:dye,color_"..dye_info[1]
|
|
local basic_powder = mix_id(1)
|
|
minetest.register_craft{
|
|
output = mix_id(index)..' 8',
|
|
recipe = terumet.recipe_box(basic_powder, dye_id)
|
|
}
|
|
|
|
minetest.register_craft{
|
|
output = mix_id(index)..' 8',
|
|
recipe = terumet.recipe_box(basic_powder, 'dye:'..dye_info[1])
|
|
}
|
|
end
|
|
|
|
HARDEN_LIST[mix_id(index)] = block_id
|
|
table.insert(MIXES_LIST, mix_id(index))
|
|
|
|
|
|
walls.register(terumet.id('wall_'..con_id), make_name('wall', index), block_texture(index), block_id, default.node_sound_stone_defaults())
|
|
|
|
doors.register(terumet.id('door_'..con_id), {
|
|
tiles = {{name = door_texture(index), backface_culling = true}},
|
|
description = make_name('door', index),
|
|
inventory_image = door_item_texture(index),
|
|
protected = true,
|
|
groups = {cracky = 2, level = 1},
|
|
sounds = default.node_sound_stone_defaults(),
|
|
sound_open = 'doors_steel_door_open',
|
|
sound_close = 'doors_steel_door_close',
|
|
recipe = {
|
|
{block_id},
|
|
{'doors:door_steel'},
|
|
{block_id},
|
|
}
|
|
})
|
|
|
|
stairs.register_stair_and_slab(con_id, block_id,
|
|
{cracky = 2, level = 1},
|
|
{block_texture(index)},
|
|
make_name('stair',index), make_name('slab', index),
|
|
default.node_sound_stone_defaults(),
|
|
false
|
|
)
|
|
end
|
|
|
|
minetest.register_abm{
|
|
label = 'Concrete mix hardening',
|
|
nodenames = MIXES_LIST,
|
|
neighbors = {'default:water_source', 'default:water_flowing'},
|
|
interval = 3.0, -- Run every 3 seconds
|
|
chance = 1, -- always
|
|
action = function(pos, node, active_object_count, active_object_count_wider)
|
|
local harden_id = HARDEN_LIST[node.name]
|
|
if harden_id then
|
|
minetest.set_node(pos, {name = harden_id})
|
|
end
|
|
end
|
|
}
|
|
|
|
local gravel_id = 'default:gravel'
|
|
local any_sand = 'group:sand'
|
|
|
|
minetest.register_craft{
|
|
output = mix_id(1)..' 8',
|
|
recipe = {
|
|
{any_sand, gravel_id, any_sand},
|
|
{gravel_id, '', gravel_id},
|
|
{any_sand, gravel_id, any_sand}
|
|
}
|
|
} |