aboutsummaryrefslogtreecommitdiff
path: root/font_api/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'font_api/init.lua')
-rw-r--r--font_api/init.lua71
1 files changed, 71 insertions, 0 deletions
diff --git a/font_api/init.lua b/font_api/init.lua
new file mode 100644
index 0000000..2c8f4f3
--- /dev/null
+++ b/font_api/init.lua
@@ -0,0 +1,71 @@
+--[[
+ font_api mod for Minetest - Library to add font display capability
+ to display_api mod.
+ (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/>.
+--]]
+
+-- Global variables
+-------------------
+
+font_api = {}
+font_api.name = minetest.get_current_modname()
+font_api.path = minetest.get_modpath(font_api.name)
+
+-- Inclusions
+-------------
+
+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 text = meta:get_string("display_text")
+ local ndef = minetest.registered_nodes[minetest.get_node(pos).name]
+ local entity = objref:get_luaentity()
+
+ -- If orwell96's modified signs_lib version is available and sign macros are active,
+ -- replace them in display_lib's text too.
+ if signs_lib and signs_lib.replace_macros then
+ text = signs_lib.replace_macros(text)
+ end
+
+ if entity and ndef.display_entities[entity.name] then
+ 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 maxlines = def.maxlines or 1 -- TODO:How to do w/o maxlines ?
+
+ objref:set_properties({
+ textures={font:make_text_texture(text,
+ font:get_height(maxlines) * def.size.x / def.size.y
+ / (def.aspect_ratio or 1),
+ font:get_height(maxlines),
+ def.maxlines, def.halign, def.valign, def.color)},
+ visual_size = def.size
+ })
+ end
+end
+
+-- Compatibility
+font_lib = font_api