diff --git a/media/lua/client/TOC/ClientSyncCommands.lua b/media/lua/client/TOC/ClientSyncCommands.lua new file mode 100644 index 0000000..3420ce1 --- /dev/null +++ b/media/lua/client/TOC/ClientSyncCommands.lua @@ -0,0 +1,33 @@ +local CommandsData = require("TOC/CommandsData") +local ClientSyncCommands = {} +local moduleName = CommandsData.modules.TOC_SYNC + +------------------------------ + +---Send the toc mod data to the server to relay it to someone else +---@param args {surgeonNum : number} +function ClientSyncCommands.SendPlayerData(args) + -- TODO get moddata and send it + sendClientCommand(moduleName, CommandsData.server.Sync.RelayPlayerData, {surgeonNum = args.surgeonNum, tocData = {}}) +end + +---Receives and store the toc mod data from another player +---@param args {patientNum : number} +function ClientSyncCommands.ReceivePlayerData(args) + local patientPl = getSpecificPlayer(args.patientNum) + local patientUsername patientPl:getUsername() + + + -- TODO Save the data somewhere that makes sense. +end + +------------------------------ + +local function OnServerSyncCommand(module, command, args) + if module == moduleName and ClientSyncCommands[command] then + args = args or {} + ClientSyncCommands[command](args) + end +end + +Events.OnServerCommand.Add(OnServerSyncCommand) diff --git a/media/lua/client/TOC/Handlers/ModDataHandler.lua b/media/lua/client/TOC/Handlers/ModDataHandler.lua index 5ba42d4..9fb0133 100644 --- a/media/lua/client/TOC/Handlers/ModDataHandler.lua +++ b/media/lua/client/TOC/Handlers/ModDataHandler.lua @@ -1,10 +1,7 @@ local StaticData = require("TOC/StaticData") ---------------- ----@alias partData { isCut : boolean?, isInfected : boolean?, isOperated : boolean?, isCicatrized : boolean?, isCauterized : boolean?, isVisible : boolean?, cicatrizationTime : number } ----@alias tocModData {Hand_L : partData, ForeArm_L : partData, UpperArm_L : partData, Hand_R : partData, ForeArm_R : partData, UpperArm_R : partData, isIgnoredPartInfected : boolean, isAnyLimbCut : boolean} ----------------- --- TODO This class should handle all the stuff related to the mod data +--This class should handle all the stuff related to the mod data ---@class ModDataHandler ---@field playerObj IsoPlayer @@ -17,6 +14,7 @@ function ModDataHandler:new(playerObj) local o = {} setmetatable(o, self) self.__index = self + -- TODO Instead of requiring a player, to make it compatible in a MP env, we should require the table containing the modData for the init o.playerObj = playerObj o.tocData = playerObj:getModData()[StaticData.MOD_NAME] @@ -68,7 +66,7 @@ end ---Set a generic boolean that toggles varies function of the mod ---@param isAnyLimbCut boolean function ModDataHandler:setIsAnyLimbCut(isAnyLimbCut) - self.tocData.isAnyLimbCut = true + self.tocData.isAnyLimbCut = isAnyLimbCut end ---Set isCut diff --git a/media/lua/server/TOC/ModData.lua b/media/lua/server/TOC/ModData.lua deleted file mode 100644 index 9160fb5..0000000 --- a/media/lua/server/TOC/ModData.lua +++ /dev/null @@ -1,8 +0,0 @@ --- Mh how do I require it from another folder? - -local TOCData = {} - - --- function TOCData.Init() --- ModData.getOrCreate(StaticData.MOD_NAME) --- end \ No newline at end of file diff --git a/media/lua/server/TOC/ServerSyncCommands.lua b/media/lua/server/TOC/ServerSyncCommands.lua new file mode 100644 index 0000000..f8fb2da --- /dev/null +++ b/media/lua/server/TOC/ServerSyncCommands.lua @@ -0,0 +1,33 @@ +local CommandsData = require("TOC/CommandsData") +local ServerSyncCommands = {} +local moduleName = CommandsData.modules.TOC_SYNC + +------------------------------ + +---A client has asked the server to ask another client to send its toc mod data +---@param surgeonPl IsoPlayer +---@param args {patientNum : number} +function ServerSyncCommands.AskPlayerData(surgeonPl, args) + local patientPl = getSpecificPlayer(args.patientNum) + local surgeonNum = surgeonPl:getOnlineID() + sendServerCommand(patientPl, moduleName, CommandsData.client.Sync.SendPlayerData, {surgeonNum = surgeonNum}) +end + +---Relay the toc mod data from a certain player to another one +---@param patientPl IsoPlayer +---@param args {surgeonNum : number, tocData : tocModData} +function ServerSyncCommands.RelayPlayerData(patientPl, args) + local surgeonPl = getSpecificPlayer(args.surgeonNum) + local patientNum = patientPl:getOnlineID() + sendServerCommand(surgeonPl, moduleName, CommandsData.client.Sync.ReceivePlayerData, {patientNum = patientNum, tocData = args.tocData}) +end + +------------------------------ + +local function OnClientSyncCommand(module, command, playerObj, args) + if module == moduleName and ServerSyncCommands[command] then + ServerSyncCommands[command](playerObj, args) + end +end + +Events.OnClientCommand.Add(OnClientSyncCommand) diff --git a/media/lua/shared/TOC/CommandsData.lua b/media/lua/shared/TOC/CommandsData.lua new file mode 100644 index 0000000..e63d725 --- /dev/null +++ b/media/lua/shared/TOC/CommandsData.lua @@ -0,0 +1,23 @@ +local CommandsData = {} + + +CommandsData.modules = { + TOC_SYNC = "TOC_SYNC" +} + + +CommandsData.client = { + Sync = { + SendPlayerData = "SendPlayerData", + ReceivePlayerData = "ReceivePlayerData" + } +} + +CommandsData.server = { + Sync = { + AskPlayerData = "AskPlayerData", + RelayPlayerData = "RelayPlayerData" + } +} + +return CommandsData \ No newline at end of file diff --git a/media/lua/shared/TOC/StaticData.lua b/media/lua/shared/TOC/StaticData.lua index 10dc10c..2a0bd1e 100644 --- a/media/lua/shared/TOC/StaticData.lua +++ b/media/lua/shared/TOC/StaticData.lua @@ -1,3 +1,7 @@ +---@alias partData { isCut : boolean?, isInfected : boolean?, isOperated : boolean?, isCicatrized : boolean?, isCauterized : boolean?, isVisible : boolean?, cicatrizationTime : number } +---@alias tocModData {Hand_L : partData, ForeArm_L : partData, UpperArm_L : partData, Hand_R : partData, ForeArm_R : partData, UpperArm_R : partData, isIgnoredPartInfected : boolean, isAnyLimbCut : boolean} + + local StaticData = {} StaticData.MOD_NAME = "TOC"