aboutsummaryrefslogtreecommitdiff
path: root/font_api
diff options
context:
space:
mode:
authorPierre-Yves Rollo <dev@pyrollo.com>2018-12-11 11:41:03 +0100
committerPierre-Yves Rollo <dev@pyrollo.com>2018-12-11 11:41:03 +0100
commit62c8de26b4a18ec226ea1e1f77030271dde16e98 (patch)
treeb766132ce931f63b7ed620b0943a91219c849999 /font_api
parentfeb1b639ff9180af034f5d7993361ea19fef2778 (diff)
downloaddisplay_modpack_no_craft-62c8de26b4a18ec226ea1e1f77030271dde16e98.tar.gz
display_modpack_no_craft-62c8de26b4a18ec226ea1e1f77030271dde16e98.zip
Better management of display_api integration
Diffstat (limited to 'font_api')
-rw-r--r--font_api/depends.txt1
-rw-r--r--font_api/display_api.lua77
-rw-r--r--font_api/init.lua54
3 files changed, 80 insertions, 52 deletions
diff --git a/font_api/depends.txt b/font_api/depends.txt
index e69de29..88fa963 100644
--- a/font_api/depends.txt
+++ b/font_api/depends.txt
@@ -0,0 +1 @@
+display_api?
diff --git a/font_api/display_api.lua b/font_api/display_api.lua
new file mode 100644
index 0000000..2191dba
--- /dev/null
+++ b/font_api/display_api.lua
@@ -0,0 +1,77 @@
+--[[
+ font_api mod for Minetest - Library to create textures with fonts and text
+ (c) Pierre-Yves Rollo
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+--]]
+
+-- Integration with display API
+
+if minetest.get_modpath("display_api") then
+ --- Standard on_display_update entity callback.
+ -- Node should have properly configured display_entity.
+ -- @param pos Node position
+ -- @param objref Object reference of entity
+
+ font_api.on_display_update = function (pos, objref)
+ local meta = minetest.get_meta(pos)
+ local ndef = minetest.registered_nodes[minetest.get_node(pos).name]
+ local entity = objref:get_luaentity()
+
+ if not entity or not ndef.display_entities[entity.name] then
+ return
+ end
+
+ local def = ndef.display_entities[entity.name]
+ local font = font_api.get_font(meta:get_string("font") ~= ""
+ and meta:get_string("font") or def.font_name)
+
+ local text = meta:get_string(def.meta_text or "display_text")
+
+ -- Compute entity resolution accroding to given attributes
+ local texturew, textureh
+ textureh = font:get_height(def.lines or def.maxlines or 1)
+
+ if def.columns then
+ if font.fixedwidth then
+ texturew = def.columns * font.fixedwidth
+ if def.aspect_ratio then
+ minetest.log('warning', "[font_api] 'aspect_ratio' ignored because 'columns' is specified")
+ end
+ else
+ minetest.log('warning', "[font_api] 'columns' ignored because '"..font.name.."' is not a fixed width font.")
+ end
+ end
+
+ if not texturew then
+ if not def.aspect_ratio then
+ minetest.log('warning', "[font_api] No 'aspect_ratio' specified, using default 1.")
+ end
+ texturew = textureh * def.size.x / def.size.y / (def.aspect_ratio or 1)
+ end
+
+ objref:set_properties({
+ textures={ font:render(text, texturew, textureh, {
+ lines = def.maxlines or def.lines,
+ halign = def.halign,
+ valign = def.valign,
+ color = def.color} ) },
+ visual_size = def.size,
+ })
+ end
+else
+ font_api.on_display_update = function (pos, objref)
+ minetest.log('error', '[font_api] font_api.on_display_update called but display_api mod not enabled.')
+ end
+end
diff --git a/font_api/init.lua b/font_api/init.lua
index 307049b..7fbedf9 100644
--- a/font_api/init.lua
+++ b/font_api/init.lua
@@ -30,58 +30,8 @@ font_api.path = minetest.get_modpath(font_api.name)
dofile(font_api.path.."/font.lua")
dofile(font_api.path.."/registry.lua")
dofile(font_api.path.."/fontform.lua")
-
---- Standard on_display_update entity callback.
--- Node should have a corresponding display_entity with size, resolution and
--- maxlines fields and optionally halign, valign and color fields
--- @param pos Node position
--- @param objref Object reference of entity
-
-function font_api.on_display_update(pos, objref)
- local meta = minetest.get_meta(pos)
- local ndef = minetest.registered_nodes[minetest.get_node(pos).name]
- local entity = objref:get_luaentity()
-
- if not entity or not ndef.display_entities[entity.name] then
- return
- end
-
- local def = ndef.display_entities[entity.name]
- local font = font_api.get_font(meta:get_string("font") ~= ""
- and meta:get_string("font") or def.font_name)
-
- local text = meta:get_string(def.meta_text or "display_text")
-
- -- Compute entity resolution accroding to given attributes
- local texturew, textureh
- textureh = font:get_height(def.lines or def.maxlines or 1)
-
- if def.columns then
- if font.fixedwidth then
- texturew = def.columns * font.fixedwidth
- if def.aspect_ratio then
- minetest.log('warning', "[font_api] 'aspect_ratio' ignored because 'columns' is specified")
- end
- else
- minetest.log('warning', "[font_api] 'columns' ignored because '"..font.name.."' is not a fixed width font.")
- end
- end
-
- if not texturew then
- if not def.aspect_ratio then
- minetest.log('warning', "[font_api] No 'aspect_ratio' specified, using default 1.")
- end
- texturew = textureh * def.size.x / def.size.y / (def.aspect_ratio or 1)
- end
-
- objref:set_properties({
- textures={ font:render(text, texturew, textureh, {
- lines = def.maxlines or def.lines,
- halign = def.halign,
- valign = def.valign,
- color = def.color} ) },
- visual_size = def.size,
- })
+if minetest.get_modpath("display_api") then
+ dofile(font_api.path.."/display_api.lua")
end
-- Compatibility