Preparation to add some more monitors

This commit is contained in:
Pierre-Yves Rollo 2018-12-03 17:05:00 +01:00
parent 0cbffd0753
commit 8974ac0c2d
1 changed files with 96 additions and 77 deletions

173
nodes.lua
View File

@ -1,86 +1,105 @@
--[[ --[[
digimons mod for Minetest - Digiline monitors using Display API / Font API digimons mod for Minetest - Digilines monitors using Display API / Font API
(c) Pierre-Yves Rollo (c) Pierre-Yves Rollo
This file is part of digimons. This file is part of digimons.
signs is free software: you can redistribute it and/or modify signs is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or the Free Software Foundation, either version 3 of the License, or
(at your option) any later version. (at your option) any later version.
signs is distributed in the hope that it will be useful, signs is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with signs. If not, see <http://www.gnu.org/licenses/>. along with signs. If not, see <http://www.gnu.org/licenses/>.
--]] --]]
minetest.register_node('digimons:cathodic_amber_monitor', { local common_node_def = {
description = "Cathodic amber monitor", groups = { display_api = 1},
sunlight_propagates = false, on_place = function(itemstack, placer, pointed_thing)
paramtype = "light", minetest.rotate_node(itemstack, placer, pointed_thing)
paramtype2 = "facedir", return display_api.on_place(itemstack, placer, pointed_thing)
tiles = { "digimons_amber_top.png", "digimons_amber_bottom.png", end,
"digimons_amber_sides.png", "digimons_amber_sides.png^[transformFX]", on_destruct = display_api.on_destruct,
"digimons_amber_back.png", "digimons_amber_front.png",}, on_rotate = display_api.on_rotate,
drawtype = "nodebox", on_punch = display_api.update_entities,
groups = {choppy = 1, oddly_breakable_by_hand = 1, display_modpack_node = 1}, on_construct = function(pos)
node_box = { minetest.get_meta(pos):set_string("formspec",
type = "fixed", "field[channel;Channel;${channel}]")
fixed = { display_api.on_construct(pos)
{-8/16, 8/16, -8/16, 8/16, 7/16, -7/16}, end,
{-8/16, -8/16, -8/16, 8/16, -5/16, -7/16}, on_receive_fields = function(pos, formname, fields, player)
{-8/16, 7/16, -8/16, -7/16, -5/16, -7/16}, local name = player:get_player_name()
{7/16, 7/16, -8/16, 8/16, -5/16, -7/16}, if minetest.is_protected(pos, name) then
{-8/16, -8/16, -7/16, 8/16, 8/16, 1/16}, minetest.record_protection_violation(pos, name)
{-6/16, 5/16, 1/16, 6/16, -8/16, 8/16} return
}, end
},
display_entities = {
["digimons:screen"] = {
on_display_update = font_api.on_display_update,
depth = -7/16 - display_api.entity_spacing,
top = -1/16,
aspect_ratio = 0.5, maxlines = 6,
size = { x = 23/32, y = 10/16 },
color = "#FFA000", font_name = "mozart", halign="left", valing="top",
},
},
on_place = function(itemstack, placer, pointed_thing)
minetest.rotate_node(itemstack, placer, pointed_thing)
return display_api.on_place(itemstack, placer, pointed_thing)
end,
on_construct = function(pos)
minetest.get_meta(pos):set_string("formspec",
"field[channel;Channel;${channel}]")
display_api.on_construct(pos)
end,
on_destruct = display_api.on_destruct,
on_rotate = display_api.on_rotate,
on_receive_fields = function(pos, formname, fields, player)
local name = player:get_player_name()
if minetest.is_protected(pos, name) then
minetest.record_protection_violation(pos, name)
return
end
if (fields.channel) then if (fields.channel) then
minetest.get_meta(pos):set_string("channel", fields.channel) minetest.get_meta(pos):set_string("channel", fields.channel)
end end
end, end,
on_punch = display_api.update_entities, digiline = {
digiline = { receptor = {},
receptor = {}, effector = {
effector = { action = function(pos, _, channel, msg)
action = function(pos, _, channel, msg) if channel ~= minetest.get_meta(pos):get_string("channel") then
if channel ~= minetest.get_meta(pos):get_string("channel") then return
return end
end digimons.push_text_on_screen(pos, msg)
digimons.push_text_on_screen(pos, msg) end,
end, },
}, },
}, }
function digimons.register_monitor(nodename, nodedef)
def = table.copy(common_node_def)
for key, value in pairs(nodedef) do
if key == 'groups' then
def[key] = def[key] or {}
for key2, value2 in pairs(value) do
def[key][key2] = value2
end
else
def[key] = value
end
end
minetest.register_node(nodename, nodedef)
end
digimons.register_monitor('digimons:cathodic_amber_monitor', {
description = "Cathodic amber monitor",
sunlight_propagates = false,
paramtype = "light",
paramtype2 = "facedir",
tiles = { "digimons_amber_top.png", "digimons_amber_bottom.png",
"digimons_amber_sides.png", "digimons_amber_sides.png^[transformFX]",
"digimons_amber_back.png", "digimons_amber_front.png",},
drawtype = "nodebox",
groups = {choppy = 1, oddly_breakable_by_hand = 1},
node_box = {
type = "fixed",
fixed = {
{-8/16, 8/16, -8/16, 8/16, 7/16, -7/16},
{-8/16, -8/16, -8/16, 8/16, -5/16, -7/16},
{-8/16, 7/16, -8/16, -7/16, -5/16, -7/16},
{7/16, 7/16, -8/16, 8/16, -5/16, -7/16},
{-8/16, -8/16, -7/16, 8/16, 8/16, 1/16},
{-6/16, 5/16, 1/16, 6/16, -8/16, 8/16}
},
},
display_entities = {
["digimons:screen"] = {
on_display_update = font_api.on_display_update,
depth = -7/16 - display_api.entity_spacing,
top = -1/16,
aspect_ratio = 0.5, maxlines = 6,
size = { x = 23/32, y = 10/16 },
color = "#FFA000", font_name = "mozart", halign="left", valing="top",
},
},
}) })