add a "modern"-style light

morelights_modern wall lamp on streets thin post

plus some rotation helper options to make it work
(should be generic enough to work for other designs as well)
master
Vanessa Dannenberg 2021-06-27 22:32:50 -04:00
parent fac56f263c
commit 64d992eec1
4 changed files with 58 additions and 9 deletions

View File

@ -5,6 +5,12 @@ local fdir_to_right = {
{ 0, 1 } { 0, 1 }
} }
local fdir_to_back = {
{ 0, -1 },
{ -1, 0 },
{ 0, 1 },
{ 1, 0 }
}
--digilines compatibility --digilines compatibility
local rules_alldir = { local rules_alldir = {
@ -36,19 +42,23 @@ function streetlights.check_and_place(itemstack, placer, pointed_thing, def)
local pole = def.pole local pole = def.pole
local base = def.base or def.pole local base = def.base or def.pole
local light = def.light local light = def.light
local param2 = def.param2
local height = def.height or 5 local height = def.height or 5
local needs_digiline_wire = def.needs_digiline_wire local needs_digiline_wire = def.needs_digiline_wire
local distributor_node = def.distributor_node local distributor_node = def.distributor_node
local poletop = (def.topnodes and (type(def.topnodes) == "table") and def.topnodes.poletop) or pole local poletop = (def.topnodes and (type(def.topnodes) == "table") and def.topnodes.poletop) or pole
local overhang = (def.topnodes and (type(def.topnodes) == "table") and def.topnodes.overhang) or pole local overhang = (def.topnodes and (type(def.topnodes) == "table") and def.topnodes.overhang) or pole
local copy_pole_fdir = def.copy_pole_fdir
local light_fdir = def.light_fdir
local controls = placer:get_player_control() local controls = placer:get_player_control()
if not placer then return end if not placer then return end
local playername = placer:get_player_name() local playername = placer:get_player_name()
local player_name = placer:get_player_name() local player_name = placer:get_player_name()
local fdir = minetest.dir_to_facedir(placer:get_look_dir())
local placer_pos = placer:get_pos() -- this bit borrowed from builtin/game/item.lua
local target_dir = vector.subtract(pointed_thing.above, placer_pos)
local fdir = minetest.dir_to_facedir(target_dir)
local pos1 = minetest.get_pointed_thing_position(pointed_thing) local pos1 = minetest.get_pointed_thing_position(pointed_thing)
local node1 = minetest.get_node(pos1) local node1 = minetest.get_node(pos1)
@ -155,22 +165,36 @@ function streetlights.check_and_place(itemstack, placer, pointed_thing, def)
overhang = overhang.."_digilines" overhang = overhang.."_digilines"
end end
local target_fdir
if copy_pole_fdir == true then
if def.node_rotation then
target_fdir = minetest.dir_to_facedir(vector.rotate(target_dir, {x=0, y=def.node_rotation, z=0}))
else
target_fdir = fdir
end
if def.light_fdir == "auto" then -- the light should use the same fdir as the pole
light_fdir = target_fdir
end
end
local pos2b = {x=pos1.x, y = pos1.y+1, z=pos1.z} local pos2b = {x=pos1.x, y = pos1.y+1, z=pos1.z}
minetest.set_node(pos2b, {name = base }) minetest.set_node(pos2b, {name = base, param2 = target_fdir })
for i = 2, height-1 do for i = 2, height-1 do
pos2 = {x=pos1.x, y = pos1.y+i, z=pos1.z} pos2 = {x=pos1.x, y = pos1.y+i, z=pos1.z}
minetest.set_node(pos2, {name = pole2 }) minetest.set_node(pos2, {name = pole2, param2 = target_fdir })
end end
local pos2t = {x=pos1.x, y = pos1.y+height, z=pos1.z} local pos2t = {x=pos1.x, y = pos1.y+height, z=pos1.z}
minetest.set_node(pos2t, {name = poletop }) minetest.set_node(pos2t, {name = poletop, param2 = target_fdir })
if def.topnodes ~= false then if def.topnodes ~= false then
minetest.set_node(pos3, { name = overhang }) minetest.set_node(pos3, { name = overhang })
minetest.set_node(pos4, { name = light, param2 = param2 }) minetest.set_node(pos4, { name = light, param2 = light_fdir })
else else
minetest.set_node(pos3, { name = light, param2 = param2 }) minetest.set_node(pos3, { name = light, param2 = light_fdir })
end end
if needs_digiline_wire and ilights.player_channels[playername] then if needs_digiline_wire and ilights.player_channels[playername] then

View File

@ -11,6 +11,11 @@ streetlights.vert_digiline = "digistuff:vertical_bottom"
dofile(modpath.."/functions.lua") dofile(modpath.."/functions.lua")
dofile(modpath.."/simple.lua") dofile(modpath.."/simple.lua")
if minetest.get_modpath("homedecor_lighting") and minetest.get_modpath("streetspoles") then if minetest.get_modpath("streetspoles") then
dofile(modpath.."/minedot.lua") if minetest.get_modpath("homedecor_lighting") then
dofile(modpath.."/minedot.lua")
end
if minetest.get_modpath("morelights_modern") then
dofile(modpath.."/modern.lua")
end
end end

20
modern.lua Normal file
View File

@ -0,0 +1,20 @@
-- streets:pole_* with morelights_modern:walllamp
minetest.register_tool("simple_streetlights:spawner_modern_walllamp", {
description = "Streetlight spawner (streets thin pole with modern wall lamp)",
inventory_image = "simple_streetlights_inv_pole_modern_walllamp.png",
use_texture_alpha = true,
tool_capabilities = { full_punch_interval=0.1 },
on_place = function(itemstack, placer, pointed_thing)
streetlights.check_and_place(itemstack, placer, pointed_thing, {
base = "streets:pole_bottom",
pole = "streets:pole_top",
light = "morelights_modern:walllamp",
topnodes = false,
height = 4,
copy_pole_fdir = true,
node_rotation = math.pi/2, -- 90° CCW
light_fdir = "auto",
})
end
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB