Skip to content

Commit

Permalink
update formspec handling accordsing to best practices https://forum.m…
Browse files Browse the repository at this point in the history
  • Loading branch information
fluxionary committed Jan 14, 2023
1 parent 037e0f9 commit a279e7e
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 15 deletions.
26 changes: 23 additions & 3 deletions api/formspec.lua
@@ -1,5 +1,5 @@
local F = minetest.formspec_escape
local string_to_pos = minetest.string_to_pos
local show_formspec = minetest.show_formspec

local S = smartshop.S
local api = smartshop.api
Expand All @@ -18,9 +18,29 @@ local history_max = smartshop.settings.history_max

--------------------

local pos_by_player_name = {}

function api.show_formspec(player, pos, formspec)
local player_name = player:get_player_name()
pos_by_player_name[player_name] = pos
show_formspec(player_name, "smartshop:form", formspec)
end

function api.close_formspec(player)
local player_name = player:get_player_name()
pos_by_player_name[player_name] = nil
end

minetest.register_on_leaveplayer(function(player)
api.close_formspec(player)
end)

function api.on_player_receive_fields(player, formname, fields)
local spos = formname:match("^smartshop:(.+)$")
local pos = spos and string_to_pos(spos)
if formname ~= "smartshop:form" then
return
end
local player_name = player:get_player_name()
local pos = pos_by_player_name[player_name]
local obj = api.get_object(pos)
if obj then
obj:receive_fields(player, fields)
Expand Down
14 changes: 5 additions & 9 deletions api/shop_class.lua
@@ -1,7 +1,6 @@
local get_node = minetest.get_node
local parse_json = minetest.parse_json
local pos_to_string = minetest.pos_to_string
local show_formspec = minetest.show_formspec
local swap_node = minetest.swap_node
local write_json = minetest.write_json

Expand Down Expand Up @@ -505,10 +504,7 @@ function shop_class:show_formspec(player, force_client_view)
formspec = api.build_client_formspec(self)
end

local formname = ("smartshop:%s"):format(self:get_pos_as_string())
local player_name = player:get_player_name()

show_formspec(player_name, formname, formspec)
api.show_formspec(player, self.pos, formspec)
end

function shop_class:show_history(player)
Expand All @@ -517,10 +513,8 @@ function shop_class:show_history(player)
end

local formspec = api.build_history_formspec(self)
local formname = ("smartshop:%s"):format(self:get_pos_as_string())
local player_name = player:get_player_name()

show_formspec(player_name, formname, formspec)
api.show_formspec(player, self.pos, formspec)
end

local function get_buy_index(pressed)
Expand All @@ -535,7 +529,9 @@ function shop_class:receive_fields(player, fields)
local buy_index = get_buy_index(fields)
local changed = false

if buy_index then
if fields.quit then
api.close_formspec(player)
elseif buy_index then
api.try_purchase(player, self, buy_index)
self:show_formspec(player, true)
elseif self:is_owner(player) then
Expand Down
9 changes: 6 additions & 3 deletions api/storage_class.lua
Expand Up @@ -55,14 +55,17 @@ function storage_class:show_formspec(player)
return
end

local player_name = player:get_player_name()
local formspec = api.build_storage_formspec(self)
local formname = ("smartshop:%s"):format(self:get_pos_as_string())

minetest.show_formspec(player_name, formname, formspec)
api.show_formspec(player, self.pos, formspec)
end

function storage_class:receive_fields(player, fields)
if fields.quit then
api.close_formspec(player)
return
end

if not self:is_owner(player) then
return
end
Expand Down

0 comments on commit a279e7e

Please sign in to comment.