updated mesecons and unified inventory
This commit is contained in:
parent
3f73836986
commit
2db921cac8
@ -20,8 +20,6 @@
|
||||
-- The Sandbox
|
||||
-- The whole code of the controller runs in a sandbox,
|
||||
-- a very restricted environment.
|
||||
-- However, as this does not prevent you from using e.g. loops,
|
||||
-- we need to check for these prohibited commands first.
|
||||
-- Actually the only way to damage the server is to
|
||||
-- use too much memory from the sandbox.
|
||||
-- You can add more functions to the environment
|
||||
|
@ -14,9 +14,10 @@ Unified inventory code is licensed under the GNU LGPLv2+.
|
||||
Licenses for textures:
|
||||
|
||||
VanessaE: (WTFPL)
|
||||
* ui\_group.png
|
||||
* `ui_group.png`
|
||||
|
||||
RealBadAngel: (WTFPL)
|
||||
* Everything else.
|
||||
|
||||
|
||||
Tango Project: (WTFPL)
|
||||
* `ui_reset_icon.png
|
||||
|
@ -120,6 +120,9 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if string.sub(clicked_item, 1, 6) == "group:" then
|
||||
minetest.sound_play("click", {to_player=player_name, gain = 0.1})
|
||||
unified_inventory.apply_filter(player, clicked_item, new_dir)
|
||||
unified_inventory.current_searchbox[player_name] = clicked_item
|
||||
unified_inventory.set_inventory_formspec(player,
|
||||
unified_inventory.current_page[player_name])
|
||||
return
|
||||
end
|
||||
if new_dir == "recipe"
|
||||
@ -153,15 +156,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
|
||||
if fields.searchbutton then
|
||||
unified_inventory.apply_filter(player, unified_inventory.current_searchbox[player_name], "nochange")
|
||||
unified_inventory.current_searchbox[player_name] = ""
|
||||
unified_inventory.set_inventory_formspec(player,
|
||||
unified_inventory.current_page[player_name])
|
||||
minetest.sound_play("paperflip2",
|
||||
{to_player=player_name, gain = 1.0})
|
||||
elseif fields.searchresetbutton then
|
||||
unified_inventory.apply_filter(player, "", "nochange")
|
||||
unified_inventory.current_searchbox[player_name] = ""
|
||||
unified_inventory.set_inventory_formspec(player,
|
||||
unified_inventory.current_page[player_name])
|
||||
minetest.sound_play("click",
|
||||
{to_player=player_name, gain = 0.1})
|
||||
end
|
||||
|
||||
-- alternate button
|
||||
if not fields.alternate then
|
||||
-- alternate buttons
|
||||
if not (fields.alternate or fields.alternate_prev) then
|
||||
return
|
||||
end
|
||||
minetest.sound_play("click",
|
||||
@ -178,9 +187,17 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||
if alternates <= 1 then
|
||||
return
|
||||
end
|
||||
local alternate = unified_inventory.alternate[player_name] + 1
|
||||
if alternate > alternates then
|
||||
alternate = 1
|
||||
local alternate
|
||||
if fields.alternate then
|
||||
alternate = unified_inventory.alternate[player_name] + 1
|
||||
if alternate > alternates then
|
||||
alternate = 1
|
||||
end
|
||||
elseif fields.alternate_prev then
|
||||
alternate = unified_inventory.alternate[player_name] - 1
|
||||
if alternate < 1 then
|
||||
alternate = alternates
|
||||
end
|
||||
end
|
||||
unified_inventory.alternate[player_name] = alternate
|
||||
unified_inventory.set_inventory_formspec(player,
|
||||
|
@ -1,3 +1,5 @@
|
||||
local S = unified_inventory.gettext
|
||||
|
||||
function unified_inventory.canonical_item_spec_matcher(spec)
|
||||
local specname = ItemStack(spec):get_name()
|
||||
if specname:sub(1, 6) == "group:" then
|
||||
@ -21,9 +23,36 @@ function unified_inventory.item_matches_spec(item, spec)
|
||||
return unified_inventory.canonical_item_spec_matcher(spec)(itemname)
|
||||
end
|
||||
|
||||
function unified_inventory.extract_groupnames(groupname)
|
||||
local specname = ItemStack(groupname):get_name()
|
||||
if specname:sub(1, 6) == "group:" then
|
||||
local group_names = specname:sub(7):split(",")
|
||||
if #group_names == 1 then
|
||||
return group_names[1], 1
|
||||
end
|
||||
local s = ""
|
||||
for g=1,#group_names do
|
||||
if g > 1 then
|
||||
-- List connector
|
||||
s = s .. S(" and ")
|
||||
end
|
||||
s = s .. group_names[g]
|
||||
end
|
||||
return s, #group_names
|
||||
else
|
||||
return nil, 0
|
||||
end
|
||||
end
|
||||
|
||||
unified_inventory.registered_group_items = {
|
||||
mesecon_conductor_craftable = "mesecons:wire_00000000_off",
|
||||
stone = "default:cobble",
|
||||
wood = "default:wood",
|
||||
book = "default:book",
|
||||
sand = "default:sand",
|
||||
leaves = "default:leaves",
|
||||
tree = "default:tree",
|
||||
vessel = "vessels:glass_bottle",
|
||||
wool = "wool:white",
|
||||
}
|
||||
|
||||
|
@ -179,13 +179,19 @@ function unified_inventory.get_formspec(player, page)
|
||||
.. minetest.formspec_escape(unified_inventory.current_searchbox[player_name]) .. "]"
|
||||
formspec[n+1] = "image_button[12.2,8.1;.8,.8;ui_search_icon.png;searchbutton;]"
|
||||
.. "tooltip[searchbutton;" ..F("Search") .. "]"
|
||||
formspec[n+2] = "image_button[12.9,8.1;.8,.8;ui_reset_icon.png;searchresetbutton;]"
|
||||
.. "tooltip[searchbutton;" ..F("Search") .. "]"
|
||||
.. "tooltip[searchresetbutton;" ..F("Reset search and display everything") .. "]"
|
||||
else
|
||||
formspec[n] = "field[8.5,5.225;2.2,1;searchbox;;"
|
||||
.. minetest.formspec_escape(unified_inventory.current_searchbox[player_name]) .. "]"
|
||||
formspec[n+1] = "image_button[10.3,5;.8,.8;ui_search_icon.png;searchbutton;]"
|
||||
.. "tooltip[searchbutton;" ..F("Search") .. "]"
|
||||
formspec[n+2] = "image_button[11,5;.8,.8;ui_reset_icon.png;searchresetbutton;]"
|
||||
.. "tooltip[searchbutton;" ..F("Search") .. "]"
|
||||
.. "tooltip[searchresetbutton;" ..F("Reset search and display everything") .. "]"
|
||||
end
|
||||
n = n+2
|
||||
n = n+3
|
||||
|
||||
local no_matches = "No matching items"
|
||||
if draw_lite_mode then
|
||||
|
@ -25,6 +25,7 @@ Page = Seite
|
||||
%s of %s = %s von %s
|
||||
Filter = Filter
|
||||
Search = Suchen
|
||||
Reset search and display everything = Suche zurücksetzen und alles anzeigen
|
||||
|
||||
### register.lua ###
|
||||
Can use the creative inventory = Kann das Kreativinventar nutzen
|
||||
@ -51,6 +52,13 @@ Copy to craft grid: = Ins Fertigungsraster kopieren:
|
||||
All = Alles
|
||||
Alternate = Alternative
|
||||
Crafting Grid = Fertigungsraster
|
||||
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.
|
||||
Any item belonging to the %s group = Irgendein Gegenstand, der zur Gruppe %s gehört
|
||||
Any item belonging to the groups %s = Irgendein Gegenstand, der zu den Gruppen %s gehört
|
||||
Recipe %d of %d = Rezept %d von %d
|
||||
Usage %d of %d = Verwendung %d von %d
|
||||
No recipes = Keine Rezepte
|
||||
@ -65,6 +73,9 @@ Clear inventory = Inventar leeren
|
||||
Give me: = Gib mir:
|
||||
To craft grid: = Ins Fertigungsraster:
|
||||
|
||||
### group.lua ###
|
||||
\sand\s=\sund\s
|
||||
|
||||
### waypoints.lua ###
|
||||
White = Weiß
|
||||
Yellow = Gelb
|
||||
|
@ -26,6 +26,7 @@ Page =
|
||||
%s of %s =
|
||||
Filter =
|
||||
Search =
|
||||
Reset search and display everything =
|
||||
|
||||
### register.lua ###
|
||||
Can use the creative inventory =
|
||||
@ -53,6 +54,16 @@ Copy to craft grid: =
|
||||
All =
|
||||
Alternate =
|
||||
Crafting Grid =
|
||||
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. =
|
||||
# %s = group name (e.g. wool)
|
||||
Any item belonging to the %s group =
|
||||
# %s = List of “and”-concatenated group names
|
||||
Any item belonging to the groups %s =
|
||||
Recipe %d of %d =
|
||||
Usage %d of %d =
|
||||
No recipes =
|
||||
@ -67,6 +78,10 @@ Clear inventory =
|
||||
Give me: =
|
||||
To craft grid: =
|
||||
|
||||
### group.lua ###
|
||||
# Logical connective, example: “Any item belonging to the groups foo and bar”
|
||||
\sand\s =
|
||||
|
||||
### waypoints.lua ###
|
||||
White =
|
||||
Yellow =
|
||||
|
@ -188,11 +188,24 @@ 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]",
|
||||
local buttonname = minetest.formspec_escape(buttonname_prefix..unified_inventory.mangle_for_formspec(selectitem))
|
||||
local button = 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)),
|
||||
label)
|
||||
minetest.formspec_escape(displayitem), buttonname, label)
|
||||
if show_is_group then
|
||||
local groupstring, andcount = unified_inventory.extract_groupnames(name)
|
||||
local grouptip
|
||||
if andcount == 1 then
|
||||
grouptip = string.format(S("Any item belonging to the %s group"), groupstring)
|
||||
elseif andcount > 1 then
|
||||
grouptip = string.format(S("Any item belonging to the groups %s"), groupstring)
|
||||
end
|
||||
grouptip = minetest.formspec_escape(grouptip)
|
||||
if andcount >= 1 then
|
||||
button = button .. string.format("tooltip[%s;%s]", buttonname, grouptip)
|
||||
end
|
||||
end
|
||||
return button
|
||||
end
|
||||
|
||||
local recipe_text = {
|
||||
@ -207,6 +220,14 @@ local role_text = {
|
||||
recipe = "Result",
|
||||
usage = "Ingredient",
|
||||
}
|
||||
local next_alt_text = {
|
||||
recipe = "Show next recipe",
|
||||
usage = "Show next usage",
|
||||
}
|
||||
local prev_alt_text = {
|
||||
recipe = "Show previous recipe",
|
||||
usage = "Show previous usage",
|
||||
}
|
||||
local other_dir = {
|
||||
recipe = "usage",
|
||||
usage = "recipe",
|
||||
@ -276,28 +297,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]"
|
||||
@ -313,7 +363,10 @@ unified_inventory.register_page("craftguide", {
|
||||
if alternates and alternates > 1 then
|
||||
formspec = formspec.."label[5.5,"..(formspecy + 1.6)..";"
|
||||
..string.format(F(recipe_text[dir]), alternate, alternates).."]"
|
||||
.."button[5.5,"..(formspecy + 2)..";2,1;alternate;" .. F("Alternate") .. "]"
|
||||
.."image_button[5.5,"..(formspecy + 2)..";1,1;ui_left_icon.png;alternate_prev;]"
|
||||
.."image_button[6.5,"..(formspecy + 2)..";1,1;ui_right_icon.png;alternate;]"
|
||||
.."tooltip[alternate_prev;"..F(prev_alt_text[dir]).."]"
|
||||
.."tooltip[alternate;"..F(next_alt_text[dir]).."]"
|
||||
end
|
||||
return {formspec = formspec}
|
||||
end,
|
||||
|
BIN
unified_inventory/textures/ui_reset_icon.png
Normal file
BIN
unified_inventory/textures/ui_reset_icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
Loading…
x
Reference in New Issue
Block a user