Skip to content

Commit e3dd3d1

Browse files
committedFeb 10, 2017
Add sfinv.set_page, plus other helper functions
1 parent 86849d9 commit e3dd3d1

File tree

2 files changed

+56
-35
lines changed

2 files changed

+56
-35
lines changed
 

‎game_api.txt

+18-8
Original file line numberDiff line numberDiff line change
@@ -412,18 +412,28 @@ Sfinv API
412412

413413
### sfinv Methods
414414

415-
* sfinv.set_player_inventory_formspec(player, context) - builds page formspec
416-
and calls set_inventory_formspec().
417-
If context is nil, it is either found or created.
418-
* sfinv.get_formspec(player, context) - builds current page's formspec
419-
* sfinv.get_nav_fs(player, context, nav, current_idx) - see above
415+
**Pages**
416+
417+
* sfinv.set_page(player, pagename) - changes the page
420418
* sfinv.get_homepage_name(player) - get the page name of the first page to show to a player
421-
* sfinv.make_formspec(player, context, content, show_inv, size) - adds a theme to a formspec
422-
* show_inv, defaults to false. Whether to show the player's main inventory
423-
* size, defaults to `size[8,8.6]` if not specified
424419
* sfinv.register_page(name, def) - register a page, see section below
425420
* sfinv.override_page(name, def) - overrides fields of an page registered with register_page.
426421
* Note: Page must already be defined, (opt)depend on the mod defining it.
422+
* sfinv.set_player_inventory_formspec(player) - (re)builds page formspec
423+
and calls set_inventory_formspec().
424+
* sfinv.get_formspec(player, context) - builds current page's formspec
425+
426+
**Contexts**
427+
428+
* sfinv.get_or_create_context(player) - gets the player's context
429+
* sfinv.set_context(player, context)
430+
431+
**Theming**
432+
433+
* sfinv.make_formspec(player, context, content, show_inv, size) - adds a theme to a formspec
434+
* show_inv, defaults to false. Whether to show the player's main inventory
435+
* size, defaults to `size[8,8.6]` if not specified
436+
* sfinv.get_nav_fs(player, context, nav, current_idx) - creates tabheader or ""
427437

428438
### sfinv Members
429439

‎mods/sfinv/api.lua

+38-27
Original file line numberDiff line numberDiff line change
@@ -91,22 +91,42 @@ function sfinv.get_formspec(player, context)
9191
end
9292
end
9393

94-
function sfinv.set_player_inventory_formspec(player, context)
94+
function sfinv.get_or_create_context(player)
95+
local name = player:get_player_name()
96+
local context = sfinv.contexts[name]
9597
if not context then
96-
local name = player:get_player_name()
97-
context = sfinv.contexts[name]
98-
if not context then
99-
context = {
100-
page = sfinv.get_homepage_name(player)
101-
}
102-
sfinv.contexts[name] = context
103-
end
98+
context = {
99+
page = sfinv.get_homepage_name(player)
100+
}
101+
sfinv.contexts[name] = context
104102
end
103+
return context
104+
end
105+
106+
function sfinv.set_context(player, context)
107+
sfinv.contexts[player:get_player_name()] = context
108+
end
105109

106-
local fs = sfinv.get_formspec(player, context)
110+
function sfinv.set_player_inventory_formspec(player, context)
111+
local fs = sfinv.get_formspec(player,
112+
context or sfinv.get_or_create_context(player))
107113
player:set_inventory_formspec(fs)
108114
end
109115

116+
function sfinv.set_page(player, pagename)
117+
local context = sfinv.get_or_create_context(player)
118+
local oldpage = sfinv.pages[context.page]
119+
if oldpage and oldpage.on_leave then
120+
oldpage:on_leave(player, context)
121+
end
122+
context.page = pagename
123+
local page = sfinv.pages[pagename]
124+
if page.on_enter then
125+
page:on_enter(player, context)
126+
end
127+
sfinv.set_player_inventory_formspec(player, context)
128+
end
129+
110130
minetest.register_on_joinplayer(function(player)
111131
if sfinv.enabled then
112132
minetest.after(0.5, function()
@@ -132,30 +152,21 @@ minetest.register_on_player_receive_fields(function(player, formname, fields)
132152
return false
133153
end
134154

135-
-- Handle Events
155+
-- Was a tab selected?
136156
if fields.tabs and context.nav then
137157
local tid = tonumber(fields.tabs)
138158
if tid and tid > 0 then
139159
local id = context.nav[tid]
140160
local page = sfinv.pages[id]
141161
if id and page then
142-
local oldpage = sfinv.pages[context.page]
143-
if oldpage and oldpage.on_leave then
144-
oldpage:on_leave(player, context)
145-
end
146-
context.page = id
147-
if page.on_enter then
148-
page:on_enter(player, context)
149-
end
150-
sfinv.set_player_inventory_formspec(player, context)
162+
sfinv.set_page(player, id)
151163
end
152164
end
153-
return
154-
end
155-
156-
-- Pass to page
157-
local page = sfinv.pages[context.page]
158-
if page and page.on_player_receive_fields then
159-
return page:on_player_receive_fields(player, context, fields)
165+
else
166+
-- Pass event to page
167+
local page = sfinv.pages[context.page]
168+
if page and page.on_player_receive_fields then
169+
return page:on_player_receive_fields(player, context, fields)
170+
end
160171
end
161172
end)

0 commit comments

Comments
 (0)