POC for health panels in MP

This commit is contained in:
ZioPao
2023-11-13 03:04:12 +01:00
parent 30f343a7de
commit 980545a07e
9 changed files with 155 additions and 83 deletions

View File

@@ -29,6 +29,8 @@ function ModDataHandler:new(username, isResetForced)
TOC_DEBUG.print("tocData in ModDataHandler for " .. username .. " is nil, creating it now")
self:setup(key)
end
-- Transmit it to the server
ModData.transmit(key)
ModDataHandler.instances[username] = o
@@ -59,8 +61,7 @@ function ModDataHandler:setup(key)
-- Add it to global mod data
ModData.add(key, self.tocData)
-- Transmit it to the server
ModData.transmit(key)
end
@@ -169,12 +170,26 @@ function ModDataHandler:setLimbParams(limbName, ampStatus, cicatrizationTime)
end
--* Global Mod Data Apply *--
--* Global Mod Data Handling *--
function ModDataHandler:apply()
ModData.transmit(CommandsData.GetKey(self.username))
end
function ModDataHandler.ReceiveData(key, table)
TOC_DEBUG.print("receive data for " .. key)
if table == {} or table == nil then
TOC_DEBUG.print("table is nil... returning")
return
end
ModData.add(key, table) -- Add it to the client mod data (not sure)
local username = key:sub(5)
ModDataHandler.GetInstance(username)
end
Events.OnReceiveGlobalModData.Add(ModDataHandler.ReceiveData)
---@param username string?
---@return ModDataHandler
function ModDataHandler.GetInstance(username)

View File

@@ -18,7 +18,7 @@ local PlayerHandler = {}
PlayerHandler.amputatedLimbs = {}
---Setup the Player Handler and modData
---Setup the Player Handler and modData, only for local client
---@param playerObj IsoPlayer
---@param isForced boolean?
function PlayerHandler.InitializePlayer(playerObj, isForced)
@@ -27,15 +27,9 @@ function PlayerHandler.InitializePlayer(playerObj, isForced)
TOC_DEBUG.print("initializing " .. username)
local modDataHandler = ModDataHandler:new(username, isForced)
PlayerHandler.playerObj = playerObj
-- Calculate amputated limbs at startup
PlayerHandler.amputatedLimbs[username] = {}
for i=1, #StaticData.LIMBS_STRINGS do
local limbName = StaticData.LIMBS_STRINGS[i]
if modDataHandler:getIsCut(limbName) then
PlayerHandler.AddLocalAmputatedLimb(username, limbName)
end
end
-- Calculate amputated limbs at startup
PlayerHandler.CacheAmputatedLimbs(username)
-- Since isForced is used to reset an existing player data, we're gonna clean their ISHealthPanel table too
if isForced then
@@ -60,8 +54,23 @@ function PlayerHandler.ManageTraits(playerObj)
end
end
---Cycle through all the limbs and caches the ones that the player cut off
---@param username string
function PlayerHandler.CacheAmputatedLimbs(username)
PlayerHandler.amputatedLimbs[username] = {}
local modDataHandler = ModDataHandler.GetInstance(username)
for i=1, #StaticData.LIMBS_STRINGS do
local limbName = StaticData.LIMBS_STRINGS[i]
if modDataHandler:getIsCut(limbName) then
PlayerHandler.AddLocalAmputatedLimb(username, limbName)
end
end
end
---Cache the currently amputated limbs
---@param limbName string
---@private
function PlayerHandler.AddLocalAmputatedLimb(username, limbName)
TOC_DEBUG.print("added " .. limbName .. " to known amputated limbs for " .. username)
table.insert(PlayerHandler.amputatedLimbs[username], limbName) -- TODO This should be player specific, not generic