forkattu lähteestä minetest-mods/unified_inventory
		
	Vertaa committeja
	
		
			3 Commitit
		
	
	
		
			15a84bdbf4
			...
			9d66a21271
		
	
	| Tekijä | SHA1 | Päivämäärä | |
|---|---|---|---|
| 9d66a21271 | |||
|  | 3fffa41eaf | ||
|  | 077bed90eb | 
							
								
								
									
										3
									
								
								init.lua
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								init.lua
									
									
									
									
									
								
							| @@ -43,7 +43,8 @@ unified_inventory = { | ||||
| 	imgscale = 1.25, | ||||
| 	list_img_offset = 0.13, | ||||
| 	standard_background = "background9[0,0;1,1;ui_formbg_9_sliced.png;true;16]", | ||||
| 	version = 2 | ||||
|  | ||||
| 	version = 3 | ||||
| } | ||||
|  | ||||
| local ui = unified_inventory | ||||
|   | ||||
							
								
								
									
										236
									
								
								internal.lua
									
									
									
									
									
								
							
							
						
						
									
										236
									
								
								internal.lua
									
									
									
									
									
								
							| @@ -22,7 +22,9 @@ end | ||||
| function ui.get_per_player_formspec(player_name) | ||||
| 	local draw_lite_mode = ui.lite_mode and not minetest.check_player_privs(player_name, {ui_full=true}) | ||||
|  | ||||
| 	return table.copy(draw_lite_mode and ui.style_lite or ui.style_full), draw_lite_mode | ||||
| 	local style = table.copy(draw_lite_mode and ui.style_lite or ui.style_full) | ||||
| 	style.is_lite_mode = draw_lite_mode | ||||
| 	return style | ||||
| end | ||||
|  | ||||
| local function formspec_button(ui_peruser, name, image, offset, pos, scale, label) | ||||
| @@ -41,54 +43,24 @@ local function formspec_button(ui_peruser, name, image, offset, pos, scale, labe | ||||
| 		string.format("tooltip[%s;%s]", name, F(label or name)) | ||||
| end | ||||
|  | ||||
| function ui.get_formspec(player, page) | ||||
|  | ||||
| 	if not player then | ||||
| 		return "" | ||||
| 	end | ||||
|  | ||||
| 	local player_name = player:get_player_name() | ||||
| 	local ui_peruser,draw_lite_mode = ui.get_per_player_formspec(player_name) | ||||
|  | ||||
| 	ui.current_page[player_name] = page | ||||
| 	local pagedef = ui.pages[page] | ||||
|  | ||||
| 	if not pagedef then | ||||
| 		return "" -- Invalid page name | ||||
| 	end | ||||
|  | ||||
| 	local formspec = { | ||||
| 		"formspec_version[4]", | ||||
| 		"size["..ui_peruser.formw..","..ui_peruser.formh.."]", | ||||
| 		pagedef.formspec_prepend and "" or "no_prepend[]", | ||||
| 		ui.standard_background | ||||
| 	} | ||||
|  | ||||
| 	local n = 5 | ||||
|  | ||||
| 	local perplayer_formspec = ui.get_per_player_formspec(player_name) | ||||
| 	local fsdata = pagedef.get_formspec(player, perplayer_formspec) | ||||
|  | ||||
| 	formspec[n] = fsdata.formspec | ||||
| 	n = n+1 | ||||
|  | ||||
| local function formspec_add_filters(player, formspec, style) | ||||
| 	local button_row = 0 | ||||
| 	local button_col = 0 | ||||
| 	local n = #formspec + 1 | ||||
|  | ||||
| 	-- Main buttons | ||||
|  | ||||
| 	local filtered_inv_buttons = {} | ||||
|  | ||||
| 	for i, def in pairs(ui.buttons) do | ||||
| 		if not (draw_lite_mode and def.hide_lite) then | ||||
| 		if not (style.is_lite_mode and def.hide_lite) then | ||||
| 			table.insert(filtered_inv_buttons, def) | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	local j = 1 --Modif NALC (sys4 20/11/2018) 12 buttons max by row | ||||
| 	for i, def in pairs(filtered_inv_buttons) do | ||||
|  | ||||
| 		if draw_lite_mode and i > 4 then | ||||
| 		if style.is_lite_mode and i > 4 then | ||||
| 			button_row = 1 | ||||
| 			button_col = 1 | ||||
| 		elseif not draw_lite_mode and j > 12 then | ||||
| @@ -97,62 +69,61 @@ function ui.get_formspec(player, page) | ||||
| 		end | ||||
|  | ||||
| 		if def.type == "image" then | ||||
| 			local pos_x = style.main_button_x + style.btn_spc * (j - 1) - button_col * style.btn_spc * 4 | ||||
| 			local pos_y = style.main_button_y + button_row * style.btn_spc | ||||
| 			if (def.condition == nil or def.condition(player) == true) then | ||||
| 				formspec[n] = string.format("image_button[%f,%f;%f,%f;%s;%s;]", | ||||
| 					ui_peruser.main_button_x + ui_peruser.btn_spc * (j - 1) - button_col * ui_peruser.btn_spc * 4, -- Modif NALC | ||||
| 					ui_peruser.main_button_y + button_row * ui_peruser.btn_spc, | ||||
| 					ui_peruser.btn_size,ui_peruser.btn_size, | ||||
| 					pos_x, pos_y, style.btn_size, style.btn_size, | ||||
| 					F(def.image), | ||||
| 					F(def.name)) | ||||
| 				formspec[n+1] = "tooltip["..F(def.name)..";"..(def.tooltip or "").."]" | ||||
| 				n = n+2 | ||||
| 			else | ||||
| 				formspec[n] = string.format("image[%f,%f;%f,%f;%s^[colorize:#808080:alpha]", | ||||
| 				ui_peruser.main_button_x + ui_peruser.btn_spc * (j - 1) - button_col * ui_peruser.btn_spc * 4, -- Modif NALC | ||||
| 				ui_peruser.main_button_y + button_row * ui_peruser.btn_spc, | ||||
| 				ui_peruser.btn_size,ui_peruser.btn_size,def.image) | ||||
| 					pos_x, pos_y, style.btn_size, style.btn_size, | ||||
| 					def.image) | ||||
| 				n = n+1 | ||||
| 			end | ||||
| 		end | ||||
| 		j = j + 1 -- Modif NALC | ||||
| 	end | ||||
| end | ||||
|  | ||||
| 	if fsdata.draw_inventory ~= false then | ||||
| 		-- Player inventory | ||||
| 		formspec[n] = "listcolors[#00000000;#00000000]" | ||||
| 		formspec[n+1] = ui_peruser.standard_inv | ||||
| 		n = n+2 | ||||
| 	end | ||||
| local function formspec_add_categories(player, formspec, ui_peruser) | ||||
| 	local player_name = player:get_player_name() | ||||
| 	local n = #formspec + 1 | ||||
|  | ||||
| 	if fsdata.draw_item_list == false then | ||||
| 		return table.concat(formspec, "") | ||||
| 	end | ||||
|  | ||||
| 	-- Category filters | ||||
|  | ||||
| 	local categories_pos = { ui_peruser.page_x, ui_peruser.page_y-ui_peruser.btn_spc-0.5 } | ||||
| 	local categories_scroll_pos = { ui_peruser.page_x, ui_peruser.form_header_y-(draw_lite_mode and 0 or 0.2) } | ||||
| 	local categories_pos = { | ||||
| 		ui_peruser.page_x, | ||||
| 		ui_peruser.page_y-ui_peruser.btn_spc-0.5 | ||||
| 	} | ||||
| 	local categories_scroll_pos = { | ||||
| 		ui_peruser.page_x, | ||||
| 		ui_peruser.form_header_y - (ui_peruser.is_lite_mode and 0 or 0.2) | ||||
| 	} | ||||
|  | ||||
| 	formspec[n] = string.format("background9[%f,%f;%f,%f;%s;false;3]", | ||||
| 		ui_peruser.page_x-0.1, categories_scroll_pos[2], | ||||
| 		(ui_peruser.btn_spc * ui_peruser.pagecols) + 0.13, 1.4+(draw_lite_mode and 0 or 0.2), | ||||
| 		(ui_peruser.btn_spc * ui_peruser.pagecols) + 0.13, 1.4 + (ui_peruser.is_lite_mode and 0 or 0.2), | ||||
| 		"ui_smallbg_9_sliced.png") | ||||
| 	n = n + 1 | ||||
|  | ||||
| 	formspec[n] = string.format("label[%f,%f;%s]", ui_peruser.page_x, ui_peruser.form_header_y+(draw_lite_mode and 0.3 or 0.2), "Category:") | ||||
| 	formspec[n] = string.format("label[%f,%f;%s]", | ||||
| 		ui_peruser.page_x, | ||||
| 		ui_peruser.form_header_y + (ui_peruser.is_lite_mode and 0.3 or 0.2), F(S("Category:"))) | ||||
| 	n = n + 1 | ||||
|  | ||||
| 	local scroll_offset = 0 | ||||
| 	local category_count = #unified_inventory.category_list | ||||
| 	local category_count = #ui.category_list | ||||
| 	if category_count > ui_peruser.pagecols then | ||||
| 		scroll_offset = unified_inventory.current_category_scroll[player_name] | ||||
| 		scroll_offset = ui.current_category_scroll[player_name] | ||||
| 	end | ||||
|  | ||||
| 	for index, category in ipairs(unified_inventory.category_list) do | ||||
| 	for index, category in ipairs(ui.category_list) do | ||||
| 		local column = index - scroll_offset | ||||
| 		if column > 0 and column <= ui_peruser.pagecols then | ||||
| 			local scale = 0.8 | ||||
| 			if unified_inventory.current_category[player_name] == category.name then | ||||
| 			if ui.current_category[player_name] == category.name then | ||||
| 				scale = 1 | ||||
| 			end | ||||
| 			formspec[n] = formspec_button(ui_peruser, "category_"..category.name, category.symbol, categories_pos, {column-1, 0}, scale, category.label) | ||||
| @@ -167,10 +138,13 @@ function ui.get_formspec(player, page) | ||||
| 	if category_count > ui_peruser.pagecols and category_count - scroll_offset > ui_peruser.pagecols then | ||||
| 		-- next | ||||
| 		formspec[n] = formspec_button(ui_peruser, "next_category", "ui_right_icon.png", categories_scroll_pos, {ui_peruser.pagecols - 1, 0}, 0.8, S("Scroll categories right")) | ||||
| 		n = n + 1 | ||||
| 	end | ||||
| end | ||||
|  | ||||
| local function formspec_add_search_box(player, formspec, ui_peruser) | ||||
| 	local player_name = player:get_player_name() | ||||
| 	local n = #formspec + 1 | ||||
|  | ||||
| 	-- Search box | ||||
| 	formspec[n] = "field_close_on_enter[searchbox;false]" | ||||
|  | ||||
| 	formspec[n+1] = string.format("field[%f,%f;%f,%f;searchbox;;%s]", | ||||
| @@ -187,7 +161,16 @@ function ui.get_formspec(player, page) | ||||
| 		ui_peruser.btn_size, ui_peruser.btn_size) | ||||
| 	formspec[n+5] = "tooltip[searchresetbutton;"..F(S("Reset search and display everything")).."]" | ||||
|  | ||||
| 	n = n + 6 | ||||
| 	if ui.activefilter[player_name] ~= "" then | ||||
| 		formspec[n+6] = string.format("label[%f,%f;%s: %s]", | ||||
| 			ui_peruser.page_x, ui_peruser.page_y - 0.25, | ||||
| 			F(S("Filter")), F(ui.activefilter[player_name])) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| local function formspec_add_item_browser(player, formspec, ui_peruser) | ||||
| 	local player_name = player:get_player_name() | ||||
| 	local n = #formspec + 1 | ||||
|  | ||||
| 	-- Controls to flip items pages | ||||
|  | ||||
| @@ -200,9 +183,9 @@ function ui.get_formspec(player, page) | ||||
| 		{ "ui_skip_forward_icon.png",  "end_list",   S("Last page") }, | ||||
| 	} | ||||
|  | ||||
| 	if draw_lite_mode then | ||||
| 		btnlist[5] = nil | ||||
| 	if ui_peruser.is_lite_mode then | ||||
| 		btnlist[2] = nil | ||||
| 		btnlist[5] = nil | ||||
| 	end | ||||
|  | ||||
| 	local bn = 0 | ||||
| @@ -217,15 +200,17 @@ function ui.get_formspec(player, page) | ||||
| 		n = n + 2 | ||||
| 	end | ||||
|  | ||||
| 	-- Items list | ||||
| 	if #ui.filtered_items_list[player_name] == 0 then | ||||
| 		local no_matches = S("No matching items") | ||||
| 	if draw_lite_mode then | ||||
| 		if ui_peruser.is_lite_mode then | ||||
| 			no_matches = S("No matches.") | ||||
| 		end | ||||
|  | ||||
| 	-- Items list | ||||
| 	if #ui.filtered_items_list[player_name] == 0 then | ||||
| 		formspec[n] = "label["..ui_peruser.page_x..","..(ui_peruser.page_y+0.15)..";" .. F(no_matches) .. "]" | ||||
| 	else | ||||
| 		return | ||||
| 	end | ||||
|  | ||||
| 	local dir = ui.active_search_direction[player_name] | ||||
| 	local list_index = ui.current_index[player_name] | ||||
| 	local page2 = math.floor(list_index / (ui_peruser.items_per_page) + 1) | ||||
| @@ -268,18 +253,56 @@ function ui.get_formspec(player, page) | ||||
| 		end | ||||
| 	end | ||||
| 	formspec[n] = string.format("label[%f,%f;%s: %s]", | ||||
| 			ui_peruser.page_buttons_x + ui_peruser.btn_spc * (draw_lite_mode and 1 or 2), | ||||
| 		ui_peruser.page_buttons_x + ui_peruser.btn_spc * (ui_peruser.is_lite_mode and 1 or 2), | ||||
| 		ui_peruser.page_buttons_y + 0.1 + ui_peruser.btn_spc * 2, | ||||
| 		F(S("Page")), S("@1 of @2",page2,pagemax)) | ||||
| 	end | ||||
| 	n= n+1 | ||||
| end | ||||
|  | ||||
| 	if ui.activefilter[player_name] ~= "" then | ||||
| 		formspec[n] = string.format("label[%f,%f;%s: %s]", | ||||
| 			ui_peruser.page_x, ui_peruser.page_y - 0.25, | ||||
| 			F(S("Filter")), F(ui.activefilter[player_name])) | ||||
| function ui.get_formspec(player, page) | ||||
|  | ||||
| 	if not player then | ||||
| 		return "" | ||||
| 	end | ||||
| 	return table.concat(formspec, "") | ||||
|  | ||||
| 	local player_name = player:get_player_name() | ||||
| 	local ui_peruser = ui.get_per_player_formspec(player_name) | ||||
|  | ||||
| 	ui.current_page[player_name] = page | ||||
| 	local pagedef = ui.pages[page] | ||||
|  | ||||
| 	if not pagedef then | ||||
| 		return "" -- Invalid page name | ||||
| 	end | ||||
|  | ||||
| 	local fs = { | ||||
| 		"formspec_version[4]", | ||||
| 		"size["..ui_peruser.formw..","..ui_peruser.formh.."]", | ||||
| 		pagedef.formspec_prepend and "" or "no_prepend[]", | ||||
| 		ui.standard_background | ||||
| 	} | ||||
|  | ||||
| 	local perplayer_formspec = ui.get_per_player_formspec(player_name) | ||||
| 	local fsdata = pagedef.get_formspec(player, perplayer_formspec) | ||||
|  | ||||
| 	fs[#fs + 1] = fsdata.formspec | ||||
|  | ||||
| 	formspec_add_filters(player, fs, ui_peruser) | ||||
|  | ||||
| 	if fsdata.draw_inventory ~= false then | ||||
| 		-- Player inventory | ||||
| 		fs[#fs + 1] = "listcolors[#00000000;#00000000]" | ||||
| 		fs[#fs + 1] = ui_peruser.standard_inv | ||||
| 	end | ||||
|  | ||||
| 	if fsdata.draw_item_list == false then | ||||
| 		return table.concat(fs, "") | ||||
| 	end | ||||
|  | ||||
| 	formspec_add_categories(player, fs, ui_peruser) | ||||
| 	formspec_add_search_box(player, fs, ui_peruser) | ||||
| 	formspec_add_item_browser(player, fs, ui_peruser) | ||||
|  | ||||
| 	return table.concat(fs) | ||||
| end | ||||
|  | ||||
| function ui.set_inventory_formspec(player, page) | ||||
| @@ -360,60 +383,3 @@ function ui.apply_filter(player, filter, search_dir) | ||||
| 	ui.set_inventory_formspec(player, | ||||
| 	ui.current_page[player_name]) | ||||
| end | ||||
|  | ||||
| function ui.items_in_group(groups) | ||||
| 	local items = {} | ||||
| 	for name, item in pairs(minetest.registered_items) do | ||||
| 		for _, group in pairs(groups:split(',')) do | ||||
| 			if item.groups[group] then | ||||
| 				table.insert(items, name) | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| 	return items | ||||
| end | ||||
|  | ||||
| function ui.sort_inventory(inv) | ||||
| 	local inlist = inv:get_list("main") | ||||
| 	local typecnt = {} | ||||
| 	local typekeys = {} | ||||
| 	for _, st in ipairs(inlist) do | ||||
| 		if not st:is_empty() then | ||||
| 			local n = st:get_name() | ||||
| 			local w = st:get_wear() | ||||
| 			local m = st:get_metadata() | ||||
| 			local k = string.format("%s %05d %s", n, w, m) | ||||
| 			if not typecnt[k] then | ||||
| 				typecnt[k] = { | ||||
| 					name = n, | ||||
| 					wear = w, | ||||
| 					metadata = m, | ||||
| 					stack_max = st:get_stack_max(), | ||||
| 					count = 0, | ||||
| 				} | ||||
| 				table.insert(typekeys, k) | ||||
| 			end | ||||
| 			typecnt[k].count = typecnt[k].count + st:get_count() | ||||
| 		end | ||||
| 	end | ||||
| 	table.sort(typekeys) | ||||
| 	local outlist = {} | ||||
| 	for _, k in ipairs(typekeys) do | ||||
| 		local tc = typecnt[k] | ||||
| 		while tc.count > 0 do | ||||
| 			local c = math.min(tc.count, tc.stack_max) | ||||
| 			table.insert(outlist, ItemStack({ | ||||
| 				name = tc.name, | ||||
| 				wear = tc.wear, | ||||
| 				metadata = tc.metadata, | ||||
| 				count = c, | ||||
| 			})) | ||||
| 			tc.count = tc.count - c | ||||
| 		end | ||||
| 	end | ||||
| 	if #outlist > #inlist then return end | ||||
| 	while #outlist < #inlist do | ||||
| 		table.insert(outlist, ItemStack(nil)) | ||||
| 	end | ||||
| 	inv:set_list("main", outlist) | ||||
| end | ||||
|   | ||||
		Viittaa uudesa ongelmassa
	
	Block a user