92 lines
3.4 KiB
Lua
92 lines
3.4 KiB
Lua
local StaticData = require("TOC/StaticData")
|
|
local ModDataHandler = require("TOC/Handlers/ModDataHandler")
|
|
local CommonMethods = require("TOC/CommonMethods")
|
|
---------------------------
|
|
|
|
---@class CachedDataHandler
|
|
local CachedDataHandler = {}
|
|
|
|
---Reset everything cache related for that specific user
|
|
---@param username string
|
|
function CachedDataHandler.Reset(username)
|
|
CachedDataHandler.amputatedLimbs[username] = {}
|
|
CachedDataHandler.highestAmputatedLimbs[username] = {}
|
|
end
|
|
|
|
--* Amputated Limbs caching *--
|
|
CachedDataHandler.amputatedLimbs = {}
|
|
-- TODO Add an indexable table too!
|
|
|
|
---Calculate the currently amputated limbs for a certain player
|
|
---@param username string
|
|
function CachedDataHandler.CalculateAmputatedLimbs(username)
|
|
CachedDataHandler.amputatedLimbs[username] = {}
|
|
local modDataHandler = ModDataHandler.GetInstance(username)
|
|
for i=1, #StaticData.LIMBS_STR do
|
|
local limbName = StaticData.LIMBS_STR[i]
|
|
if modDataHandler:getIsCut(limbName) then
|
|
CachedDataHandler.AddAmputatedLimb(username, limbName)
|
|
end
|
|
end
|
|
end
|
|
|
|
---Add an amputated limb to the cached list for that user
|
|
---@param username string
|
|
---@param limbName string
|
|
function CachedDataHandler.AddAmputatedLimb(username, limbName)
|
|
TOC_DEBUG.print("added " .. limbName .. " to known amputated limbs for " .. username)
|
|
table.insert(CachedDataHandler.amputatedLimbs[username], limbName)
|
|
end
|
|
|
|
---Returns a table containing the cached amputated limbs
|
|
---@param username string
|
|
---@return table
|
|
function CachedDataHandler.GetAmputatedLimbs(username)
|
|
return CachedDataHandler.amputatedLimbs[username]
|
|
end
|
|
|
|
--* Highest amputated limb per side caching *--
|
|
CachedDataHandler.highestAmputatedLimbs = {}
|
|
|
|
---Calcualate the highest point of amputations achieved by the player
|
|
---@param username string
|
|
function CachedDataHandler.CalculateHighestAmputatedLimbs(username)
|
|
if CachedDataHandler.amputatedLimbs == nil or CachedDataHandler.amputatedLimbs[username] == nil then
|
|
--- This function gets ran pretty early, we need to account for the Bob stuff
|
|
-- if username == "Bob" then
|
|
-- TOC_DEBUG.print("skip, Bob is default char")
|
|
-- return
|
|
-- end
|
|
|
|
TOC_DEBUG.print("Amputated limbs weren't calculated. Trying to calculate them now for " .. username)
|
|
CachedDataHandler.CalculateAmputatedLimbs(username)
|
|
end
|
|
local amputatedLimbs = CachedDataHandler.amputatedLimbs[username]
|
|
CachedDataHandler.highestAmputatedLimbs[username] = {}
|
|
--TOC_DEBUG.print("Searching highest amputations for " .. username)
|
|
local modDataHandler = ModDataHandler.GetInstance(username)
|
|
if modDataHandler == nil then
|
|
TOC_DEBUG.print("ModDataHandler not found for " .. username)
|
|
return
|
|
end
|
|
|
|
for i=1, #amputatedLimbs do
|
|
local limbName = amputatedLimbs[i]
|
|
local index = CommonMethods.GetSide(limbName)
|
|
if modDataHandler:getIsCut(limbName) and modDataHandler:getIsVisible(limbName) then
|
|
TOC_DEBUG.print("found high amputation " .. limbName)
|
|
CachedDataHandler.highestAmputatedLimbs[username][index] = limbName
|
|
end
|
|
end
|
|
end
|
|
|
|
---Get the cached highest point of amputation for each side
|
|
---@param username string
|
|
---@return table
|
|
function CachedDataHandler.GetHighestAmputatedLimbs(username)
|
|
return CachedDataHandler.highestAmputatedLimbs[username]
|
|
end
|
|
|
|
|
|
|
|
return CachedDataHandler |