Base for working UI

This commit is contained in:
ZioPao
2023-11-07 00:39:40 +01:00
parent 81fc637047
commit 835c57faaa
4 changed files with 118 additions and 12 deletions

View File

@@ -2,7 +2,6 @@ local ModDataHandler = require("TOC_ModDataHandler")
local StaticData = require("TOC_StaticData") local StaticData = require("TOC_StaticData")
----------- -----------
---@class PlayerHandler ---@class PlayerHandler
local PlayerHandler = {} local PlayerHandler = {}
@@ -27,16 +26,26 @@ function PlayerHandler.ManageTraits(playerObj)
end end
end end
--* Amputations *--
---comment ---Starts bleeding from the point where the saw is being used
---@param patient IsoPlayer
---@param limbName string
function PlayerHandler.DamageDuringAmputation(patient, limbName)
local bodyDamage = patient:getBodyDamage()
local bodyDamagePart = bodyDamage:getBodyPart(BodyPartType[limbName])
bodyDamagePart:setBleeding(true)
bodyDamagePart:setCut(true)
bodyDamagePart:setBleedingTime(ZombRand(10, 20))
end
---Do the amputation
---@param patient IsoPlayer ---@param patient IsoPlayer
---@param surgeon IsoPlayer ---@param surgeon IsoPlayer
---@param limbName string ---@param limbName string
---@param surgeryHelpItems table ---@param surgeryHelpItems table
function PlayerHandler.CutLimb(patient, surgeon, limbName, surgeryHelpItems) function PlayerHandler.CutLimb(patient, surgeon, limbName, surgeryHelpItems)
-- TODO Start bleeding and crap like that
local patientStats = patient:getStats() local patientStats = patient:getStats()
-- TODO Get surgeon ability from his aid skill -- TODO Get surgeon ability from his aid skill
@@ -80,6 +89,8 @@ end
function PlayerHandler.CheckInfection(character, damageType, damage) function PlayerHandler.CheckInfection(character, damageType, damage)
-- This fucking event barely works. Bleeding seems to be the only thing that triggers it -- This fucking event barely works. Bleeding seems to be the only thing that triggers it
if character ~= getPlayer() then return end
local bd = character:getBodyDamage() local bd = character:getBodyDamage()
for i=1, #StaticData.LIMBS_STRINGS do for i=1, #StaticData.LIMBS_STRINGS do

View File

@@ -73,4 +73,13 @@ for side, _ in pairs(StaticData.SIDES_STRINGS) do
end end
--- Textures
StaticData.HEALTH_PANEL_TEXTURES = {
Hand_L = getTexture("media/ui/Hand_L.png"),
ForeArm_L = getTexture("media/ui/ForeArm_L.png"),
UpeerArm_L = getTexture("media/ui/UpperArm_L.png")
}
return StaticData return StaticData

View File

@@ -1,9 +1,55 @@
local PlayerHandler = require("TOC_PlayerHandler")
require "TimedActions/ISBaseTimedAction" require "TimedActions/ISBaseTimedAction"
---@class CutLimbAction
---@field patient IsoPlayer
---@field surgeon IsoPlayer
---@field limbName string
local CutLimbAction = ISBaseTimedAction:derive("CutLimbAction") local CutLimbAction = ISBaseTimedAction:derive("CutLimbAction")
function CutLimbAction:new(patient, surgeon, partName) ---Starts CutLimbAction
print("CUTLIMBACTION") ---@param patient IsoPlayer
---@param surgeon IsoPlayer
---@param limbName string
---@return CutLimbAction
function CutLimbAction:new(patient, surgeon, limbName)
local o = {}
setmetatable(o, self)
self.__index = self
o.patient = patient
o.surgeon = surgeon
o.limbName = limbName
o.stopOnWalk = true
o.stopOnRun = true
if o.surgeon:isTimedActionInstant() then o.maxTime = 1 end
return o
end
function CutLimbAction:isValid()
-- TODO Surgeon should be close to patient
return true
end
function CutLimbAction:start()
print("Damage patient")
if self.patient == self.surgeon then
-- Self
PlayerHandler.DamageDuringAmputation(self.patient, self.limbName)
else
-- Other player
-- TODO Send Damage
end
end
function CutLimbAction:perform()
PlayerHandler.CutLimb(self.patient, self.surgeon, self.limbName, {})
ISBaseTimedAction.perform(self)
end end
return CutLimbAction return CutLimbAction

View File

@@ -1,3 +1,6 @@
local PlayerHandler = require("TOC_PlayerHandler")
local StaticData = require("TOC_StaticData")
---@diagnostic disable: duplicate-set-field ---@diagnostic disable: duplicate-set-field
local CutLimbHandler = require("UI/TOC_CutLimbHandler") local CutLimbHandler = require("UI/TOC_CutLimbHandler")
@@ -35,18 +38,55 @@ end
-- TODO We need male variations -- TODO We need male variations
local handL = getTexture("media/ui/Hand_L.png")
local forearmL = getTexture("media/ui/ForeArm_L.png") ---@return {partL : string?, partR : string?}
local upperarmL = getTexture("media/ui/UpperArm_L.png") local function GetHighestAmputation()
-- TODO Cache this instead of doing it here!
local tab = {}
local prevDepSize = {}
for i=1, #StaticData.LIMBS_STRINGS do
local limbName = StaticData.LIMBS_STRINGS[i]
local index
if string.find(limbName, "_L") then index = "L" else index = "R" end
if PlayerHandler.modDataHandler:getIsCut(limbName) then
if tab[index] ~= nil then
local cDependencySize = #StaticData.LIMBS_DEPENDENCIES[limbName]
if cDependencySize > prevDepSize[index] then
tab[index] = limbName
prevDepSize[index] = StaticData.LIMBS_DEPENDENCIES[limbName]
end
else
tab[index] = limbName
prevDepSize[index] = #StaticData.LIMBS_DEPENDENCIES[limbName]
end
end
end
return tab
end
local og_ISHealthPanel_render = ISHealthPanel.render local og_ISHealthPanel_render = ISHealthPanel.render
function ISHealthPanel:render() function ISHealthPanel:render()
og_ISHealthPanel_render(self) og_ISHealthPanel_render(self)
-- TODO Handle another player health panel
local highestAmputations = GetHighestAmputation()
-- Left Texture -- Left Texture
if highestAmputations["L"] then
local textureL = StaticData.HEALTH_PANEL_TEXTURES[highestAmputations["L"]]
self:drawTextureScaled(textureL, self.healthPanel.x/2 - 2, self.healthPanel.y/2, 123, 302, 1, 1, 0, 0)
end
if highestAmputations["R"] then
end
--self:drawTextureScaled(forearmL, self.healthPanel.x/2 - 2, self.healthPanel.y/2, 123, 302, 1, 1, 0, 0)
-- Right Texture -- Right Texture