diff --git a/src/game.lua b/src/game.lua index 520312c5f3dc436a84d1d0fe46736d3bbf4733b5..c8b06fbe160fd97c4a268380853d3b9bf0ef5789 100644 --- a/src/game.lua +++ b/src/game.lua @@ -2,46 +2,65 @@ local storage = minetest.get_mod_storage() local games = {} +local Category = {} local Game = {} -function Game.get_stat(self, player, category) - return storage:get_int("STATS." .. self.mod.. "." .. player .. "." .. category) +function Category.get_stat(self, player) + return storage:get_int("STATS." .. self.game.mod .. "." .. player .. "." .. self.name) end -function Game.set_stat(self, player, category, value) - storage:set_int("STATS." .. self.mod .. "." .. player .. "." .. category, value) +function Category.set_stat(self, player, value) + storage:set_int("STATS." .. self.game.mod .. "." .. player .. "." .. self.name, value) end -function Game.increment_stat(self, player, category, difference) - local current = self:get_stat(player, category) +function Category.increment_stat(self, player, difference) + minetest.log(dump(self)) + local current = self:get_stat(player) if current == nil then current = 0 end - self:set_stat(player, category, current + difference) + self:set_stat(player, current + difference) +end + +function Category.new(game, name, display_name, get, set, custom) + local category = { + game = game, + name = name, + display_name = display_name, + get_stat = get or Category.get_stat, + set_stat = set or Category.set_stat, + } + if custom then + for name, func in pairs(custom) do + category[name] = func + end + else + category.increment_stat = Category.increment_stat + end + return category + end function Game.get_stats(self, target) local output = self.display_name .. " statistics of " .. target for c_name, category in pairs(self.categories) do - output = output .. "\n" .. category.display_name .. ": " .. self:get_stat(target, c_name) + output = output .. "\n" .. category.display_name .. ": " .. category:get_stat(target) end return true, output end -function Game.register(mod, name, display_name, categories) +function Game.register(mod, name, display_name) local game = { mod = mod, name = name, display_name = display_name, - categories = categories, - get_stat = Game.get_stat, - set_stat = Game.set_stat, - increment_stat = Game.increment_stat, get_stats = Game.get_stats, + categories = {}, } games[mod] = game return game end magic_stats.games = games +magic_stats.Category = Category magic_stats.Game = Game