Add some counter functions for convenience

This commit is contained in:
Wuzzy 2016-08-01 16:05:23 +02:00
parent db3ecde088
commit 97779f65a7

View File

@ -22,6 +22,7 @@ function doc.new_category(id, def)
if doc.data.categories[id] == nil and id ~= nil then if doc.data.categories[id] == nil and id ~= nil then
doc.data.categories[id] = {} doc.data.categories[id] = {}
doc.data.categories[id].entries = {} doc.data.categories[id].entries = {}
doc.data.categories[id].entry_count = 0
doc.data.categories[id].def = def doc.data.categories[id].def = def
doc.data.categories[id].entry_aliases = {} doc.data.categories[id].entry_aliases = {}
table.insert(doc.data.category_order, id) table.insert(doc.data.category_order, id)
@ -35,6 +36,7 @@ end
function doc.new_entry(category_id, entry_id, def) function doc.new_entry(category_id, entry_id, def)
if doc.data.categories[category_id] ~= nil then if doc.data.categories[category_id] ~= nil then
doc.data.categories[category_id].entries[entry_id] = def doc.data.categories[category_id].entries[entry_id] = def
doc.data.categories[category_id].entry_count = doc.data.categories[category_id].entry_count + 1
return true return true
else else
return false return false
@ -45,10 +47,14 @@ end
function doc.mark_entry_as_viewed(playername, category_id, entry_id) function doc.mark_entry_as_viewed(playername, category_id, entry_id)
if doc.data.players[playername].stored_data.viewed[category_id] == nil then if doc.data.players[playername].stored_data.viewed[category_id] == nil then
doc.data.players[playername].stored_data.viewed[category_id] = {} doc.data.players[playername].stored_data.viewed[category_id] = {}
doc.data.players[playername].stored_data.viewed_count[category_id] = 0
end
if doc.data.players[playername].stored_data.viewed[category_id][entry_id] ~= true then
doc.data.players[playername].stored_data.viewed[category_id][entry_id] = true
doc.data.players[playername].stored_data.viewed_count[category_id] = doc.data.players[playername].stored_data.viewed_count[category_id] + 1
-- Needed because viewed entries get a different color
doc.data.players[playername].entry_textlist_needs_updating = true
end end
doc.data.players[playername].stored_data.viewed[category_id][entry_id] = true
-- Needed because viewed entries get a different color
doc.data.players[playername].entry_textlist_needs_updating = true
end end
-- Returns true if the specified entry has been viewed by the player -- Returns true if the specified entry has been viewed by the player
@ -117,6 +123,26 @@ function doc.add_entry_alias(category_id, entry_id, alias)
doc.data.categories[category_id].entry_aliases[alias] = entry_id doc.data.categories[category_id].entry_aliases[alias] = entry_id
end end
-- Returns number of categories
function doc.get_category_count()
return #doc.data.category_order
end
-- Returns number of entries in category
function doc.get_entry_count(category_id)
return doc.data.categories[category_id].entry_count
end
-- Returns how many entries have been viewed by the player
function doc.get_viewed_count(playername, category_id)
local count = doc.data.players[playername].stored_data.viewed_count[category_id]
if count == nil then
return 0
else
return count
end
end
--[[ Functions for internal use ]] --[[ Functions for internal use ]]
function doc.formspec_core(tab) function doc.formspec_core(tab)
@ -342,6 +368,8 @@ minetest.register_on_joinplayer(function(player)
doc.data.players[playername].stored_data = {} doc.data.players[playername].stored_data = {}
-- Contains viewed entries -- Contains viewed entries
doc.data.players[playername].stored_data.viewed = {} doc.data.players[playername].stored_data.viewed = {}
-- Count viewed entries
doc.data.players[playername].stored_data.viewed_count = {}
end) end)
minetest.register_on_leaveplayer(function(player) minetest.register_on_leaveplayer(function(player)