summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWuzzy <almikes@aol.com>2016-08-07 14:54:50 +0200
committerWuzzy <almikes@aol.com>2016-08-14 13:16:30 +0200
commit2ef76af687f6a16a8a6cad83f083bb3ea334002e (patch)
tree40a9b79082b20126ac329eea1cc0b049c1aabef7
parentc1fcc06059ee15e2a2f751cb223351c4be9bccc7 (diff)
Apply size optimizations for large craftings
Also prevent huge crafting recipes from being displayed for stability reasons.
-rw-r--r--register.lua26
1 files changed, 22 insertions, 4 deletions
diff --git a/register.lua b/register.lua
index 72d7077..56a6a10 100644
--- a/register.lua
+++ b/register.lua
@@ -287,9 +287,21 @@ unified_inventory.register_page("craftguide", {
local xoffset = 5.5
-- Offset factor for crafting grids with side length > 4
local of = (3/math.max(3, math.max(display_size.width, display_size.height)))
+ local od = 0
+ -- Minimum grid size at which size optimazation measures kick in
+ local mini_craft_size = 6
+ if display_size.width >= mini_craft_size then
+ od = math.max(1, display_size.width - 2)
+ xoffset = xoffset - 0.1
+ end
-- Size modifier factor
- local sf = math.min(1, of * 1.05)
- local bsize = 1.1 * sf
+ local sf = math.min(1, of * (1.05 + 0.05*od))
+ local bsize_h = 1.1 * sf
+ local bsize_w = bsize_h
+ if display_size.width >= mini_craft_size then
+ bsize_w = 1.175 * sf
+ end
+ if (bsize_h > 0.35 and display_size.width) then
for y = 1, display_size.height do
for x = display_size.width,1,-1 do
local item
@@ -300,17 +312,23 @@ unified_inventory.register_page("craftguide", {
local yof = (y-1) * of + 1
if item then
formspec = formspec..stack_image_button(
- xoffset - xof, formspecy - 1 + yof, bsize, bsize,
+ xoffset - xof, formspecy - 1 + yof, bsize_w, bsize_h,
"item_button_recipe_",
ItemStack(item))
else
-- Fake buttons just to make grid
formspec = formspec.."image_button["
..tostring(xoffset - xof)..","..tostring(formspecy - 1 + yof)
- ..";"..bsize..","..bsize..";ui_blank_image.png;;]"
+ ..";"..bsize_w..","..bsize_h..";ui_blank_image.png;;]"
end
end
end
+ else
+ -- Error
+ formspec = formspec.."label["
+ ..tostring(2)..","..tostring(formspecy)
+ ..";"..minetest.formspec_escape(S("This recipe is too\nlarge to be displayed.")).."]"
+ end
if craft_type.uses_crafting_grid then
formspec = formspec.."label[0,"..(formspecy + 0.9)..";" .. F("To craft grid:") .. "]"