Merge branch 'dev'

This commit is contained in:
Pierre-Yves Rollo 2018-12-04 07:55:57 +01:00
commit 38ba4d7365
2 changed files with 104 additions and 77 deletions

8
README.md Normal file
View File

@ -0,0 +1,8 @@
# Digimons - Digilines Monitors
Digilines monitors mod for Minetest using Display API / Font API.
**Version**: Alpha
**Dependancies**: display_api, font_api, digilines
**License**: LGPL v3 for the code, CC-BY-SA for the textures.

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",
},
},
}) })