-- NUR DURCH 4 TEILBARE ZAHLEN > 20 VERWENDEN!!! local leds = { 40, 36, 32, 28, 24, 20, 16, 12, 8, 4 } for i = 1, #leds do if leds[i] % 4 ~= 0 then error("[ledtree] led count per layer must be divisible by 4. Error location: 'leds' table, item "..i..": "..leds[i]) end end local height_increment = 3 local function breite(n) return n / 4 end local function is_led(center, breite, pos) if math.abs(center.x - pos.x) >= (breite - 1) / 2 and math.abs(center.z - pos.z) >= (breite - 1) / 2 then return false end if math.abs(center.x - pos.x) == (breite - 1) / 2 then return math.abs(center.z - pos.z) % 2 == 0 end if math.abs(center.z - pos.z) == (breite - 1) / 2 then return math.abs(center.x - pos.x) % 2 == 0 end end local function place_layer(center, breite) breite = breite * 2 + 1 local needles = {} local leds = {} local max_offset = (breite - 1) / 2 for y = math.ceil(-height_increment / 2), math.floor(height_increment / 2) do for x = -max_offset, max_offset do for z = -max_offset, max_offset do local pos = vector.new({x = center.x + x, y = center.y + y, z = center.z + z}) table.insert(needles, pos) if y == 0 and is_led(center, breite, pos) then table.insert(leds, pos) end end end end core.bulk_set_node(needles, {name = "ledtree:pine_needles"}) return leds end local function place_leds(led_index, leds) for i = 1, #leds do core.set_node(leds[i], {name = "ledtree:led"..led_index.."_red"}) led_index = led_index + 1 end return led_index end local function place_tree(pos) local led_index = 300 - 220 for index = 1, #leds do local l = leds[index] local layer_center = vector.new(pos.x, pos.y + index * height_increment - height_increment / 2, pos.z) local leds = place_layer(layer_center, breite(l)) led_index = place_leds(led_index, leds) end end core.register_node("ledtree:ledtree", { description = "Place LED tree", on_construct = function(pos) place_tree(pos) end, }) core.register_node("ledtree:pine_needles", { description = "Pine Needles", paramtype = "light", tiles = {"pine_needles.png"}, })