92 lines
3.3 KiB
Lua
92 lines
3.3 KiB
Lua
local PlayerHandler = require("Handlers/TOC_PlayerHandler")
|
|
local StaticData = require("TOC_StaticData")
|
|
local CommonMethods = require("TOC_Common")
|
|
|
|
---@diagnostic disable: duplicate-set-field
|
|
local CutLimbHandler = require("UI/TOC_CutLimbHandler")
|
|
|
|
-- TODO Use this to replace the sprites once a limb is cut
|
|
ISHealthBodyPartPanel = ISBodyPartPanel:derive("ISHealthBodyPartPanel")
|
|
|
|
--* Handling drag n drop of the saw *--
|
|
|
|
local og_ISHealthPanel_dropItemsOnBodyPart = ISHealthPanel.dropItemsOnBodyPart
|
|
function ISHealthPanel:dropItemsOnBodyPart(bodyPart, items)
|
|
og_ISHealthPanel_dropItemsOnBodyPart(self, bodyPart, items)
|
|
local cutLimbHandler = CutLimbHandler:new(self, bodyPart)
|
|
for _,item in ipairs(items) do
|
|
cutLimbHandler:checkItem(item)
|
|
end
|
|
if cutLimbHandler:dropItems(items) then
|
|
return
|
|
end
|
|
|
|
end
|
|
|
|
local og_ISHealthPanel_doBodyPartContextMenu = ISHealthPanel.doBodyPartContextMenu
|
|
function ISHealthPanel:doBodyPartContextMenu(bodyPart, x, y)
|
|
og_ISHealthPanel_doBodyPartContextMenu(self, bodyPart, x, y)
|
|
local playerNum = self.otherPlayer and self.otherPlayer:getPlayerNum() or self.character:getPlayerNum()
|
|
|
|
-- To not recreate it but reuse the one that has been created in the original method
|
|
local context = getPlayerContextMenu(playerNum)
|
|
local cutLimbHandler = CutLimbHandler:new(self, bodyPart)
|
|
cutLimbHandler:addToMenu(context)
|
|
end
|
|
|
|
|
|
--* Modification to handle visible amputation on the health menu *--
|
|
|
|
|
|
function ISHealthPanel.GetHighestAmputation()
|
|
-- TODO Cache this instead of doing it here!
|
|
ISHealthPanel.highestAmputations = {}
|
|
for i=1, #PlayerHandler.amputatedLimbs do
|
|
local limbName = PlayerHandler.amputatedLimbs[i]
|
|
local index = CommonMethods.GetSide(limbName)
|
|
if PlayerHandler.modDataHandler:getIsCut(limbName) and PlayerHandler.modDataHandler:getIsVisible(limbName) then
|
|
ISHealthPanel.highestAmputations[index] = limbName
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
local og_ISHealthPanel_initialise = ISHealthPanel.initialise
|
|
function ISHealthPanel:initialise()
|
|
if self.character:isFemale() then
|
|
self.sexPl = "Female"
|
|
else
|
|
self.sexPl = "Male"
|
|
end
|
|
og_ISHealthPanel_initialise(self)
|
|
end
|
|
|
|
local og_ISHealthPanel_render = ISHealthPanel.render
|
|
function ISHealthPanel:render()
|
|
og_ISHealthPanel_render(self)
|
|
|
|
-- TODO Handle another player health panel
|
|
|
|
if ISHealthPanel.highestAmputations then
|
|
-- Left Texture
|
|
if ISHealthPanel.highestAmputations["L"] then
|
|
local textureL = StaticData.HEALTH_PANEL_TEXTURES[self.sexPl][ISHealthPanel.highestAmputations["L"]]
|
|
self:drawTexture(textureL, self.healthPanel.x/2 - 2, self.healthPanel.y/2, 1, 1, 0, 0)
|
|
end
|
|
|
|
-- Right Texture
|
|
if ISHealthPanel.highestAmputations["R"] then
|
|
local textureR = StaticData.HEALTH_PANEL_TEXTURES[self.sexPl][ISHealthPanel.highestAmputations["R"]]
|
|
self:drawTexture(textureR, self.healthPanel.x/2 + 2, self.healthPanel.y/2, 1, 1, 0, 0)
|
|
end
|
|
else
|
|
ISHealthPanel.GetHighestAmputation()
|
|
end
|
|
end
|
|
|
|
-- We need to override this to force the alpha to 1
|
|
local og_ISCharacterInfoWindow_render = ISCharacterInfoWindow.prerender
|
|
function ISCharacterInfoWindow:prerender()
|
|
og_ISCharacterInfoWindow_render(self)
|
|
self.backgroundColor.a = 1
|
|
end |