Skip to content
Snippets Groups Projects
Commit b10a7b14 authored by Dirk Sohler's avatar Dirk Sohler
Browse files

let there be light

parents
No related branches found
No related tags found
No related merge requests found
WIP
default
mesecons
wool
WIP
This diff is collapsed.
name = streetlights
WIP
default
mesecons
WIP
-- Transitional global table
_streetlights_api = {}
-- Functionality
local items = minetest.get_modpath('streetlights_api')..DIR_DELIM..'items'
dofile(items..DIR_DELIM..'receiver.lua')
dofile(items..DIR_DELIM..'register_pole.lua')
-- Make API
streetlights_api = {
register_pole = _streetlights_api.register_pole
}
_streetlights_api = nil
-- Base Tiles
local frame = '(default_mese_block.png^streetlights_api_receiver_frame.png)'
local frame_alpha = '('..frame..'^[makealpha:0,0,0)'
local tiles_off = {
'(default_stone.png^('..frame_alpha..'^[opacity:96))', -- top
'(default_stone.png^('..frame_alpha..'^[opacity:96))', -- bottom
'(default_stone.png^('..frame_alpha..'^[opacity:96))', -- right
'(default_stone.png^('..frame_alpha..'^[opacity:96))', -- left
'(default_stone.png^('..frame_alpha..'^[opacity:96))', -- back
'(default_stone.png^('..frame_alpha..'^[opacity:96))'-- front
}
local tiles_on = {
'(default_stone.png^'..frame_alpha..')', -- top
'(default_stone.png^'..frame_alpha..')', -- bottom
'(default_stone.png^'..frame_alpha..')', -- right
'(default_stone.png^'..frame_alpha..')', -- left
'(default_stone.png^'..frame_alpha..')', -- back
'(default_stone.png^'..frame_alpha..')' -- front
}
-- Connector overlay on top tile
local connector = '(default_mese_block.png^streetlights_api_connector_mask.png)'
local connector_alpha = '('..connector..'^[makealpha:0,0,0)'
tiles_off[1] = tiles_off[1]..'^('..connector_alpha..'^[opacity:96)'
tiles_on[1] = tiles_on[1]..'^'..connector_alpha
-- Register receiver in OFF state
minetest.register_node('streetlights_api:receiver_off', {
description = 'Mesecon Signal Receiver (Off)',
tiles = tiles_off,
is_ground_content = false,
sounds = minetest.registered_nodes['default:stone'].sounds,
groups = {
oddly_breakable_by_hand = 1,
},
on_construct = function (pos)
local meta = minetest.get_meta(pos)
meta:set_string('infotext', 'Receiver: No Signal')
end,
})
-- Register receiver in ON state
minetest.register_node('streetlights_api:receiver_on', {
description = 'Mesecon Signal Receiver (On)',
tiles = tiles_on,
is_ground_content = false,
sounds = minetest.registered_nodes['default:stone'].sounds,
groups = {
oddly_breakable_by_hand = 1,
--not_in_creative_inventory = 1
},
})
-- Register receiver (OFF) crafting recipe
minetest.register_craft({
output = 'streetlights_api:receiver_off 7',
recipe = {
{ 'default:stone', 'default:stone', 'default:stone' },
{ 'default:stone', 'default:steel_ingot', 'default:stone' },
{ 'default:stone', 'mesecons:wire_00000000_off', 'default:stone' }
}
})
_streetlights_api.register_pole = function (base, hidden)
-- Bail out early when base does not exist
if minetest.registered_nodes[base] == nil then
minetest.log('error', 'Can’t register pole: non-existent '..base)
return
end
if hidden ~= nil and minetest.registered_nodes[hidden] == nil then
minetest.log('error', 'Can’t register pole: non-existent '..hidden)
return
end
-- Generate ID and load base definitiona
local current_modname = minetest.get_current_modname()
local node_id = current_modname..':pole_'..base:gsub(':', '_')
local basedef = minetest.registered_nodes[base]
local node_name = 'Lamp Pole ('..basedef.description..')'
-- Define parameters depending on hidden or not
local _paramtype = ''
local _drawtype = ''
local _node_box = {}
local _tiles = {}
local _sounds = {}
if hidden then
local hidden_in = minetest.registered_nodes[hidden]
local name = hidden_in.description
node_id = node_id..'_hidden_in_'..hidden:gsub(':', '_')
node_name = 'Hidden Lamp Pole ('..basedef.description..' in '..name..')'
_paramtype = nil
_drawtype = nil
_node_box = nil
_tiles = hidden_in.tiles
_sounds = hidden_in.sounds
_type = 'Hidden Pole'
else
_paramtype = 'light'
_drawtype = 'nodebox'
_node_box = {
type = 'fixed',
fixed = { -0.125, -0.5, -0.125, 0.125, 0.5, 0.125 }
}
_tiles = basedef.tiles
_sounds = basedef.sounds
_type = 'Pole'
end
-- Define top and bottom textures if hidden
if hidden then
local mask = 'streetlights_api_connector_mask.png'
local base1 = basedef.tiles[1]
local base2 = basedef.tiles[2] and basedef.tiles[2] or basedef.tiles[1]
_tiles[2] = _tiles[2] and _tiles[2] or _tiles[1]
_tiles[3] = _tiles[3] and _tiles[3] or _tiles[1]
_tiles[1] = _tiles[1]..'^(('..base1..'^'..mask..')^[makealpha:0,0,0)'
_tiles[2] = _tiles[2]..'^(('..base2..'^'..mask..')^[makealpha:0,0,0)'
end
-- Register the pole in OFF state
minetest.register_node(node_id..'_off', {
description = node_name..' (Off)',
is_ground_content = false,
tiles = _tiles,
sounds = _sounds,
paramtype = _paramtype,
drawtype = _drawtype,
node_box = _node_box,
groups = {
oddly_breakable_by_hand = 1,
},
on_construct = function (pos)
local meta = minetest.get_meta(pos)
meta:set_string('infotext', _type..': No Signal')
end,
})
-- Register the pole in ON state
minetest.register_node(node_id..'_on', {
description = node_name..' (On)',
is_ground_content = false,
tiles = _tiles,
sounds = _sounds,
paramtype = _paramtype,
drawtype = _drawtype,
node_box = _node_box,
groups = {
oddly_breakable_by_hand = 1,
not_in_creative_inventory = 1
}
})
-- Register craft
minetest.register_craft({
output = node_id..'_off 3',
recipe = {
{ base, '', '' },
{ base, 'mesecons:wire_00000000_off', '' },
{ base, '', '' }
}
})
end
This diff is collapsed.
name = streetlights_api
streetlights_api/textures/streetlights_api_connector_mask.png

185 B

streetlights_api/textures/streetlights_api_receiver_frame.png

186 B

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment