forked from luanti-org/minetest_game
		
	Add sfinv.set_page, plus other helper functions
This commit is contained in:
		| @@ -91,22 +91,42 @@ function sfinv.get_formspec(player, context) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| function sfinv.set_player_inventory_formspec(player, context) | ||||
| function sfinv.get_or_create_context(player) | ||||
| 	local name = player:get_player_name() | ||||
| 	local context = sfinv.contexts[name] | ||||
| 	if not context then | ||||
| 		local name = player:get_player_name() | ||||
| 		context = sfinv.contexts[name] | ||||
| 		if not context then | ||||
| 			context = { | ||||
| 				page = sfinv.get_homepage_name(player) | ||||
| 			} | ||||
| 			sfinv.contexts[name] = context | ||||
| 		end | ||||
| 		context = { | ||||
| 			page = sfinv.get_homepage_name(player) | ||||
| 		} | ||||
| 		sfinv.contexts[name] = context | ||||
| 	end | ||||
| 	return context | ||||
| end | ||||
|  | ||||
| 	local fs = sfinv.get_formspec(player, context) | ||||
| function sfinv.set_context(player, context) | ||||
| 	sfinv.contexts[player:get_player_name()] = context | ||||
| end | ||||
|  | ||||
| function sfinv.set_player_inventory_formspec(player, context) | ||||
| 	local fs = sfinv.get_formspec(player, | ||||
| 			context or sfinv.get_or_create_context(player)) | ||||
| 	player:set_inventory_formspec(fs) | ||||
| end | ||||
|  | ||||
| function sfinv.set_page(player, pagename) | ||||
| 	local context = sfinv.get_or_create_context(player) | ||||
| 	local oldpage = sfinv.pages[context.page] | ||||
| 	if oldpage and oldpage.on_leave then | ||||
| 		oldpage:on_leave(player, context) | ||||
| 	end | ||||
| 	context.page = pagename | ||||
| 	local page = sfinv.pages[pagename] | ||||
| 	if page.on_enter then | ||||
| 		page:on_enter(player, context) | ||||
| 	end | ||||
| 	sfinv.set_player_inventory_formspec(player, context) | ||||
| end | ||||
|  | ||||
| minetest.register_on_joinplayer(function(player) | ||||
| 	if sfinv.enabled then | ||||
| 		minetest.after(0.5, function() | ||||
| @@ -132,30 +152,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) | ||||
| 		return false | ||||
| 	end | ||||
|  | ||||
| 	-- Handle Events | ||||
| 	-- Was a tab selected? | ||||
| 	if fields.tabs and context.nav then | ||||
| 		local tid = tonumber(fields.tabs) | ||||
| 		if tid and tid > 0 then | ||||
| 			local id = context.nav[tid] | ||||
| 			local page = sfinv.pages[id] | ||||
| 			if id and page then | ||||
| 				local oldpage = sfinv.pages[context.page] | ||||
| 				if oldpage and oldpage.on_leave then | ||||
| 					oldpage:on_leave(player, context) | ||||
| 				end | ||||
| 				context.page = id | ||||
| 				if page.on_enter then | ||||
| 					page:on_enter(player, context) | ||||
| 				end | ||||
| 				sfinv.set_player_inventory_formspec(player, context) | ||||
| 				sfinv.set_page(player, id) | ||||
| 			end | ||||
| 		end | ||||
| 		return | ||||
| 	end | ||||
|  | ||||
| 	-- Pass to page | ||||
| 	local page = sfinv.pages[context.page] | ||||
| 	if page and page.on_player_receive_fields then | ||||
| 		return page:on_player_receive_fields(player, context, fields) | ||||
| 	else | ||||
| 		-- Pass event to page | ||||
| 		local page = sfinv.pages[context.page] | ||||
| 		if page and page.on_player_receive_fields then | ||||
| 			return page:on_player_receive_fields(player, context, fields) | ||||
| 		end | ||||
| 	end | ||||
| end) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user