From 1b39bf7ae31f0781c65c0a8f9e1d94a37def5f56 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Rollo Date: Sat, 28 Nov 2015 20:44:04 +0100 Subject: [PATCH] Added facedir node support to display_lib, created font_lib, updated mods accordingly --- README.md | 4 +- display_lib/API.md | 14 +- display_lib/README.md | 4 +- display_lib/init.lua | 98 +++++++--- font_lib/API.md | 47 +++++ font_lib/LICENSE.txt | 13 ++ font_lib/README.md | 14 ++ font_lib/depends.txt | 1 + font_lib/init.lua | 139 ++++++++++++++ font_lib/textures/font_lib_20.png | Bin 0 -> 232 bytes .../textures/font_lib_21.png | Bin 241 -> 241 bytes .../textures/font_lib_22.png | Bin 235 -> 235 bytes .../textures/font_lib_23.png | Bin 244 -> 244 bytes .../textures/font_lib_24.png | Bin 247 -> 247 bytes .../textures/font_lib_25.png | Bin 247 -> 247 bytes .../textures/font_lib_26.png | Bin 246 -> 246 bytes .../textures/font_lib_27.png | Bin 238 -> 238 bytes .../textures/font_lib_28.png | Bin 242 -> 242 bytes font_lib/textures/font_lib_29.png | Bin 0 -> 241 bytes .../textures/font_lib_2a.png | Bin 238 -> 238 bytes .../textures/font_lib_2b.png | Bin 241 -> 241 bytes font_lib/textures/font_lib_2c.png | Bin 0 -> 238 bytes .../textures/font_lib_2d.png | Bin 237 -> 237 bytes font_lib/textures/font_lib_2e.png | Bin 0 -> 236 bytes font_lib/textures/font_lib_2f.png | Bin 0 -> 244 bytes .../textures/font_lib_30.png | Bin 239 -> 239 bytes .../textures/font_lib_31.png | Bin 239 -> 239 bytes .../textures/font_lib_32.png | Bin 247 -> 247 bytes .../textures/font_lib_33.png | Bin 246 -> 246 bytes .../textures/font_lib_34.png | Bin 247 -> 247 bytes .../textures/font_lib_35.png | Bin 247 -> 247 bytes .../textures/font_lib_36.png | Bin 244 -> 244 bytes .../textures/font_lib_37.png | Bin 242 -> 242 bytes .../textures/font_lib_38.png | Bin 240 -> 240 bytes .../textures/font_lib_39.png | Bin 243 -> 243 bytes .../textures/font_lib_3a.png | Bin 237 -> 237 bytes .../textures/font_lib_3b.png | Bin 240 -> 240 bytes .../textures/font_lib_3c.png | Bin 245 -> 245 bytes .../textures/font_lib_3d.png | Bin 236 -> 236 bytes .../textures/font_lib_3e.png | Bin 245 -> 245 bytes .../textures/font_lib_3f.png | Bin 243 -> 243 bytes .../textures/font_lib_40.png | Bin 259 -> 259 bytes .../textures/font_lib_41.png | Bin 243 -> 243 bytes .../textures/font_lib_42.png | Bin 240 -> 240 bytes .../textures/font_lib_43.png | Bin 246 -> 246 bytes .../textures/font_lib_44.png | Bin 242 -> 242 bytes .../textures/font_lib_45.png | Bin 240 -> 240 bytes .../textures/font_lib_46.png | Bin 241 -> 241 bytes .../textures/font_lib_47.png | Bin 247 -> 247 bytes .../textures/font_lib_48.png | Bin 240 -> 240 bytes .../textures/font_lib_49.png | Bin 236 -> 236 bytes .../textures/font_lib_4a.png | Bin 240 -> 240 bytes .../textures/font_lib_4b.png | Bin 246 -> 246 bytes .../textures/font_lib_4c.png | Bin 238 -> 238 bytes .../textures/font_lib_4d.png | Bin 249 -> 249 bytes .../textures/font_lib_4e.png | Bin 243 -> 243 bytes font_lib/textures/font_lib_4f.png | Bin 0 -> 243 bytes .../textures/font_lib_50.png | Bin 241 -> 241 bytes .../textures/font_lib_51.png | Bin 244 -> 244 bytes .../textures/font_lib_52.png | Bin 238 -> 238 bytes .../textures/font_lib_53.png | Bin 247 -> 247 bytes .../textures/font_lib_54.png | Bin 237 -> 237 bytes .../textures/font_lib_55.png | Bin 238 -> 238 bytes .../textures/font_lib_56.png | Bin 243 -> 243 bytes .../textures/font_lib_57.png | Bin 246 -> 246 bytes .../textures/font_lib_58.png | Bin 245 -> 245 bytes .../textures/font_lib_59.png | Bin 244 -> 244 bytes .../textures/font_lib_5a.png | Bin 248 -> 248 bytes .../textures/font_lib_5b.png | Bin 234 -> 234 bytes .../textures/font_lib_5c.png | Bin 244 -> 244 bytes .../textures/font_lib_5d.png | Bin 234 -> 234 bytes .../textures/font_lib_5e.png | Bin 238 -> 238 bytes font_lib/textures/font_lib_5f.png | Bin 0 -> 233 bytes .../textures/font_lib_60.png | Bin 234 -> 234 bytes .../textures/font_lib_61.png | Bin 245 -> 245 bytes .../textures/font_lib_62.png | Bin 242 -> 242 bytes .../textures/font_lib_63.png | Bin 244 -> 244 bytes font_lib/textures/font_lib_64.png | Bin 0 -> 243 bytes .../textures/font_lib_65.png | Bin 245 -> 245 bytes .../textures/font_lib_66.png | Bin 240 -> 240 bytes font_lib/textures/font_lib_67.png | Bin 0 -> 243 bytes .../textures/font_lib_68.png | Bin 240 -> 240 bytes .../textures/font_lib_69.png | Bin 239 -> 239 bytes .../textures/font_lib_6a.png | Bin 236 -> 236 bytes .../textures/font_lib_6b.png | Bin 246 -> 246 bytes .../textures/font_lib_6c.png | Bin 236 -> 236 bytes .../textures/font_lib_6d.png | Bin 241 -> 241 bytes .../textures/font_lib_6e.png | Bin 239 -> 239 bytes font_lib/textures/font_lib_6f.png | Bin 0 -> 241 bytes .../textures/font_lib_70.png | Bin 242 -> 242 bytes font_lib/textures/font_lib_71.png | Bin 0 -> 243 bytes font_lib/textures/font_lib_72.png | Bin 0 -> 241 bytes .../textures/font_lib_73.png | Bin 242 -> 242 bytes .../textures/font_lib_74.png | Bin 243 -> 243 bytes .../textures/font_lib_75.png | Bin 239 -> 239 bytes .../textures/font_lib_76.png | Bin 244 -> 244 bytes .../textures/font_lib_77.png | Bin 240 -> 240 bytes .../textures/font_lib_78.png | Bin 244 -> 244 bytes font_lib/textures/font_lib_79.png | Bin 0 -> 241 bytes .../textures/font_lib_7a.png | Bin 246 -> 246 bytes .../textures/font_lib_7b.png | Bin 239 -> 239 bytes font_lib/textures/font_lib_7c.png | Bin 0 -> 232 bytes .../textures/font_lib_7d.png | Bin 239 -> 239 bytes .../textures/font_lib_7e.png | Bin 239 -> 239 bytes ontime_clocks/nodes.lua | 12 +- signs/README.md | 30 +-- signs/common.lua | 173 ++++++----------- signs/crafts.lua | 27 --- signs/depends.txt | 2 +- signs/font.lua | 63 ------- signs/nodes.lua | 175 +++++------------- signs/textures/signs_20.png | Bin 232 -> 0 bytes signs/textures/signs_29.png | Bin 241 -> 0 bytes signs/textures/signs_2c.png | Bin 238 -> 0 bytes signs/textures/signs_2e.png | Bin 236 -> 0 bytes signs/textures/signs_2f.png | Bin 244 -> 0 bytes signs/textures/signs_4f.png | Bin 243 -> 0 bytes signs/textures/signs_5f.png | Bin 233 -> 0 bytes signs/textures/signs_64.png | Bin 243 -> 0 bytes signs/textures/signs_67.png | Bin 243 -> 0 bytes signs/textures/signs_6f.png | Bin 241 -> 0 bytes signs/textures/signs_71.png | Bin 243 -> 0 bytes signs/textures/signs_72.png | Bin 241 -> 0 bytes signs/textures/signs_79.png | Bin 241 -> 0 bytes signs/textures/signs_7c.png | Bin 232 -> 0 bytes signs/textures/signs_black_inventory.png | Bin 265 -> 0 bytes signs/textures/signs_black_left.png | Bin 263 -> 0 bytes signs/textures/signs_black_right.png | Bin 258 -> 0 bytes signs/textures/signs_blue_street.png | Bin 436 -> 0 bytes .../textures/signs_blue_street_inventory.png | Bin 472 -> 0 bytes signs/textures/signs_default.png | Bin 0 -> 554 bytes signs/textures/signs_default_inventory.png | Bin 0 -> 617 bytes signs/textures/signs_green_street.png | Bin 274 -> 0 bytes .../textures/signs_green_street_inventory.png | Bin 279 -> 0 bytes 134 files changed, 426 insertions(+), 390 deletions(-) create mode 100644 font_lib/API.md create mode 100644 font_lib/LICENSE.txt create mode 100644 font_lib/README.md create mode 100644 font_lib/depends.txt create mode 100644 font_lib/init.lua create mode 100644 font_lib/textures/font_lib_20.png rename signs/textures/signs_21.png => font_lib/textures/font_lib_21.png (63%) rename signs/textures/signs_22.png => font_lib/textures/font_lib_22.png (64%) rename signs/textures/signs_23.png => font_lib/textures/font_lib_23.png (62%) rename signs/textures/signs_24.png => font_lib/textures/font_lib_24.png (61%) rename signs/textures/signs_25.png => font_lib/textures/font_lib_25.png (61%) rename signs/textures/signs_26.png => font_lib/textures/font_lib_26.png (61%) rename signs/textures/signs_27.png => font_lib/textures/font_lib_27.png (63%) rename signs/textures/signs_28.png => font_lib/textures/font_lib_28.png (62%) create mode 100644 font_lib/textures/font_lib_29.png rename signs/textures/signs_2a.png => font_lib/textures/font_lib_2a.png (63%) rename signs/textures/signs_2b.png => font_lib/textures/font_lib_2b.png (63%) create mode 100644 font_lib/textures/font_lib_2c.png rename signs/textures/signs_2d.png => font_lib/textures/font_lib_2d.png (64%) create mode 100644 font_lib/textures/font_lib_2e.png create mode 100644 font_lib/textures/font_lib_2f.png rename signs/textures/signs_30.png => font_lib/textures/font_lib_30.png (63%) rename signs/textures/signs_31.png => font_lib/textures/font_lib_31.png (63%) rename signs/textures/signs_32.png => font_lib/textures/font_lib_32.png (61%) rename signs/textures/signs_33.png => font_lib/textures/font_lib_33.png (61%) rename signs/textures/signs_34.png => font_lib/textures/font_lib_34.png (61%) rename signs/textures/signs_35.png => font_lib/textures/font_lib_35.png (61%) rename signs/textures/signs_36.png => font_lib/textures/font_lib_36.png (62%) rename signs/textures/signs_37.png => font_lib/textures/font_lib_37.png (62%) rename signs/textures/signs_38.png => font_lib/textures/font_lib_38.png (63%) rename signs/textures/signs_39.png => font_lib/textures/font_lib_39.png (62%) rename signs/textures/signs_3a.png => font_lib/textures/font_lib_3a.png (64%) rename signs/textures/signs_3b.png => font_lib/textures/font_lib_3b.png (63%) rename signs/textures/signs_3c.png => font_lib/textures/font_lib_3c.png (62%) rename signs/textures/signs_3d.png => font_lib/textures/font_lib_3d.png (64%) rename signs/textures/signs_3e.png => font_lib/textures/font_lib_3e.png (62%) rename signs/textures/signs_3f.png => font_lib/textures/font_lib_3f.png (62%) rename signs/textures/signs_40.png => font_lib/textures/font_lib_40.png (58%) rename signs/textures/signs_41.png => font_lib/textures/font_lib_41.png (62%) rename signs/textures/signs_42.png => font_lib/textures/font_lib_42.png (63%) rename signs/textures/signs_43.png => font_lib/textures/font_lib_43.png (61%) rename signs/textures/signs_44.png => font_lib/textures/font_lib_44.png (62%) rename signs/textures/signs_45.png => font_lib/textures/font_lib_45.png (63%) rename signs/textures/signs_46.png => font_lib/textures/font_lib_46.png (63%) rename signs/textures/signs_47.png => font_lib/textures/font_lib_47.png (61%) rename signs/textures/signs_48.png => font_lib/textures/font_lib_48.png (63%) rename signs/textures/signs_49.png => font_lib/textures/font_lib_49.png (64%) rename signs/textures/signs_4a.png => font_lib/textures/font_lib_4a.png (63%) rename signs/textures/signs_4b.png => font_lib/textures/font_lib_4b.png (61%) rename signs/textures/signs_4c.png => font_lib/textures/font_lib_4c.png (63%) rename signs/textures/signs_4d.png => font_lib/textures/font_lib_4d.png (61%) rename signs/textures/signs_4e.png => font_lib/textures/font_lib_4e.png (62%) create mode 100644 font_lib/textures/font_lib_4f.png rename signs/textures/signs_50.png => font_lib/textures/font_lib_50.png (63%) rename signs/textures/signs_51.png => font_lib/textures/font_lib_51.png (62%) rename signs/textures/signs_52.png => font_lib/textures/font_lib_52.png (63%) rename signs/textures/signs_53.png => font_lib/textures/font_lib_53.png (61%) rename signs/textures/signs_54.png => font_lib/textures/font_lib_54.png (64%) rename signs/textures/signs_55.png => font_lib/textures/font_lib_55.png (63%) rename signs/textures/signs_56.png => font_lib/textures/font_lib_56.png (62%) rename signs/textures/signs_57.png => font_lib/textures/font_lib_57.png (53%) rename signs/textures/signs_58.png => font_lib/textures/font_lib_58.png (62%) rename signs/textures/signs_59.png => font_lib/textures/font_lib_59.png (62%) rename signs/textures/signs_5a.png => font_lib/textures/font_lib_5a.png (61%) rename signs/textures/signs_5b.png => font_lib/textures/font_lib_5b.png (64%) rename signs/textures/signs_5c.png => font_lib/textures/font_lib_5c.png (62%) rename signs/textures/signs_5d.png => font_lib/textures/font_lib_5d.png (64%) rename signs/textures/signs_5e.png => font_lib/textures/font_lib_5e.png (63%) create mode 100644 font_lib/textures/font_lib_5f.png rename signs/textures/signs_60.png => font_lib/textures/font_lib_60.png (64%) rename signs/textures/signs_61.png => font_lib/textures/font_lib_61.png (62%) rename signs/textures/signs_62.png => font_lib/textures/font_lib_62.png (62%) rename signs/textures/signs_63.png => font_lib/textures/font_lib_63.png (62%) create mode 100644 font_lib/textures/font_lib_64.png rename signs/textures/signs_65.png => font_lib/textures/font_lib_65.png (62%) rename signs/textures/signs_66.png => font_lib/textures/font_lib_66.png (63%) create mode 100644 font_lib/textures/font_lib_67.png rename signs/textures/signs_68.png => font_lib/textures/font_lib_68.png (63%) rename signs/textures/signs_69.png => font_lib/textures/font_lib_69.png (63%) rename signs/textures/signs_6a.png => font_lib/textures/font_lib_6a.png (64%) rename signs/textures/signs_6b.png => font_lib/textures/font_lib_6b.png (61%) rename signs/textures/signs_6c.png => font_lib/textures/font_lib_6c.png (64%) rename signs/textures/signs_6d.png => font_lib/textures/font_lib_6d.png (63%) rename signs/textures/signs_6e.png => font_lib/textures/font_lib_6e.png (63%) create mode 100644 font_lib/textures/font_lib_6f.png rename signs/textures/signs_70.png => font_lib/textures/font_lib_70.png (54%) create mode 100644 font_lib/textures/font_lib_71.png create mode 100644 font_lib/textures/font_lib_72.png rename signs/textures/signs_73.png => font_lib/textures/font_lib_73.png (62%) rename signs/textures/signs_74.png => font_lib/textures/font_lib_74.png (62%) rename signs/textures/signs_75.png => font_lib/textures/font_lib_75.png (63%) rename signs/textures/signs_76.png => font_lib/textures/font_lib_76.png (62%) rename signs/textures/signs_77.png => font_lib/textures/font_lib_77.png (63%) rename signs/textures/signs_78.png => font_lib/textures/font_lib_78.png (62%) create mode 100644 font_lib/textures/font_lib_79.png rename signs/textures/signs_7a.png => font_lib/textures/font_lib_7a.png (61%) rename signs/textures/signs_7b.png => font_lib/textures/font_lib_7b.png (63%) create mode 100644 font_lib/textures/font_lib_7c.png rename signs/textures/signs_7d.png => font_lib/textures/font_lib_7d.png (63%) rename signs/textures/signs_7e.png => font_lib/textures/font_lib_7e.png (63%) delete mode 100644 signs/font.lua delete mode 100644 signs/textures/signs_20.png delete mode 100644 signs/textures/signs_29.png delete mode 100644 signs/textures/signs_2c.png delete mode 100644 signs/textures/signs_2e.png delete mode 100644 signs/textures/signs_2f.png delete mode 100644 signs/textures/signs_4f.png delete mode 100644 signs/textures/signs_5f.png delete mode 100644 signs/textures/signs_64.png delete mode 100644 signs/textures/signs_67.png delete mode 100644 signs/textures/signs_6f.png delete mode 100644 signs/textures/signs_71.png delete mode 100644 signs/textures/signs_72.png delete mode 100644 signs/textures/signs_79.png delete mode 100644 signs/textures/signs_7c.png delete mode 100644 signs/textures/signs_black_inventory.png delete mode 100644 signs/textures/signs_black_left.png delete mode 100644 signs/textures/signs_black_right.png delete mode 100644 signs/textures/signs_blue_street.png delete mode 100644 signs/textures/signs_blue_street_inventory.png create mode 100644 signs/textures/signs_default.png create mode 100644 signs/textures/signs_default_inventory.png delete mode 100644 signs/textures/signs_green_street.png delete mode 100644 signs/textures/signs_green_street_inventory.png diff --git a/README.md b/README.md index addcc78..ae67ab3 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ This modpack provides mods with dynamic display. Mods are : - **display_lib**: A library for adding display entities to nodes; +- **font_lib**: A library for displaying fonts on entities; - **ontime_clocks**: A mod providing clocks which display the ingame time; - **signs**: A mod providing signs and direction signs displaying text; - +- **signs_road**: A mod providing road signs displaying text; +- **steles**: A mod providing stone steles with text; diff --git a/display_lib/API.md b/display_lib/API.md index 7bfaaef..148db60 100644 --- a/display_lib/API.md +++ b/display_lib/API.md @@ -1,5 +1,6 @@ # Display Lib API -This document describes Display Lib API. Display Lib allows to add a dynamic display on a node. Node must be wallmounted and Display Lib limits its rotation to vertical positions. +This document describes Display Lib API. Display Lib allows to add a dynamic display on a node. Display Lib limits node rotations. For wallmounted, only vertical positionning is available, and for facedir, only first four position are availabel (those with default axis). + ## Provided methods ### update\_entities **display\_lib.update\_entities(pos)** @@ -38,7 +39,12 @@ This is a helper to register entities used for display. * Register display entities with **register\_display\_entity** * Register node with : - **on\_place**, **on\_construct**, **on\_destruct** and **on\_rotate** callbacks using **display\_lib** callbacks. - - a **display\_entities** field in node definition containing a entity name indexed table. For each entity, two fields : **depth** indicates the entity position (-0.5 to 0.5) and **on_display_update** is a callback in charge of setting up entity texture. + - a **display\_entities** field in node definition containing a entity name indexed table. See below for description of each display\_entities fields. + +### Display_entities fields +**depth**, **right** and **height** : Entity position regarding to node facedir/wallmounted main axis. Values for these fields can be any number between -0.5 and 0.5 (default value is 0). Position 0,0,0 is the center of the node. **depth** goes from front (-0.5) to rear (0.5), **height** goes from bottom (-0.5) to top (0.5) and **height** goes from left (-0.5) to right (0.5). + +**on_display_update** is a callback in charge of setting up entity texture. If not set, entity will have no texture and will be displayed as unknown item. ### Example @@ -60,9 +66,9 @@ This is a helper to register entities used for display. paramtype2 = "wallmounted", ... display_entities = { - ["mymod:entity1"] = { depth = -0.3, + ["mymod:entity1"] = { depth = 0.3, on_display_update = my_display_update1}, - ["mymod:entity1"] = { depth = -0.2, + ["mymod:entity1"] = { depth = 0.2, height = 0.1, on_display_update = my_display_update2}, }, ... diff --git a/display_lib/README.md b/display_lib/README.md index 7ca97b2..b075954 100644 --- a/display_lib/README.md +++ b/display_lib/README.md @@ -1,8 +1,8 @@ # Dislpay Lib -This library's purpose is to ease creation of wallmounted nodes with a display on front side. For example, signs and clocks. Display can be dynamic and/or different for each node instance. +This library's purpose is to ease creation of nodes with one or more displays on sides. For example, signs and clocks. Display can be dynamic and/or different for each node instance. -**Limitations**: This lib uses entities to draw display. This means display has to be vertical. So display nodes are only wallmounted vertically. +**Limitations**: This lib uses entities to draw display. This means display has to be vertical. So display nodes rotation are limitated to "upside up" positions. **Dependancies**:default diff --git a/display_lib/init.lua b/display_lib/init.lua index eaddfd3..276445d 100644 --- a/display_lib/init.lua +++ b/display_lib/init.lua @@ -6,14 +6,59 @@ display_lib = {} -- Miscelaneous values depending on wallmounted param2 local wallmounted_values = { - [0]={dx=0, dz=0, lx=0, lz=0, yaw=0, rotate=0}, -- Should never be used - {dx=1, dz=0, lx=0, lz=0, yaw=0, rotate=1}, -- Should never be used - {dx=1, dz=0, lx=0, lz=-1, yaw=-math.pi/2, rotate=4}, - {dx=-1, dz=0, lx=0, lz=1, yaw=math.pi/2, rotate=5}, - {dx=0, dz=1, lx=1, lz=0, yaw=0, rotate=3}, - {dx=0, dz=-1, lx=-1, lz=0, yaw=math.pi, rotate=2} + [0]={dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, -- Should never be used + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=1}, -- Should never be used + {dx=-1, dz=0, rx=0, rz=-1, yaw=-math.pi/2, rotate=5}, + {dx=1, dz=0, rx=0, rz=1, yaw=math.pi/2, rotate=4}, + {dx=0, dz=-1, rx=1, rz=0, yaw=0, rotate=2}, + {dx=0, dz=1, rx=-1, rz=0, yaw=math.pi, rotate=3} } +-- Miscelaneous values depending on facedir param2 +local facedir_values = { + [0]={dx=0, dz=-1, rx=1, rz=0, yaw=0, rotate=1}, + {dx=-1, dz=0, rx=0, rz=-1, yaw=-math.pi/2, rotate=2}, + {dx=0, dz=1, rx=-1, rz=0, yaw=math.pi, rotate=3}, + {dx=1, dz=0, rx=0, rz=1, yaw=math.pi/2, rotate=0}, + -- Forbiden values : + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + {dx=0, dz=0, rx=0, rz=0, yaw=0, rotate=0}, + } + +-- dx/dy = depth vector, rx/ly = right vector, yaw = yaw of entity, +-- rotate = next facedir/wallmount on rotate + +local function get_values(node) + local ndef = minetest.registered_nodes[node.name] + + if ndef then + if ndef.paramtype2 == "wallmounted" then + return wallmounted_values[node.param2] + end + if ndef.paramtype2 == "facedir" then + return facedir_values[node.param2] + end + end +end + --- Gets the display entities attached with a node. Removes extra ones local function get_entities(pos) local objrefs = {} @@ -45,23 +90,24 @@ end local function place_entities(pos) local node = minetest.get_node(pos) local ndef = minetest.registered_nodes[node.name] - local values = wallmounted_values[node.param2] + local values = get_values(node) local objrefs = get_entities(pos) - if ndef and ndef.display_entities then + if values and ndef and ndef.display_entities then + for entity_name, props in pairs(ndef.display_entities) do local depth = clip_pos_prop(props.depth) - local top = clip_pos_prop(props.top) - local left = clip_pos_prop(props.left) + local height = clip_pos_prop(props.height) + local right = clip_pos_prop(props.right) if not objrefs[entity_name] then objrefs[entity_name] = minetest.add_entity(pos, entity_name) end objrefs[entity_name]:setpos({ - x = pos.x - values.dx * depth + values.lx * left, - y = pos.y + top, - z = pos.z - values.dz * depth + values.lz * left}) + x = pos.x - values.dx * depth + values.rx * right, + y = pos.y + height, + z = pos.z - values.dz * depth + values.rz * right}) objrefs[entity_name]:setyaw(values.yaw) end @@ -97,19 +143,26 @@ end --- On_place callback for display_lib items. Does nothing more than preventing item --- from being placed on ceiling or ground function display_lib.on_place(itemstack, placer, pointed_thing) + local ndef = minetest.registered_nodes[itemstack.name] local above = pointed_thing.above local under = pointed_thing.under local dir = {x = under.x - above.x, y = under.y - above.y, z = under.z - above.z} - local wdir = minetest.dir_to_wallmounted(dir) - if wdir == 0 or wdir == 1 then - dir = placer:get_look_dir() - dir.y = 0 - wdir = minetest.dir_to_wallmounted(dir) + if ndef and ndef.paramtype2 == "wallmounted" then + local wdir = minetest.dir_to_wallmounted(dir) + + if wdir == 0 or wdir == 1 then + dir = placer:get_look_dir() + dir.y = 0 + wdir = minetest.dir_to_wallmounted(dir) + end + + return minetest.item_place(itemstack, placer, pointed_thing, wdir) + else + return minetest.item_place(itemstack, placer, pointed_thing) end - return minetest.item_place(itemstack, placer, pointed_thing, wdir) end --- On_construct callback for display_lib items. Creates entities and update them. @@ -126,13 +179,14 @@ function display_lib.on_destruct(pos) end end - -- On_rotate (screwdriver) callback for display_lib items. Prevents axis rotation and reorients entities. function display_lib.on_rotate(pos, node, user, mode, new_param2) if mode ~= screwdriver.ROTATE_FACE then return false end - if wallmounted_values[node.param2] then - minetest.swap_node(pos, {name = node.name, param1 = node.param1, param2 = wallmounted_values[node.param2].rotate}) + local values = get_values(node) + + if values then + minetest.swap_node(pos, {name = node.name, param1 = node.param1, param2 = values.rotate}) place_entities(pos) return true else diff --git a/font_lib/API.md b/font_lib/API.md new file mode 100644 index 0000000..7ec499b --- /dev/null +++ b/font_lib/API.md @@ -0,0 +1,47 @@ +# Font Lib API +This document describes Font Lib API. Font Lib creates textures for font display on entities. + +## Provided methods +### get\_line\_width +**font\_lib.get\_line\_width(text)** + +Computes line width for a given font height and text +**text**: Text to be rendered + +**Returns**: rendered text width + +### make\_line\_texture +**font\_lib.make\_line\_texture(text, texturew, x, y)** + +Builds texture part for a text line + +**text**: Text to be rendered + +**texturew**: Width of the texture (extra text is not rendered) + +**x**: Starting x position in texture + +**y**: Vertical position of the line in texture + +**Returns**: Texture string + +### make\_multiline\_texture +**font\_lib.make\_multiline\_texture(text, texturew, textureh, maxlines, valign, color)** + +Builds texture for a multiline colored text + +**text**: Text to be rendered + +**texturew**: Width of the texture (extra text will be truncated) + +**textureh**: Height of the texture + +**maxlines**: Maximum number of lines + +**valign**: Vertical text align ("top" or "center") + +**color**: Color of the text + +**Returns**: Texture string + + diff --git a/font_lib/LICENSE.txt b/font_lib/LICENSE.txt new file mode 100644 index 0000000..bc06764 --- /dev/null +++ b/font_lib/LICENSE.txt @@ -0,0 +1,13 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + +Copyright (C) 2004 Sam Hocevar + +Everyone is permitted to copy and distribute verbatim or modified +copies of this license document, and changing it is allowed as long +as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/font_lib/README.md b/font_lib/README.md new file mode 100644 index 0000000..a297b93 --- /dev/null +++ b/font_lib/README.md @@ -0,0 +1,14 @@ +# Font Lib + +This library for font display on entities (to be used with display_lib for sign creation). + +**Dependancies**: default + +**License**: WTFPL + +(Font taken from VanessaE's homedecor/signs_lib) + +**API**: See API.md document please. + + + diff --git a/font_lib/depends.txt b/font_lib/depends.txt new file mode 100644 index 0000000..4ad96d5 --- /dev/null +++ b/font_lib/depends.txt @@ -0,0 +1 @@ +default diff --git a/font_lib/init.lua b/font_lib/init.lua new file mode 100644 index 0000000..3e5b8c7 --- /dev/null +++ b/font_lib/init.lua @@ -0,0 +1,139 @@ +-- Font lib mod by P.Y. Rollo +-- +-- License: WTFPL + +font_lib = {} +font_lib.path = minetest.get_modpath("font_lib") +font_lib.font_height = 10 +font_lib.font = {} + +-- Get png width, suposing png width is less than 256 (it is the case for all font textures) +local function get_png_width(filename) + local file=assert(io.open(filename,"rb")) + -- All font png are smaller than 256x256 --> read only last byte + file:seek("set",19) + local w = file:read(1) + file:close() + return w:byte() +end + +-- Computes line width for a given font height and text +-- @param text Text to be rendered +-- @return Rendered text width +function font_lib.get_line_width(text) + local char + local width = 0 + + for p=1,#text + do + char = text:sub(p,p):byte() + if font_lib.font[char] then + width = width + font_lib.font[char].width + end + end + + return width +end + +--- Builds texture part for a text line +-- @param text Text to be rendered +-- @param texturew Width of the texture (extra text is not rendered) +-- @param x Starting x position in texture +-- @param y Vertical position of the line in texture +-- @return Texture string +function font_lib.make_line_texture(text, texturew, x, y) + local char + + local texture = "" + + for p=1,#text + do + char = text:sub(p,p):byte() + if font_lib.font[char] then + -- Add image only if it is visible (at least partly) + if x + font_lib.font[char].width >= 0 and x <= texturew then + texture = texture..string.format(":%d,%d=%s", x, y, font_lib.font[char].filename) + end + x = x + font_lib.font[char].width + end + end + return texture +end + +local function split_lines(text, maxlines) + local splits = text:split("\n") + if maxlines then + local lines = {} + for num = 1,maxlines do + lines[num] = splits[num] + end + return lines + else + return splits + end +end + +--- Builds texture for a multiline colored text +-- @param text Text to be rendered +-- @param texturew Width of the texture (extra text will be truncated) +-- @param textureh Height of the texture +-- @param maxlines Maximum number of lines +-- @param valign Vertical text align ("top" or "center") +-- @param color Color of the text +-- @return Texture string +function font_lib.make_multiline_texture(text, texturew, textureh, maxlines, valign, color) + local texture = "" + local lines = split_lines(text, maxlines) + local y + + if valign == "top" then + y = font_lib.font_height / 2 + else + y = (textureh - font_lib.font_height * #lines) / 2 + 1 + end + + for _, line in pairs(lines) do + texture = texture..font_lib.make_line_texture(line, texturew, + (texturew - font_lib.get_line_width(line)) / 2, y) + y = y + font_lib.font_height + end + + texture = string.format("[combine:%dx%d", texturew, textureh)..texture + if color then texture = texture.."^[colorize:"..color end + + return texture +end + +--- Standard on_display_update entity callback. +-- Node should have a corresponding display_entity with size, resolution and maxlines fields and +-- optionally valign and color fields +-- @param pos Node position +-- @param objref Object reference of entity + +function font_lib.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 entity and ndef.display_entities[entity.name] then + local def = ndef.display_entities[entity.name] + + objref:set_properties({ + textures={font_lib.make_multiline_texture( + text, def.size.x*def.resolution.x, def.size.y*def.resolution.y, + def.maxlines, def.valign, def.color)}, + visual_size = def.size + }) + end +end + +-- Populate fonts table +local w, filename +for charnum=32,126 do + filename = string.format("font_lib_%02x.png", charnum) + w = get_png_width(font_lib.path.."/textures/"..filename) + font_lib.font[charnum] = {filename=filename, width=w} +end + diff --git a/font_lib/textures/font_lib_20.png b/font_lib/textures/font_lib_20.png new file mode 100644 index 0000000000000000000000000000000000000000..16579970ce97f974aa386c3746361dafe6bb15e5 GIT binary patch literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~2qYMGHym0F5=eLSb!1>{TVVKNT0D@?R1)MD z%)rPv?)FK#IZ0z|d6J&`{UNJjBqz%Glh>#8}(F(8|ETasHI` wC>nC}Q!>*kp&ATyjf_JKEv*bptqjey4UB*q6#rc^1!`dMboFyt=akR{06^?HasU7T literal 0 HcmV?d00001 diff --git a/signs/textures/signs_21.png b/font_lib/textures/font_lib_21.png similarity index 63% rename from signs/textures/signs_21.png rename to font_lib/textures/font_lib_21.png index b92710548e77e2c49144f3084b26ffc5ebfe237d..d457a6caec8acf804cfda5873ea5403c3a53969a 100644 GIT binary patch delta 31 ncmey!_>pnKd{HCw5JLkiV{pnKd{G0l5JLkiQzI*5Q*8r7D+7ZVrxkZ6Zm|Ubp^get diff --git a/signs/textures/signs_22.png b/font_lib/textures/font_lib_22.png similarity index 64% rename from signs/textures/signs_22.png rename to font_lib/textures/font_lib_22.png index fae71093b6dd20975f78ac41b890b638f69da910..7e571eae39b409515a677d89af784f951c177260 100644 GIT binary patch delta 31 ncmaFO_?mITOi?5A5JLkiV{aWQc)xG5JLkiV{aWQc(l55JLkiQzI*5Q*8r7D+7ZVrxkZ6?y>~{qn-+C diff --git a/signs/textures/signs_25.png b/font_lib/textures/font_lib_25.png similarity index 61% rename from signs/textures/signs_25.png rename to font_lib/textures/font_lib_25.png index 83737d37d1f5374db48a043ffa63e316b1dd8a06..671e8bdeb39a7731a491f0dee777f794f9850d5d 100644 GIT binary patch delta 31 ncmey)_?>aWQc)xG5JLkiV{aWQc(l55JLkiQzI*5Q*8r7D+7ZVrxkZ6?y>~{qn-+C diff --git a/signs/textures/signs_26.png b/font_lib/textures/font_lib_26.png similarity index 61% rename from signs/textures/signs_26.png rename to font_lib/textures/font_lib_26.png index 94357c41b80f4a6a91b717200842fe4b8514de66..93d5247eeb292a1dee84f914cbe90911616ccc63 100644 GIT binary patch delta 31 ncmeyy_>FPG5>X@b5JLkiV{FPG5>W%Q5JLkiQzI*5Q*8r7D+7ZVrxkZ6?z9B}qecp5 diff --git a/signs/textures/signs_27.png b/font_lib/textures/font_lib_27.png similarity index 63% rename from signs/textures/signs_27.png rename to font_lib/textures/font_lib_27.png index cd4426c422fad50df53b568fe141d55d47cfd3b4..b645159da633ce18df99ec9c8b2b753c5d773e53 100644 GIT binary patch delta 31 ncmaFI_>OVH98n|l5JLkiV{OVH98m+a5JLkiQzI*5Q*8r7D+7ZVrxkZ6ZnOmepoR)Y diff --git a/signs/textures/signs_28.png b/font_lib/textures/font_lib_28.png similarity index 62% rename from signs/textures/signs_28.png rename to font_lib/textures/font_lib_28.png index 66fd16ed9d3a11d69d03dcfa4514e9ef69a235e0..759e448b8597522fe82b0b1bf4ca6f69c4b94704 100644 GIT binary patch delta 31 ncmeyw_=$1C0#PIL5JLkiV{x! diff --git a/font_lib/textures/font_lib_29.png b/font_lib/textures/font_lib_29.png new file mode 100644 index 0000000000000000000000000000000000000000..316234fb8e449a73e6957b6bc0ec845b4f65c75a GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~2qYMGHym0F5=eLSb!1>{TVVKNT0D@?R1)MD z%)rPvgnPb!f`!WBf%iy#sLFH zE^~%TRtAGBEDzsz<%t3nsFt`!l%yn5D-&aF z14AnV1IPJO)}v_1%}>cptAuJW&^0m+F|@QYFtsu?(>5>yYEb-l$rPx8!PC{xWt~$( F696DcJCpzb literal 0 HcmV?d00001 diff --git a/signs/textures/signs_2a.png b/font_lib/textures/font_lib_2a.png similarity index 63% rename from signs/textures/signs_2a.png rename to font_lib/textures/font_lib_2a.png index 27bafea66ff8959630ce3e804ecb2dc68e2bb0c9..b32406d5fd0468a9fd25d62c12fae48b669533a4 100644 GIT binary patch delta 31 ncmaFI_>OVH98n|l5JLkiV{OVH98m+a5JLkiQzI*5Q*8r7D+7ZVrxkZ6ZnOmepoR)Y diff --git a/signs/textures/signs_2b.png b/font_lib/textures/font_lib_2b.png similarity index 63% rename from signs/textures/signs_2b.png rename to font_lib/textures/font_lib_2b.png index 28a8c7f6bf6ced902e47d960433d68fba12dd5f6..3987425462f595fe96f5cea8b9ff0b81ee8f3ef5 100644 GIT binary patch delta 31 ncmey!_>pnKd{HCw5JLkiV{pnKd{G0l5JLkiQzI*5Q*8r7D+7ZVrxkZ6Zm|Ubp^get diff --git a/font_lib/textures/font_lib_2c.png b/font_lib/textures/font_lib_2c.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e19199906e00b224d1881501924b0a55c293d8 GIT binary patch literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y=2qYLHV{YC8QY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqEggjjwLpZJ{R~%?);Bwf} zpvcJJ8^YF@_<;L0P*%0XHKHUXu_VKd7c7#dg^n_HO}Ya19^ z85lUupRyiBLvDUbW?CgwgMqG*afqR%m4T_1p_#UU5m1BTze}b-4Gf;HelF{r5}E*m CusaR_ literal 0 HcmV?d00001 diff --git a/signs/textures/signs_2d.png b/font_lib/textures/font_lib_2d.png similarity index 64% rename from signs/textures/signs_2d.png rename to font_lib/textures/font_lib_2d.png index b555ad6b02276b5e86d47137f497c92329cbf914..78005ed845629ded44b462238b93931d399e3613 100644 GIT binary patch delta 31 ncmaFM_?B_PY*8cg5JLkiV{zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqE1Uy|FLpZJ{R~%?);Bw$t z!ss`J-I3?a>nT7v)e_f;l9a@fRIB8oR3OD*WMF8jYiOuzWFBH@U}bD>Wn!#tU}$Av z;5dKEdK3-0`6-!cl~4@^x<zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqEBs^UlLpZJ{R~-D%^pH*9 z9m63mg+B*BFf#<0uwV4xm7WAtqgvt`QIe8al4_M)lnSI6j0_A-bqx)5jm$#~4XljK ztxSxy4GgUe3>@cAS&yP2H$NpatrDuiK-b7P#L&{pz|_jnOxwT+s6p}HB~zdV22WQ% Jmvv4FO#oYaJ=p*N literal 0 HcmV?d00001 diff --git a/signs/textures/signs_30.png b/font_lib/textures/font_lib_30.png similarity index 63% rename from signs/textures/signs_30.png rename to font_lib/textures/font_lib_30.png index 5a57af386dd4b24b0f580d5f4a2f36b75df2bb80..590252a7be4917de0158dc415b983d93a5aaa2bb 100644 GIT binary patch delta 31 ncmaFQ_?~gXTu~$Q5JLkiV{aWQc)xG5JLkiV{aWQc(l55JLkiQzI*5Q*8r7D+7ZVrxkZ6?y>~{qn-+C diff --git a/signs/textures/signs_33.png b/font_lib/textures/font_lib_33.png similarity index 61% rename from signs/textures/signs_33.png rename to font_lib/textures/font_lib_33.png index 0bbaf5958080db303bbe752411a3bf518d8aaf6e..14b9df8a790fd9ec957f6b2d7f9c8a9bc5609d54 100644 GIT binary patch delta 31 ncmeyy_>FPG5>X@b5JLkiV{FPG5>W%Q5JLkiQzI*5Q*8r7D+7ZVrxkZ6?z9B}qecp5 diff --git a/signs/textures/signs_34.png b/font_lib/textures/font_lib_34.png similarity index 61% rename from signs/textures/signs_34.png rename to font_lib/textures/font_lib_34.png index f6dfe63a68184c365ab1de01bd7f755364018edb..16056ab94e3a774394d8b6f54678342b23e3c2ac 100644 GIT binary patch delta 31 ncmey)_?>aWQc)xG5JLkiV{aWQc(l55JLkiQzI*5Q*8r7D+7ZVrxkZ6?y>~{qn-+C diff --git a/signs/textures/signs_35.png b/font_lib/textures/font_lib_35.png similarity index 61% rename from signs/textures/signs_35.png rename to font_lib/textures/font_lib_35.png index 71a98837b72e7236218df220fdc4e76f3b4cead0..a88c37e89d086c8c35ad3d4cfa8250fc7aee28ec 100644 GIT binary patch delta 31 ncmey)_?>aWQc)xG5JLkiV{aWQc(l55JLkiQzI*5Q*8r7D+7ZVrxkZ6?y>~{qn-+C diff --git a/signs/textures/signs_36.png b/font_lib/textures/font_lib_36.png similarity index 62% rename from signs/textures/signs_36.png rename to font_lib/textures/font_lib_36.png index 6553bed9aa20c6fff8c26ef82fd30b9175442a3b..30b07b71e9fc0b7ee67e7c853ab392fef2c4ce6a 100644 GIT binary patch delta 31 ncmeyu_=R!8B2gpr5JLkiV{x! diff --git a/signs/textures/signs_38.png b/font_lib/textures/font_lib_38.png similarity index 63% rename from signs/textures/signs_38.png rename to font_lib/textures/font_lib_38.png index 0933814d14b32fb60b5c48043978a7883a3d6b50..946a7b340ac71e8fe4040690e29f0f15c27daa07 100644 GIT binary patch delta 31 ncmeys_ delta 31 ncmeys_ delta 31 ncmeys_YG#_SQPjvh#L&RX*xbs*SlhtR%D}*J{*?6-kJ$nMins}( delta 31 mcmZo>YG#_SQPjXJ#L&RX)X2)%RNKJN%D^DTX~o@%$7}(K_z9c< diff --git a/signs/textures/signs_41.png b/font_lib/textures/font_lib_41.png similarity index 62% rename from signs/textures/signs_41.png rename to font_lib/textures/font_lib_41.png index 0d74cdb1c026ad8152499735198457346860dc07..546a5022da5c6dc1075db65065871957a5abb60f 100644 GIT binary patch delta 31 ncmey&_?dCSLQy005JLkiV{ delta 31 ncmeys_FPG5>X@b5JLkiV{FPG5>W%Q5JLkiQzI*5Q*8r7D+7ZVrxkZ6?z9B}qecp5 diff --git a/signs/textures/signs_44.png b/font_lib/textures/font_lib_44.png similarity index 62% rename from signs/textures/signs_44.png rename to font_lib/textures/font_lib_44.png index f2c4d0732575246b62c5ff541a01bebd6e87e498..025c1945495fa61a9c6f4ca29e5d0244748d3556 100644 GIT binary patch delta 31 ncmeyw_=$1C0#PIL5JLkiV{x! diff --git a/signs/textures/signs_45.png b/font_lib/textures/font_lib_45.png similarity index 63% rename from signs/textures/signs_45.png rename to font_lib/textures/font_lib_45.png index de77e413fbd79c1b476dc88c2914644667d13007..f1261f4d7694f28f80e55d4122e1fb7c4c328411 100644 GIT binary patch delta 31 ncmeys_ delta 31 ncmeys_pnKd{HCw5JLkiV{pnKd{G0l5JLkiQzI*5Q*8r7D+7ZVrxkZ6Zm|Ubp^get diff --git a/signs/textures/signs_47.png b/font_lib/textures/font_lib_47.png similarity index 61% rename from signs/textures/signs_47.png rename to font_lib/textures/font_lib_47.png index 30c6818972ea4c2871c639c3fcc502b312267817..faa775ba9664f9b23da3ee38ea2bd7980be42f36 100644 GIT binary patch delta 31 ncmey)_?>aWQc)xG5JLkiV{aWQc(l55JLkiQzI*5Q*8r7D+7ZVrxkZ6?y>~{qn-+C diff --git a/signs/textures/signs_48.png b/font_lib/textures/font_lib_48.png similarity index 63% rename from signs/textures/signs_48.png rename to font_lib/textures/font_lib_48.png index e49cee4c30c67142d6061d023c2932f4ef7fae31..d6ead061ee7d00a26185f822da1a25ec1de5dd93 100644 GIT binary patch delta 31 ncmeys_ delta 31 ncmeys_ delta 31 ncmeys_FPG5>X@b5JLkiV{FPG5>W%Q5JLkiQzI*5Q*8r7D+7ZVrxkZ6?z9B}qecp5 diff --git a/signs/textures/signs_4c.png b/font_lib/textures/font_lib_4c.png similarity index 63% rename from signs/textures/signs_4c.png rename to font_lib/textures/font_lib_4c.png index 99af40d980399a7d4ecbf49192bfd4c4ccdb87e1..3121f90d4c23a61d062d690c0cb2148873c6e469 100644 GIT binary patch delta 31 ncmaFI_>OVH98n|l5JLkiV{OVH98m+a5JLkiQzI*5Q*8r7D+7ZVrxkZ6ZnOmepoR)Y diff --git a/signs/textures/signs_4d.png b/font_lib/textures/font_lib_4d.png similarity index 61% rename from signs/textures/signs_4d.png rename to font_lib/textures/font_lib_4d.png index 14648ed30901a4dbbcb4ec85dbd8260840e70d14..361bc510ef264e722ef0f4ce18de19869c8955fc 100644 GIT binary patch delta 31 ncmey#_>*zMa#17m5JLkiV{r49;r delta 31 ncmey#_>*zMa!~`b5JLkiQzI*5Q*8r7D+7ZVrxkZ6?y&^`q)rNQ diff --git a/signs/textures/signs_4e.png b/font_lib/textures/font_lib_4e.png similarity index 62% rename from signs/textures/signs_4e.png rename to font_lib/textures/font_lib_4e.png index 57abfbb10bd062d269b7ec2cd47c9dc1df73f35d..ea95311d8142fd12eca27129a889f0b08be91c2a 100644 GIT binary patch delta 31 ncmey&_?dCSLQy005JLkiV{zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqE#64XcLpZJ{TbwhPc~FQ; z-B>35$N3NP4EhGF(*+mb7X>O&Epd$~Nl7e8wMs5Z1yT$~28O1(hK9OE<{^d#R>tO5 zCdS$ZhE@g!j`OFiN70a*pOTqY3DsbrYh)Z^XlZ3&YGr7qZD0h{p!n~SDNqB0r>mdK II;Vst08YX@BLDyZ literal 0 HcmV?d00001 diff --git a/signs/textures/signs_50.png b/font_lib/textures/font_lib_50.png similarity index 63% rename from signs/textures/signs_50.png rename to font_lib/textures/font_lib_50.png index fba27a0a7c3bd7a82fbbe1b09e4953eac3f590dd..53c4a4ab2ca351fdb1e95956cfdf295bbfa23985 100644 GIT binary patch delta 31 ncmey!_>pnKd{HCw5JLkiV{pnKd{G0l5JLkiQzI*5Q*8r7D+7ZVrxkZ6Zm|Ubp^get diff --git a/signs/textures/signs_51.png b/font_lib/textures/font_lib_51.png similarity index 62% rename from signs/textures/signs_51.png rename to font_lib/textures/font_lib_51.png index 081e272fc04cf9914edd44b141d77561033e44fa..c0f013f15365b89576b0e1f2c9277ec530ab383b 100644 GIT binary patch delta 31 ncmeyu_=R!8B2gpr5JLkiV{OVH98n|l5JLkiV{OVH98m+a5JLkiQzI*5Q*8r7D+7ZVrxkZ6ZnOmepoR)Y diff --git a/signs/textures/signs_53.png b/font_lib/textures/font_lib_53.png similarity index 61% rename from signs/textures/signs_53.png rename to font_lib/textures/font_lib_53.png index 7e1bbe0d2a56cc75063d7a7a03169969400442f5..aa308d22125942611e1526930c3679555bb6d3e0 100644 GIT binary patch delta 31 ncmey)_?>aWQc)xG5JLkiV{aWQc(l55JLkiQzI*5Q*8r7D+7ZVrxkZ6?y>~{qn-+C diff --git a/signs/textures/signs_54.png b/font_lib/textures/font_lib_54.png similarity index 64% rename from signs/textures/signs_54.png rename to font_lib/textures/font_lib_54.png index f50a8b875bda4ac611e6c5de65b84498f1186d2e..7e7b90dc9e6064d79fe55c12cfbf11af4df40907 100644 GIT binary patch delta 31 ncmaFM_?B_PY*8cg5JLkiV{OVH98n|l5JLkiV{OVH98m+a5JLkiQzI*5Q*8r7D+7ZVrxkZ6ZnOmepoR)Y diff --git a/signs/textures/signs_56.png b/font_lib/textures/font_lib_56.png similarity index 62% rename from signs/textures/signs_56.png rename to font_lib/textures/font_lib_56.png index c8a55c439250a8adbcd03610d707bcf491a39e9c..a676acf280bb39cdb424712b809cf0e5d780afe8 100644 GIT binary patch delta 31 ncmey&_?dCSLQy005JLkiV{FPG5>X@b5JLkiV{FPG5>W%Q5JLkiQzI*5Q*8r7D+7ZVrxkZ6?z9B}qecp5 diff --git a/signs/textures/signs_58.png b/font_lib/textures/font_lib_58.png similarity index 62% rename from signs/textures/signs_58.png rename to font_lib/textures/font_lib_58.png index 1175a0e48fd905ff7d35b19566a08adbdf13d2c7..6ac74493a422359576417013d5401b498ef68b49 100644 GIT binary patch delta 31 ncmey$_?2OVH98n|l5JLkiV{OVH98m+a5JLkiQzI*5Q*8r7D+7ZVrxkZ6ZnOmepoR)Y diff --git a/font_lib/textures/font_lib_5f.png b/font_lib/textures/font_lib_5f.png new file mode 100644 index 0000000000000000000000000000000000000000..74e8ea955c47974297db76c846de5496b4c706b1 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)L2qYK+wpT6yQY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqEcs*SlLpZJ{|2W>jHx6jjo5~?Mx5hW>!C8<`)MX5lF!N|bSRM*f@*T_7?(7?*r+{(mQ+rZGuz`$|- yl=UbYa`RI%(<-4F40Mf*Lkumg3{0&I&9n`SfEpD4T`~n~VDNPHb6Mw<&;$U>96HMY literal 0 HcmV?d00001 diff --git a/signs/textures/signs_60.png b/font_lib/textures/font_lib_60.png similarity index 64% rename from signs/textures/signs_60.png rename to font_lib/textures/font_lib_60.png index cd2b1efb6b3732ec8d6e5c9de0a62323263917f0..198597308b96d6b7e5726c18d430fdef6b778d29 100644 GIT binary patch delta 31 ncmaFG_=<7D3{fNV5JLkiV{x! diff --git a/signs/textures/signs_63.png b/font_lib/textures/font_lib_63.png similarity index 62% rename from signs/textures/signs_63.png rename to font_lib/textures/font_lib_63.png index 6d46292f05a91e63bf475da8048ceea79e3ab11b..ab5afa5d9756a943c44cdaf20cc3a6bcfe8dc032 100644 GIT binary patch delta 31 ncmeyu_=R!8B2gpr5JLkiV{zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqE#64XcLpZJ{R~-7#var>W zl`C4}pTQqS1``(6$VJPKMFW+nmbgZgq$HN4S|t~y0x1R~14C0?LqlC7^AJM=D`Rsj z6Ju=yLn{LV$N5v%qiD#@PsvQHglaI*H8Kt{w6roXwK6o*HZTHeQ2ckv6sUp0)78&q Iol`;+0Nvp|82|tP literal 0 HcmV?d00001 diff --git a/signs/textures/signs_65.png b/font_lib/textures/font_lib_65.png similarity index 62% rename from signs/textures/signs_65.png rename to font_lib/textures/font_lib_65.png index 8644032ee19ceb959ec6b52d1e910972e394f40c..b9ed9a23efa2804efc702674b1051e0b3d2fd153 100644 GIT binary patch delta 31 ncmey$_?2 delta 31 ncmeys_zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqE#64XcLpZJ{|2X`iJ&~)K zOJtjYP2vki2J<% ziLthUp_PGwQ8eV{r(~v8LNyrZ8X1QeT3Q*HS{a&Y8yEpKDE_--3e>>h>FVdQ I&MBb@0F)OzW&i*H literal 0 HcmV?d00001 diff --git a/signs/textures/signs_68.png b/font_lib/textures/font_lib_68.png similarity index 63% rename from signs/textures/signs_68.png rename to font_lib/textures/font_lib_68.png index 6b936aa5c242bbf8d14f2f1b64d0a4f27f1eb6bd..a3fff5516229ba05b7a5eddff135704c82ee123a 100644 GIT binary patch delta 31 ncmeys_ delta 31 ncmeys_FPG5>X@b5JLkiV{FPG5>W%Q5JLkiQzI*5Q*8r7D+7ZVrxkZ6?z9B}qecp5 diff --git a/signs/textures/signs_6c.png b/font_lib/textures/font_lib_6c.png similarity index 64% rename from signs/textures/signs_6c.png rename to font_lib/textures/font_lib_6c.png index 534500b86473f67c7d06fcd828f939e90e4ef2c3..1d798593ace970975510c2b46703092ac7d77955 100644 GIT binary patch delta 31 ncmaFE_=a)9EKwu#5JLkiV{pnKd{HCw5JLkiV{pnKd{G0l5JLkiQzI*5Q*8r7D+7ZVrxkZ6Zm|Ubp^get diff --git a/signs/textures/signs_6e.png b/font_lib/textures/font_lib_6e.png similarity index 63% rename from signs/textures/signs_6e.png rename to font_lib/textures/font_lib_6e.png index 10930a1a6e2b4d9b34fc5ec840550ec0c096a0dc..48262ba672ce3e7998e9f148d3e85b01e6124f96 100644 GIT binary patch delta 31 ncmaFQ_?~gXTu~$Q5JLkiV{zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqEL_J*`LpZJ{|2X`iePO#J zD_3>H9(x807S@@{g5T1C3RFv6BT7;dOH!?pi&B9UgOP!usji`+u910&p@EgLxs{2r zwt=CQfq~=vDeF-*x! diff --git a/font_lib/textures/font_lib_71.png b/font_lib/textures/font_lib_71.png new file mode 100644 index 0000000000000000000000000000000000000000..6398974e46d6e1e5b8a3fb20a499f5b604018e3c GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ#2qYNxmkP}TQY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqE#64XcLpZJ{|2X`iJ&~)K zOJtjYO=1NTgZUTMOolb-sz4>GC9V-ADTyViR>?)FK#IZ0z|d6J&`{UNJjBqz%Glh> z#8}(F(8|ETasHI`C>nC}Q!>*kp&ATyjf_JKEv*bptqjey4UB*q6#rc^1!`dMboFyt I=akR{0FZk;V*mgE literal 0 HcmV?d00001 diff --git a/font_lib/textures/font_lib_72.png b/font_lib/textures/font_lib_72.png new file mode 100644 index 0000000000000000000000000000000000000000..f72b1bba3a819d45391f2eda37e19fb65731cfcd GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g2qYLnoL0^SQY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqEL_J*`LpZJ{|2X)e`CzkS z(?KS##u^4=7goh!p`ccv0@V`Nh?11Vl2ohYqEsNoU}Ruus%vPdYh)f`XkcY*Ze?Pu zZD43+VBk1^%6b$Hx%nxXX_Zh72D(PZA%>P#2BubqX4(cuKn;rjE|~%~FnGH9xvXx! diff --git a/signs/textures/signs_74.png b/font_lib/textures/font_lib_74.png similarity index 62% rename from signs/textures/signs_74.png rename to font_lib/textures/font_lib_74.png index 079e2f1c007814c121de798d41709d6a56d85c6b..7e6c1e7b8dd5b7f719fee577fe6fd416b0eefed5 100644 GIT binary patch delta 31 ncmey&_?dCSLQy005JLkiV{ delta 31 ncmeys_zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqEL_J*`LpZJ{|2X`i-I0|m zTH+kTLm38>JFJf7v1d*I6{wcDMwFx^mZVxG7o`Fz1|tJQQ(Z$tT_f`lLjx;gb1M^L zZ39Cq0|UqTQ`Vzs$jwj5Osj-yFwiwJ4l%T}GBC9=G}AUP0%}nFcgYl}fx*+&&t;uc GLK6Ujpghw6 literal 0 HcmV?d00001 diff --git a/signs/textures/signs_7a.png b/font_lib/textures/font_lib_7a.png similarity index 61% rename from signs/textures/signs_7a.png rename to font_lib/textures/font_lib_7a.png index 43a1f05ac5a1fd0dca4c6bcf217733646ca5ea0e..828e07039430ce8f3be877472858ec7d9a95bb44 100644 GIT binary patch delta 31 ncmeyy_>FPG5>X@b5JLkiV{FPG5>W%Q5JLkiQzI*5Q*8r7D+7ZVrxkZ6?z9B}qecp5 diff --git a/signs/textures/signs_7b.png b/font_lib/textures/font_lib_7b.png similarity index 63% rename from signs/textures/signs_7b.png rename to font_lib/textures/font_lib_7b.png index 08c27a1141ce709a1f55efed8ea6cb13dd002dda..9dd9dc8ee9fa428924f49114385a8a945544cd01 100644 GIT binary patch delta 31 ncmaFQ_?~gXTu~$Q5JLkiV{vnTHq}SQ(pJnHXyu7+M(^IL@E4 w9z{cLeoAIqB~*ifu90zwp{139sgzopr0Hr!N?f?J) literal 0 HcmV?d00001 diff --git a/signs/textures/signs_7d.png b/font_lib/textures/font_lib_7d.png similarity index 63% rename from signs/textures/signs_7d.png rename to font_lib/textures/font_lib_7d.png index 52a64afe2b70a5c35d28a7df6e604054672c11b3..d206d7437f76f9bc4c1f430a8db7cc148dec664a 100644 GIT binary patch delta 31 ncmaFQ_?~gXTu~$Q5JLkiV{ read only last byte - file:seek("set",19) - local w = file:read(1) - file:close() - return w:byte() -end - --- Computes line width for a given font height and text -function signs.get_line_width(text) - local char - local width = 0 - - for p=1,#text - do - char = text:sub(p,p):byte() - if font[char] then - width = width + font[char].width - end - end - - return width -end - ---- Builds texture part for a text line --- @param text Text to be rendered --- @param x Starting x position in texture --- @param width Width of the texture (extra text is not rendered) --- @param y Vertical position of the line in texture --- @return Texture string -function signs.make_line_texture(text, x, width, y) - local char - - local texture = "" - - for p=1,#text - do - char = text:sub(p,p):byte() - if font[char] then - -- Add image only if it is visible (at least partly) - if x + font[char].width >= 0 and x <= width then - texture = texture..string.format(":%d,%d=%s", x, y, font[char].filename) - end - x = x + font[char].width - end - end - return texture -end - -local function split_lines(text, maxlines) - local splits = text:split("\n") - if maxlines then - local lines = {} - for num = 1,maxlines do - lines[num] = splits[num] - end - return lines - else - return splits - end -end - -function signs.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] - if ndef and ndef.sign_model then - local model = signs.sign_models[ndef.sign_model] - local lines = split_lines(text, model.maxlines) - - local texturew = model.width/model.xscale - local textureh = model.height/model.yscale - - local texture = "" - - local y - if model.valing == "top" then - y = signs.font_height / 2 - else - y = (textureh - signs.font_height * #lines) / 2 + 1 - end - - for _, line in pairs(lines) do - texture = texture..signs.make_line_texture(line, - (texturew - signs.get_line_width(line)) / 2, - texturew, y) - y = y + signs.font_height - end - - local texture = string.format("[combine:%dx%d", texturew, textureh)..texture - if model.color then texture = texture.."^[colorize:"..model.color end - - objref:set_properties({ textures={texture}, visual_size = {x=model.width, y=model.height}}) - end -end - function signs.set_formspec(pos) local meta = minetest.get_meta(pos) local ndef = minetest.registered_nodes[minetest.get_node(pos).name] - if ndef and ndef.sign_model then - local model = signs.sign_models[ndef.sign_model] + if ndef and ndef.display_entities and ndef.display_entities["signs:text"] then + local maxlines = ndef.display_entities["signs:text"].maxlines local formspec - if model.maxlines == 1 then + if maxlines == 1 then formspec = "size[6,3]".. "field[0.5,0.7;5.5,1;display_text;Displayed text;${display_text}]".. "button_exit[2,2;2,1;ok;Write]" else local extralabel = "" - if model.maxlines then - extralabel = " (first "..model.maxlines.." lines only)" + if maxlines then + extralabel = " (first "..maxlines.." lines only)" end formspec = "size[6,4]".. @@ -192,14 +90,6 @@ function signs.on_rotate_direction(pos, node, user, mode, new_param2) end end --- Populate fonts table -local w, filename -for charnum=32,126 do - filename = string.format("signs_%02x.png", charnum) - w = get_png_width(signs.path.."/textures/"..filename) - font[charnum] = {filename=filename, width=w} -end - -- Generic callback for show_formspec displayed formspecs minetest.register_on_player_receive_fields(function(player, formname, fields) local found, _, mod, node_name, pos = formname:find("([%w_]+):([%w_]+)@(.+)") @@ -214,3 +104,56 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) end end end) + +function signs.register_sign(mod, name, model) + -- Default fields + local fields = { + sunlight_propagates = true, + paramtype = "light", + paramtype2 = "wallmounted", + drawtype = "nodebox", + node_box = { + type = "wallmounted", + wall_side = {-0.5, -model.height/2, -model.width/2, + -0.5 + model.depth, model.height/2, model.width/2}, + wall_bottom = {-model.width/2, -0.5, -model.height/2, + model.width/2, -0.5 + model.depth, model.height/2}, + wall_top = {-model.width/2, 0.5, -model.height/2, + model.width/2, 0.5 - model.depth, model.height/2}, + }, + groups = {choppy=2,dig_immediate=2,attached_node=1}, + sounds = default.node_sound_defaults(), + display_entities = { + ["signs:text"] = { + on_display_update = font_lib.on_display_update, + depth = 0.499 - model.depth, + size = { x = 1, y = 1 }, + resolution = { x = 64, y = 64 }, + maxlines = 1, + }, + + }, + on_place = display_lib.on_place, + on_construct = function(pos) + signs.set_formspec(pos) + display_lib.on_construct(pos) + end, + on_destruct = display_lib.on_destruct, + on_rotate = display_lib.on_rotate, + on_receive_fields = signs.on_receive_fields, + } + + -- Node fields override + for key, value in pairs(model.node_fields) do + fields[key] = value + end + + if not fields.wield_image then fields.wield_image = fields.inventory_image end + + -- Entity fields override + for key, value in pairs(model.entity_fields) do + fields.display_entities["signs:text"][key] = value + end + + minetest.register_node(mod..":"..name, fields) +end diff --git a/signs/crafts.lua b/signs/crafts.lua index 16b873d..2d90e52 100644 --- a/signs/crafts.lua +++ b/signs/crafts.lua @@ -1,21 +1,3 @@ -minetest.register_craft({ - output = 'signs:blue_street', - recipe = { - {'dye:blue', 'dye:white', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'', '', ''}, - } -}) - -minetest.register_craft({ - output = 'signs:green_street', - recipe = { - {'dye:green', 'dye:white', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:steel_ingot', 'default:steel_ingot'}, - {'', '', ''}, - } -}) - minetest.register_craft({ output = 'signs:wooden_right', recipe = { @@ -25,15 +7,6 @@ minetest.register_craft({ } }) -minetest.register_craft({ - output = 'signs:black_right', - recipe = { - {'dye:black', 'dye:white', 'default:steel_ingot'}, - {'default:steel_ingot', 'default:steel_ingot', ''}, - {'', '', ''}, - } -}) - minetest.register_craft({ output = 'signs:poster', recipe = { diff --git a/signs/depends.txt b/signs/depends.txt index c1feb90..a5e20d4 100644 --- a/signs/depends.txt +++ b/signs/depends.txt @@ -1,3 +1,3 @@ default display_lib - +font_lib diff --git a/signs/font.lua b/signs/font.lua deleted file mode 100644 index 2da6611..0000000 --- a/signs/font.lua +++ /dev/null @@ -1,63 +0,0 @@ - -local font = {} -signs.font_height = 10 - --- Get png width, suposing png width is less than 256 (it is the case for all font textures) -local function get_png_width(filename) - local file=assert(io.open(filename,"rb")) - -- All font png are smaller than 256x256 --> read only last byte - file:seek("set",19) - local w = file:read(1) - file:close() - return w:byte() -end - --- Computes line width for a given font height and text -function signs.get_line_width(text) - local char - local width = 0 - - for p=1,#text - do - char = text:sub(p,p):byte() - if font[char] then - width = width + font[char].width - end - end - - return width -end - ---- Builds texture part for a text line --- @param text Text to be rendered --- @param x Starting x position in texture --- @param width Width of the texture (extra text is not rendered) --- @param y Vertical position of the line in texture --- @return Texture string -function signs.make_line_texture(text, x, width, y) - local char - - local texture = "" - - for p=1,#text - do - char = text:sub(p,p):byte() - if font[char] then - -- Add image only if it is visible (at least partly) - if x + font[char].width >= 0 and x <= width then - texture = texture..string.format(":%d,%d=%s", x, y, font[char].filename) - end - x = x + font[char].width - end - end - return texture -end - --- Populate fonts table -local w, filename -for charnum=32,126 do - filename = string.format("signs_%02x.png", charnum) - w = get_png_width(signs.path.."/textures/"..filename) - font[charnum] = {filename=filename, width=w} -end - diff --git a/signs/nodes.lua b/signs/nodes.lua index 77d8925..0c23c5e 100644 --- a/signs/nodes.lua +++ b/signs/nodes.lua @@ -39,44 +39,21 @@ local function on_receive_fields_poster(pos, formname, fields, player) end end -signs.sign_models = { - blue_street={ - depth=1/16, - width=14/16, - height=12/16, - color="#fff", - maxlines = 3, - xscale = 1/144, - yscale = 1/64, - fields = { - description="Blue street sign", - tiles={"signs_blue_street.png"}, - inventory_image="signs_blue_street_inventory.png", - }, - }, - green_street={ - depth=1/32, - width=1, - height=6/16, - color="#fff", - maxlines = 1, - xscale = 1/96, - yscale = 1/64, - fields = { - description="Green street sign", - tiles={"signs_green_street.png"}, - inventory_image="signs_green_street_inventory.png", - }, - }, +-- Text entity for all signs +display_lib.register_display_entity("signs:text") + +-- Sign models and registration +local models = { wooden_right={ depth=1/16, - width=14/16, - height=7/16, - color="#000", - maxlines = 2, - xscale = 1/112, - yscale = 1/64, - fields = { + width = 14/16, + height = 7/16, + entity_fields = { + resolution = { x = 112, y = 64 }, + maxlines = 2, + color="#000", + }, + node_fields = { description="Wooden direction sign", tiles={"signs_wooden_right.png"}, inventory_image="signs_wooden_inventory.png", @@ -87,13 +64,14 @@ signs.sign_models = { }, wooden_left={ depth=1/16, - width=14/16, - height=7/16, - color="#000", - maxlines = 2, - xscale = 1/112, - yscale = 1/64, - fields = { + width = 14/16, + height = 7/16, + entity_fields = { + resolution = { x = 112, y = 64 }, + maxlines = 2, + color="#000", + }, + node_fields = { description="Wooden direction sign", tiles={"signs_wooden_left.png"}, inventory_image="signs_wooden_inventory.png", @@ -103,50 +81,17 @@ signs.sign_models = { on_rotate=signs.on_rotate_direction, }, }, - black_right={ - depth=1/32, - width=1, - height=0.5, - color="#000", - maxlines = 1, - xscale = 1/96, - yscale = 1/64, - fields = { - description="Black direction sign", - tiles={"signs_black_right.png"}, - inventory_image="signs_black_inventory.png", - on_place=signs.on_place_direction, - on_rotate=signs.on_rotate_direction, - }, - }, - black_left={ - depth=1/32, - width=1, - height=0.5, - color="#000", - maxlines = 1, - xscale = 1/96, - yscale = 1/64, - fields = { - description="Black direction sign", - tiles={"signs_black_left.png"}, - inventory_image="signs_black_inventory.png", - groups={choppy=1,oddly_breakable_by_hand=1,not_in_creative_inventory=1}, - drop="signs:black_right", - on_place=signs.on_place_direction, - on_rotate=signs.on_rotate_direction, - }, - }, poster={ depth=1/32, - width=26/32, - height=30/32, - color="#000", - valing="top", - maxlines = 1, - xscale = 1/144, - yscale = 1/64, - fields = { + width = 26/32, + height = 30/32, + entity_fields = { + resolution = { x = 144, y = 64 }, + maxlines = 1, + color="#000", + valign="top", + }, + node_fields = { description="Poster", tiles={"signs_poster.png"}, inventory_image="signs_poster_inventory.png", @@ -157,47 +102,27 @@ signs.sign_models = { }, } -display_lib.register_display_entity("signs:text") -for model_name, model in pairs(signs.sign_models) +for name, model in pairs(models) do - local fields = { - sunlight_propagates = true, - paramtype = "light", - paramtype2 = "wallmounted", - drawtype = "nodebox", - node_box = { - type = "wallmounted", - wall_side = {-0.5, -model.height/2, -model.width/2, - -0.5 + model.depth, model.height/2, model.width/2}, - wall_bottom = {-model.width/2, -0.5, -model.height/2, - model.width/2, -0.5 + model.depth, model.height/2}, - wall_top = {-model.width/2, 0.5, -model.height/2, - model.width/2, 0.5 - model.depth, model.height/2}, - }, - groups = {choppy=1,oddly_breakable_by_hand=1}, - sign_model = model_name, - display_entities = { - ["signs:text"] = { - depth = model.depth-0.499, - on_display_update = signs.on_display_update }, - }, - on_place = display_lib.on_place, - on_construct = function(pos) - signs.set_formspec(pos) - display_lib.on_construct(pos) - end, - on_destruct = display_lib.on_destruct, - on_rotate = display_lib.on_rotate, - on_receive_fields = signs.on_receive_fields, - } - - for key, value in pairs(model.fields) do - fields[key] = value - end - - if not fields.wield_image then fields.wield_image = fields.inventory_image end - - minetest.register_node("signs:"..model_name, fields) + signs.register_sign("signs", name, model) end +-- Override default sign +signs.register_sign(":default", "sign_wall", { + depth = 1/16, + width = 14/16, + height = 10/16, + entity_fields = { + size = { x = 12/16, y = 8/16 }, + resolution = { x = 144, y = 64 }, + maxlines = 3, + color="#000", + }, + node_fields = { + description="Sign", + tiles={"signs_default.png"}, + inventory_image="signs_default_inventory.png", + }, + }) + diff --git a/signs/textures/signs_20.png b/signs/textures/signs_20.png deleted file mode 100644 index 43df9d1d944ea9b6a38fa410989297acc855b174..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~2qYMGHym0F5=eLSb!1>{TVVKNT0D@?R1)MD z%)rPv?)FK#IZ0z|d6J&`{UFEX2^j%GAip*i_rV(8|Cd#%aY} w6b-rgDVb@NPz?sUM#dqAmR1I)R)%KU21Y;)ivKQ|0yQvry85}Sb4q9e06z*jZ2$lO diff --git a/signs/textures/signs_29.png b/signs/textures/signs_29.png deleted file mode 100644 index 324d1d2c0f0e7e4ebf8251cd204cf88e65fde0e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^EI`b~2qYMGHym0F5=eLSb!1>{TVVKNT0D@?R1)MD z%)rPvgnPb!f`!WBf%iy#sLFH zE^~%TRtAGBEDzsz<%t3nsFt`!l%yn;H7NeOWD3;4;OXk;vd$@? F2>>2uJC6VW diff --git a/signs/textures/signs_2c.png b/signs/textures/signs_2c.png deleted file mode 100644 index 16bf1e43cbad10ba792a3ced3d9e6ba9241349bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y=2qYLHV{YC8QY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqEggjjwLpZJ{R~%?);Bwf} zpvcJJ8^YF@_<;L0P*%0XHKHUXu_VKd4Z7#dia8d({eY8x0@ z85qPkt+%D~jh&`jIF2&h5v-z8I^1_n=8KbLh*2~7Zj C&N~SJ diff --git a/signs/textures/signs_2e.png b/signs/textures/signs_2e.png deleted file mode 100644 index cdfa677caa3feaf7f36a841fccbfc1051cf3a650..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y=2qYLHV{YC8QY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqE1Uy|FLpZJ{R~%?);Bw$t z!ss`J-I3?a>nT7v)e_f;l9a@fRIB8oR3OD*WMF8jYiOuzU>0I%U}b7#Wo)W#U}$Av z5aYDsE{cZS{FKbJN~i_{T_fWVLrW_IQ!7I=Z382q2E~7uOo190JYD@<);T3K0RRbU BI(z^C diff --git a/signs/textures/signs_2f.png b/signs/textures/signs_2f.png deleted file mode 100644 index e76fdf4956bfa701864100c5a4bb97e07ff7917f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g2qYLnoL0^SQY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqEBs^UlLpZJ{R~-D%^pH*9 z9m63mg+B*BFf#<0uwV4xm7WAtqgvt`QIe8al4_M)lnSI6j0_A-bqx)54a`Ce4XjL! ztc*>y4GgUe3}T#C+(prlo1c=IRteQ$plf6tVrXe)U}|M(rfpyZ)S&q9k||IFgQu&X J%Q~loCIDHPJ=6dI diff --git a/signs/textures/signs_4f.png b/signs/textures/signs_4f.png deleted file mode 100644 index 06e0c8de054eeedabfc9afd4e4f8f58bac53d87c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^96-#)2qYL5?orYOQY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqE#64XcLpZJ{TbwhPc~FQ; z-B>35$N3NP4EhGF(*+mb7X>O&Epd$~Nl7e8wMs5Z1yT$~28O1(hK9NZW+8?KR;ET) z#-`c^hE@g!F-|M)qG-s?PsvQHglaI*H8Kt{w6roXwK6o*HZTHeQ2ckv6sUp0)78&q Iol`;+08HRK9smFU diff --git a/signs/textures/signs_5f.png b/signs/textures/signs_5f.png deleted file mode 100644 index e7a4d90b140d6873b9387585f5746300affcdbfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)L2qYK+wpT6yQY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqEcs*SlLpZJ{|2W>jHx6jjo5~?Mx5hW>!C8<`)MX5lF!N|bSRM*f@*T5{q(7?*n$jaDM+rZGuz#ztH y#a$E)x%nxXX_Zh72D(PZA%>P#2BubqX4(cuKn;rjE|~%~FnGH9xvXzyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqE#64XcLpZJ{R~-7#var>W zl`C4}pTQqS1``(6$VJPKMFW+nmbgZgq$HN4S|t~y0x1R~14C0?LqlByvk*fAD^nvY zV^eJdLn{M=7^f9?Q8eV{r(~v8LNyrZ8X1QeT3Q*HS{a&Y8yEpKDE_--3e>>h>FVdQ I&MBb@0NejP6aWAK diff --git a/signs/textures/signs_67.png b/signs/textures/signs_67.png deleted file mode 100644 index 990e8e3f8b610320dc8e9b08e1ff74e40423bc2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ#2qYNxmkP}TQY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqE#64XcLpZJ{|2X`iJ&~)K zOJtjYP2vki2J<nC}Q!>*kp&ATyjf_JKEv*bptqjey4UB*q6#rc^1!`dMboFyt I=akR{0FpI4VE_OC diff --git a/signs/textures/signs_6f.png b/signs/textures/signs_6f.png deleted file mode 100644 index f4aef647de4e4675b63da01004f22825d4dea21e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ#2qYNxmkP}TQY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqEL_J*`LpZJ{|2X`iePO#J zD_3>H9(x807S@@{g5T1C3RFv6BT7;dOH!?pi&B9UgOP!usji`+u7O#Ip@EgDk(IHj zwt=CQfkBMZin}Npa`RI%(<-4F40Mf*Lkumg3{0&I&9n`SfEpD4T`~n~VDNPHb6Mw< G&;$Timpoel diff --git a/signs/textures/signs_71.png b/signs/textures/signs_71.png deleted file mode 100644 index cc319726e649b8b57834b625fa36a397c1d6f9e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ#2qYNxmkP}TQY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqE#64XcLpZJ{|2X`iJ&~)K zOJtjYO=1NTgZUTMOolb-sz4>GC9V-ADTyViR>?)FK#IZ0z|d6J&`{UFEX2^j%GAip z*i_rV(8|Cd#%aY}6b-rgDVb@NPz?sUM#dqAmR1I)R)%KU21Y;)ivKQ|0yQvry85}S Ib4q9e0FIeFUH||9 diff --git a/signs/textures/signs_72.png b/signs/textures/signs_72.png deleted file mode 100644 index d8dbcee1083342a65961bff1aea3e130d7a93d4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^tU%1g2qYLnoL0^SQY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqEL_J*`LpZJ{|2X)e`CzkS z(?KS##u^4=7goh!p`ccv0@V`Nh?11Vl2ohYqEsNoU}Ruus%vPdYhV^)XkcY(WMyos zZD43+U=ZW9;x3AY-29Zxv`VN316?EI5JO8V15+zQGi?JSpa#W%mrQ{g7(8A5T-G@y GGywoUJ3Ji# diff --git a/signs/textures/signs_79.png b/signs/textures/signs_79.png deleted file mode 100644 index 15a76a7056c5db198bf37e0ccffb96666ee9d59f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJ#2qYNxmkP}TQY`6?zK#rxZ3_%vOp6EdnM#8E zf*BYYr~F+9;w5>zyD%`U>Qy!Z@;D1TB8!2v2N=7Z%(eqEL_J*`LpZJ{|2X`i-I0|m zTH+kTLm38>JFJf7v1d*I6{wcDMwFx^mZVxG7o`Fz1|tJQQ(Z$tT?4ZaLjx;QBP(N5 zZ39Cq1A`c+6?aiIvn1vV`SeY7G8JlVw7+M(^#5k?E wi=rVnKP5A*5~{&K*T^`;(9+7l)XLCI+rS8@LGj-uQ=kS0Pgg&ebxsLQ0Hatp=>Px# diff --git a/signs/textures/signs_black_inventory.png b/signs/textures/signs_black_inventory.png deleted file mode 100644 index 4b10ee397f0b3a9152e61dbcf7496bdba6ad177c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8!3Q zuY)k7lg8`{prB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt*kyE{-7) zt#7Y7aW=N;oPk?m$?HPm^^N&RyH#z z7sO8?NfDv}F9Ipyj~GRlsoDZdt?1R~}U&Kt(N{E{-7) zt#7Xy@*Pm%Xia>x&|-f1~}U&Kt=VQE{-7) zt#7Y7@--N6xCFjhXc7PZ*uj0$$yb)_(z@*85%F1S)l8gbokp9szR)H(SA%4eCxzJCqo%onZWZnk&x!;Tkz! wf7Tkdi8ftRkFSu`o-oyhohzV$=>((oZoOsIy|a{3fKFlXboFyt=akR{0FKjES^xk5 diff --git a/signs/textures/signs_blue_street.png b/signs/textures/signs_blue_street.png deleted file mode 100644 index 540a3904deadd6a452b0b47c2d28e3cbf45d6663..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8!3Q zuY)k7lg8`{prB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&3=E8ho-U3d z5v^~pD`p>dkT~|S{+Ps8;e|>{8&9*Z=(rX0oXNPbHB2sq?HecC)YcOnvxJOStdT4h z{L3(NZ&!zqp>&eb)QQrPJ~Anf;>6=V{;_!Xpp*5xuJXC7Gaj;i&}X>*xBqb=^MRy~ zO;aQ%pX{ABVOQRVJso%7NjChnkz*@Sb~#b^|5(=6i%cGuB@_=GoO`vt?ea@qr z{aG3pXq<~;*!O7XE>p)@7+No=Fw9__QKj5Eh;K}DPb7PEM7GufMEzDnz8|_bHGcbF= ZUGh3DsP9vXC@_Q>JYD@<);T3K0RX?2u}S~{ diff --git a/signs/textures/signs_blue_street_inventory.png b/signs/textures/signs_blue_street_inventory.png deleted file mode 100644 index a702669d5262356df298b79adc6fb7d13948b435..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 472 zcmV;}0Vn>6P)9eFrZiB21~fN!<+q zfLUKK=Ktz45S`d(LAWjAlCrFzEGx*e*3>jt(xs-kl4Y%j^MNJxzOykpAp#r@uh?#% zwcIvIA_x(T_E`T78S}}q?jb~g-R=pVCs3AWEdZ|TAkSm$_b-U!BQBTs;R%!_lrn{F z&$XHZKv|yQc>=aQhm@((Qzk%k0%N{5<1zIfqZ61y2EYIq00UqE41faAwjGirg6lfk zja=73l0<0R?t1{vLsV6bJdd?P^ns+RYH%JZJtYrh*)4(<#T#sUt~HWXRgJ~s0RXUC zMMEAK&4h7$gp?^Zn@24GZQFtKZ~*u!Wdd5bDqm9|44A~7JgBATXS%Y=i z{I%G;)mgpNS%b9M{8U+eRM~>G*g|yKLUnX0?@NtqW6$He!#^W((J4 z3(;l`*I^6OV~sIlOE71PH|MaHW{%Wji#K791FF$wi!uNr_HbSHa6R@UGma#4&NOST zG;5w@OU@(<&R8S%M03srbB-8ejyMx`8yOZWDW?Db|Jz8~XOs1A*3u zoq{?YtkwN{T}4FSNL8Mz(YXF1d#fK$3 zRr}w3{mIp8kQe$s(ab3tktvby!_VEu&z1r z3;V4C6FI+Sn|B_On6EQ!_10CVX6M##|KIeK`&j$qmo+=@z3cz^`5bpnP;B}WSBd2J g=K4NajKBEpcy=gAC!T&H3UoGur>mdKI;Vst0B)$C`~Uy| literal 0 HcmV?d00001 diff --git a/signs/textures/signs_default_inventory.png b/signs/textures/signs_default_inventory.png new file mode 100644 index 0000000000000000000000000000000000000000..55a512019ad371632da1d22c3e00989fddefcbc4 GIT binary patch literal 617 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5)F&0- z6XN>+|Nn*vwVDv6>R`pXFqQgn)i@J&h)8XyGLTypq!4Yy5u(K&rpF$p&lYLK9&OAX zWyl_Bz#ePD5of_3Wy}_1${u6NVIjc)G{j$%HCUI;UyIFKoz+X7HAtJyPnFe2l`Tk% zEku_sR2OInyQL&!h&EfGHd~M;o2L@1ml99`YoI1us2)%aYk&r8fEKHr99x_*dz=YJ zyeVfq(0oJoC?ht1b=E*_R$EzCpi`rb*dw&r!gbj~v{}P-*uwN!V~p4m%-Q12Ijp6b zBlXzgP1xgrYIND641kC|T$epuk3GqZBgvdI&6+FCnkU(kGs%K8)`&gPoHN0kBgU8m z=yw|#7Aq+xV6a%`6T`o*i4(h^dV%^@>p%$hknsv{yQ^0UVc1A`4WZrzNwu&}bU*u7&H=g#IW z6%|#LvuAbv_;Ks!PiEGLi@Ax9xj1;Z_&9mF`wO~x*jFWV7;W2F7~UUNUS8hcIZ@?s aHV?zi_2TR2C7uuk`M}fF&t;ucLK6TDq^j)z literal 0 HcmV?d00001 diff --git a/signs/textures/signs_green_street.png b/signs/textures/signs_green_street.png deleted file mode 100644 index b5c653d0f2f5c70fb982a22d0680162d828deaef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;M7UB8!3Q zuY)k7lg8`{prB-lYeY$Kep*R+Vo@qXd3m{BW?pu2a$-TMUVc&f>~}U&Kt=tYE{-7) zt#7X=@-;gMxIH|+Y zrskP5CoB}xV;C4&1RjVqa3A>e+hC8{z1!DSqvG>>e9tdlqjBcUyYuIC_qnfmD>MIq z^}hVH`;3e%90L1WzAs5*keGc>bRwUi0RP13p9$wSGBa@~G%#2`=U~}U&Kt)qLT^vIq zTHjt#xLtgu>7hyn&sGT&&gT+GmU+5<<>CAv^Pn~< zZPH9ZOUo^K4Gc^i3?d3&M8z6@|2|n@ZCo3tcQJNz>YFOQ+0#dZ#WD$6bP0l+XkK;1gtj