Add new signal lamp with color commands

This commit is contained in:
Joachim Stolberg 2022-09-10 16:04:45 +02:00
parent 4702f46b07
commit 4f0cacb224
11 changed files with 216 additions and 122 deletions

View File

@ -1126,7 +1126,7 @@ techage.manual_DE.aText = {
"\n"..
"\n",
"Die Signallampe kann mit 'on'/'off' Kommando ein- bzw. ausgeschaltet werden. Diese Lampe braucht keinen Strom und\n"..
"kann mit der Spritzpistole aus der Mod \"Unified Dyes\" farbig gemacht werden.\n"..
"kann mit der Spritzpistole aus der Mod \"Unified Dyes\" und über Lua/Beduino Kommandos eingefärbt werden.\n"..
"\n"..
"\n"..
"\n",

View File

@ -1128,8 +1128,7 @@ techage.manual_EN.aText = {
"\n"..
"\n"..
"\n",
"The signal lamp can be switched on or off with the 'on' / 'off' command. This lamp does not need electricity and\n"..
"can be colored with the airbrush tool of the mod Unified Dyes.\n"..
"The signal lamp can be switched on or off with the 'on' / 'off' command. This lamp does not need electricity and can be colored with the airbrush tool from the mod Unified Dyes\" and via Lua/Beduino commands.\n"..
"\n"..
"\n"..
"\n",

View File

@ -1042,7 +1042,9 @@ no oil=Kein Öl
### pusher.lua ###
Optionally configure@nthe pusher with one item=Der Schieber kann optional@nmit einem Gegenstand@nkonfiguriert werden
Number of items=Anzahl der Elemente
Number of items that are allowed to be pushed=Anzahl der Elemente, die verschoben werden dürfen
Optionally configure@nthe pusher with one item=Der Schieber kann optional@nmit einem Elemente@nkonfiguriert werden
Pusher=Schieber
### quarry.lua ###
@ -1166,7 +1168,7 @@ TA5 Fusion Reactor Shell=TA5 Fusionsreaktor Hülle
TA4 Wind Turbine Signal Lamp=TA4 Windkraftanlagenlampe
TechAge Signal Lamp=TechAge Signallampe
TechAge Signal Lamp (can be colored)=TechAge Signallampe (kann gefärbt werden)
TechAge Signal Lamp 2 =TechAge Signallampe 2
### signallamp_2x.lua ###

View File

@ -1042,6 +1042,8 @@ no oil=
### pusher.lua ###
Number of items=
Number of items that are allowed to be pushed=
Optionally configure@nthe pusher with one item=
Pusher=
@ -1166,7 +1168,7 @@ TA5 Fusion Reactor Shell=
TA4 Wind Turbine Signal Lamp=
TechAge Signal Lamp=
TechAge Signal Lamp (can be colored)=
TechAge Signal Lamp 2 =
### signallamp_2x.lua ###

View File

@ -8,7 +8,7 @@
AGPL v3
See LICENSE.txt for more information
Colored Signal Lamp (requires unifieddyes)
Colored Signal Lamps (with unifieddyes support)
]]--
@ -20,127 +20,178 @@ local logic = techage.logic
local COLORED = minetest.get_modpath("unifieddyes") and minetest.global_exists("unifieddyes")
local LampsOff = {}
local LampsOn = {}
local function switch_on(pos, node)
node.name = "techage:signal_lamp_on"
minetest.swap_node(pos, node)
local function switch_on(pos, node, player, color)
if player and minetest.is_protected(pos, player:get_player_name()) then
return
end
color = (tonumber(color) or COLORED and 96 or 6) % 256
if LampsOff[node.name] then
node.name = LampsOff[node.name]
node.param2 = color
minetest.swap_node(pos, node)
elseif LampsOn[node.name] and color ~= node.param2 then
node.param2 = color
minetest.swap_node(pos, node)
end
end
local function switch_off(pos, node)
node.name = "techage:signal_lamp_off"
minetest.swap_node(pos, node)
local function switch_off(pos, node, player)
if player and minetest.is_protected(pos, player:get_player_name()) then
return
end
if LampsOn[node.name] then
node.name = LampsOn[node.name]
node.param2 = COLORED and 241 or 35
minetest.swap_node(pos, node)
end
end
minetest.register_node("techage:signal_lamp_off", {
description = S("TechAge Signal Lamp (can be colored)"),
tiles = {"techage_signal_lamp.png^[colorize:#000000:100"},
drawtype = "nodebox",
node_box = {
local function register_signallamp(name, description, tiles, node_box)
LampsOff[name .. "_off"] = name .. "_on"
LampsOn[name .. "_on"] = name .. "_off"
minetest.register_node(name .. "_off", {
description = description,
tiles = tiles,
drawtype = node_box and "nodebox",
node_box = node_box,
after_place_node = function(pos, placer, itemstack, pointed_thing)
logic.after_place_node(pos, placer, name .. "_off", description)
logic.infotext(M(pos), description)
if COLORED then
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
end
end,
on_rightclick = switch_on,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
techage.remove_node(pos, oldnode, oldmetadata)
if COLORED then
unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger)
else
local node = minetest.get_node(pos)
node.param2 = 35
minetest.swap_node(pos, node)
end
end,
on_construct = COLORED and unifieddyes.on_construct or nil,
on_dig = COLORED and unifieddyes.on_dig or nil,
paramtype = "light",
paramtype2 = "color",
--palette = "techage_palette256.png",
palette = COLORED and "unifieddyes_palette_extended.png" or "techage_palette256.png",
place_param2 = 241,
sunlight_propagates = true,
sounds = default.node_sound_glass_defaults(),
groups = {choppy=2, cracky=1, ud_param2_colorable = 1},
is_ground_content = false,
drop = name .. "_off"
})
minetest.register_node(name .. "_on", {
description = description,
tiles = tiles,
drawtype = node_box and "nodebox",
node_box = node_box,
on_rightclick = switch_off,
paramtype = "light",
paramtype2 = "color",
--palette = "techage_palette256.png",
palette = COLORED and "unifieddyes_palette_extended.png" or "techage_palette256.png",
groups = {choppy=2, cracky=1, not_in_creative_inventory=1, ud_param2_colorable = 1},
after_dig_node = function(pos, oldnode, oldmetadata, digger)
techage.remove_node(pos, oldnode, oldmetadata)
if COLORED then
unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger)
end
end,
on_dig = COLORED and unifieddyes.on_dig or nil,
light_source = 10,
is_ground_content = false,
drop = name .. "_off"
})
techage.register_node({name .. "_off", name .. "_on"}, {
on_recv_message = function(pos, src, topic, payload)
if topic == "on" then
local node = techage.get_node_lvm(pos)
switch_on(pos, node)
return true
elseif topic == "off" then
local node = techage.get_node_lvm(pos)
switch_off(pos, node)
return true
elseif topic == "color" then
local node = techage.get_node_lvm(pos)
switch_on(pos, node, nil, payload)
return true
else
return "unsupported"
end
end,
on_beduino_receive_cmnd = function(pos, src, topic, payload)
if topic == 1 and payload[1] == 1 then
local node = techage.get_node_lvm(pos)
switch_on(pos, node)
return 0
elseif topic == 1 and payload[1] == 0 then
local node = techage.get_node_lvm(pos)
switch_off(pos, node)
return 0
elseif topic == 70 then
local node = techage.get_node_lvm(pos)
switch_on(pos, node, nil, payload[1])
return 0
else
return 2
end
end,
})
end
register_signallamp("techage:signal_lamp",
S("TechAge Signal Lamp"),
{"techage_signal_lamp.png^[colorize:#000000:100"},
{
type = "fixed",
fixed = {
{-6/16, -6/16, -6/16, 6/16, 6/16, 6/16},
{-4/16, -10/16, -4/16, 4/16, -6/16, 4/16},
},
},
}
}
)
after_place_node = function(pos, placer, itemstack, pointed_thing)
logic.after_place_node(pos, placer, "techage:signal_lamp_off", S("TechAge Signal Lamp"))
logic.infotext(M(pos), S("TechAge Signal Lamp"))
if COLORED then
unifieddyes.recolor_on_place(pos, placer, itemstack, pointed_thing)
end
end,
on_rightclick = switch_on,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
techage.remove_node(pos, oldnode, oldmetadata)
if COLORED then
unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger)
end
end,
on_construct = COLORED and unifieddyes.on_construct or nil,
on_dig = COLORED and unifieddyes.on_dig or nil,
paramtype = "light",
paramtype2 = "color",
palette = COLORED and "unifieddyes_palette_extended.png" or 'techage_color16.png',
place_param2 = 241,
sunlight_propagates = true,
sounds = default.node_sound_stone_defaults(),
groups = {choppy=2, cracky=1, ud_param2_colorable = 1},
is_ground_content = false,
drop = "techage:signal_lamp_off"
})
minetest.register_node("techage:signal_lamp_on", {
description = S("TechAge Signal Lamp"),
tiles = {"techage_signal_lamp.png"},
drawtype = "nodebox",
node_box = {
type = "fixed",
fixed = {
{-6/16, -6/16, -6/16, 6/16, 6/16, 6/16},
{-4/16, -10/16, -4/16, 4/16, -6/16, 4/16},
},
},
on_rightclick = switch_off,
paramtype = "light",
paramtype2 = "color",
palette = COLORED and "unifieddyes_palette_extended.png" or 'techage_color16.png',
groups = {choppy=2, cracky=1, not_in_creative_inventory=1, ud_param2_colorable = 1},
on_construct = COLORED and unifieddyes.on_construct or nil,
after_place_node = COLORED and unifieddyes.recolor_on_place or nil,
after_dig_node = function(pos, oldnode, oldmetadata, digger)
techage.remove_node(pos, oldnode, oldmetadata)
if COLORED then
unifieddyes.after_dig_node(pos, oldnode, oldmetadata, digger)
end
end,
on_dig = COLORED and unifieddyes.on_dig or nil,
light_source = 10,
is_ground_content = false,
drop = "techage:signal_lamp_off"
})
techage.register_node({"techage:signal_lamp_off", "techage:signal_lamp_on"}, {
on_recv_message = function(pos, src, topic, payload)
if topic == "on" then
local node = techage.get_node_lvm(pos)
switch_on(pos, node)
elseif topic == "off" then
local node = techage.get_node_lvm(pos)
switch_off(pos, node)
else
return "unsupported"
end
end,
on_beduino_receive_cmnd = function(pos, src, topic, payload)
if topic == 1 and payload[1] == 1 then
local node = techage.get_node_lvm(pos)
switch_on(pos, node)
return 0
elseif topic == 1 and payload[1] == 0 then
local node = techage.get_node_lvm(pos)
switch_off(pos, node)
return 0
else
return 2
end
end,
})
register_signallamp("techage:signal_lamp2",
S("TechAge Signal Lamp 2 "),
{"techage_signallamp2.png"}
)
minetest.register_craft({
output = "techage:signal_lamp_off",
recipe = {
{"", "wool:white", ""},
{"", "default:torch", ""},
{"", "techage:vacuum_tube", ""},
},
})
output = "techage:signal_lamp_off",
recipe = {
{"", "wool:white", ""},
{"", "default:torch", ""},
{"", "techage:vacuum_tube", ""},
},
})
minetest.register_craft({
output = "techage:signal_lamp2_off",
recipe = {
{"", "default:glass", ""},
{"", "default:torch", ""},
{"", "techage:vacuum_tube", ""},
},
})

View File

@ -631,7 +631,7 @@ Im privaten Modus (private) kann das Terminal nur von Spielern verwendet werden,
### TechAge Signallampe / Signal Lamp
Die Signallampe kann mit `on`/`off` Kommando ein- bzw. ausgeschaltet werden. Diese Lampe braucht keinen Strom und
kann mit der Spritzpistole aus der Mod "Unified Dyes" farbig gemacht werden.
kann mit der Spritzpistole aus der Mod "Unified Dyes" und über Lua/Beduino Kommandos eingefärbt werden.
[ta3_signallamp|image]

View File

@ -629,8 +629,7 @@ In public mode, all players can use the preconfigured keys.
### TechAge Signal Lamp
The signal lamp can be switched on or off with the `on` / `off` command. This lamp does not need electricity and
can be colored with the airbrush tool of the mod Unified Dyes.
The signal lamp can be switched on or off with the `on` / `off` command. This lamp does not need electricity and can be colored with the airbrush tool from the mod Unified Dyes" and via Lua/Beduino commands.
[ta3_signallamp|image]

View File

@ -417,6 +417,7 @@ Please note, that this is not a technical distinction, only a logical.
| "stop" | nil | Stop command for the TA4 Sequencer. |
| "gain" | volume | Set volume of the sound block (`volume` is a value between 0 and 1.0) |
| "sound" | index | Select sound sample of the sound block |
| "color" | \<color> | Set the color of the TechAge Signal Lamp and TechAge Signal Lamp 2 (color = 0..255) |
### Server and Terminal Functions

40
textures/generate.py Executable file
View File

@ -0,0 +1,40 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# Script to generate the palette PNG file.
#
# Copyright (C) 2022 Joachim Stolberg
# LGPLv2.1+
from PIL import Image
MainColors = [
0x000080, 0x008000, 0x800000, 0x008080, 0x808000, 0x800080,
0x0000FF, 0x00FF00, 0xFF0000, 0x00FFFF, 0xFFFF00, 0xFF00FF,
0x0080FF, 0x8000FF, 0x80FF00, 0x00FF80, 0xFF8000, 0xFF0080,
]
def generate():
img = Image.new("RGB", (18, 15), color='#000000')
# Main colors
for x in range(0,18):
img.putpixel((x, 0), MainColors[x])
# Grey scale
for x in range(0,18):
img.putpixel((x, 1), (x * 15, x * 15, x * 15))
# 216 colors palette
idx = 36
for r in range(0,6):
for g in range(0,6):
for b in range(0,6):
x = idx % 18
y = int(idx / 18)
img.putpixel((x, y), (r * 0x33, g * 0x33, b * 0x33))
idx += 1
img.save("techage_palette256.png", "PNG")
generate()

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 B