summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--locale/de.txt1
-rw-r--r--locale/template.txt2
-rw-r--r--register.lua41
3 files changed, 38 insertions, 6 deletions
diff --git a/locale/de.txt b/locale/de.txt
index 193633a..6ceab4c 100644
--- a/locale/de.txt
+++ b/locale/de.txt
@@ -55,6 +55,7 @@ Show next recipe = Nächstes Rezept zeigen
Show next usage = Nächste Verwendung zeigen
Show previous recipe = Vorheriges Rezept zeigen
Show previous usage = Vorherige Verwendung zeigen
+This recipe is too\nlarge to be displayed. = Dieses Rezept ist zu\ngroß, um angezeigt\nzu werden.
Recipe %d of %d = Rezept %d von %d
Usage %d of %d = Verwendung %d von %d
No recipes = Keine Rezepte
diff --git a/locale/template.txt b/locale/template.txt
index 4e8e658..73194d4 100644
--- a/locale/template.txt
+++ b/locale/template.txt
@@ -57,6 +57,8 @@ Show next recipe =
Show next usage =
Show previous recipe =
Show previous usage =
+# Shown for huge crafting recipes; try to keep the line length short and use multiple line breaks as needed
+This recipe is too\nlarge to be displayed. =
Recipe %d of %d =
Usage %d of %d =
No recipes =
diff --git a/register.lua b/register.lua
index 66c9cef..55bbdb0 100644
--- a/register.lua
+++ b/register.lua
@@ -188,7 +188,7 @@ local function stack_image_button(x, y, w, h, buttonname_prefix, item)
selectitem = group_item.sole and displayitem or name
end
local label = show_is_group and "G" or ""
- return string.format("item_image_button[%f,%f;%u,%u;%s;%s;%s]",
+ return string.format("item_image_button[%f,%f;%f,%f;%s;%s;%s]",
x, y, w, h,
minetest.formspec_escape(displayitem),
minetest.formspec_escape(buttonname_prefix..unified_inventory.mangle_for_formspec(selectitem)),
@@ -284,28 +284,57 @@ unified_inventory.register_page("craftguide", {
-- This keeps recipes aligned to the right,
-- so that they're close to the arrow.
- local xoffset = 1.5 + (3 - display_size.width)
+ 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 + 0.05*od))
+ -- Button size
+ 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 = 1, display_size.width do
local item
if craft and x <= craft_width then
item = craft.items[(y-1) * craft_width + x]
end
+ -- Flipped x, used to build formspec buttons from right to left
+ local fx = display_size.width - (x-1)
+ -- x offset, y offset
+ local xof = (fx-1) * of + of
+ local yof = (y-1) * of + 1
if item then
formspec = formspec..stack_image_button(
- xoffset + x, formspecy - 1 + y, 1.1, 1.1,
+ 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 + x)..","..tostring(formspecy - 1 + y)
- ..";1,1;ui_blank_image.png;;]"
+ ..tostring(xoffset - xof)..","..tostring(formspecy - 1 + yof)
+ ..";"..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
+ if craft_type.uses_crafting_grid and display_size.width <= 3 then
formspec = formspec.."label[0,"..(formspecy + 0.9)..";" .. F("To craft grid:") .. "]"
.."button[0, "..(formspecy + 1.5)..";0.6,0.5;craftguide_craft_1;1]"
.."button[0.6,"..(formspecy + 1.5)..";0.7,0.5;craftguide_craft_10;10]"