From f72c416f5702977037dd48adbb4dc7cc9d4e3eea Mon Sep 17 00:00:00 2001 From: Kazhnuz Date: Fri, 12 Mar 2021 21:51:10 +0100 Subject: [PATCH] feat: add healing and setStatut effect support --- .../game/loot/effects/heal.lua | 50 +++++++++++++++++++ .../game/loot/effects/setstatus.lua | 15 +++++- 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/sonic-radiance.love/game/loot/effects/heal.lua b/sonic-radiance.love/game/loot/effects/heal.lua index b7e2c91..7eaef60 100644 --- a/sonic-radiance.love/game/loot/effects/heal.lua +++ b/sonic-radiance.love/game/loot/effects/heal.lua @@ -4,10 +4,60 @@ local HealEffect = ParentEffect:extend() function HealEffect:new(effect, character) self.effect = effect self.character = character + self.recovered = 0 end function HealEffect:applyEffect() + self:autosetHealFactor() + self:heal(self.recovered) +end +function HealEffect:autosetHealFactor() + local recovered = 0 + local max = self:getMaxValue() + if (self.character:isAlive()) then + if (self.effect.computationMode == "percent") then + recovered = max * (self.effect.value/100) + else + recovered = self.effect.value + end + recovered = math.min(recovered, max - self:getCurrentValue()) + end + self.recovered = recovered +end + +function HealEffect:getCurrentValue() + if (self.effect.healType == "hp") then + return self.character.hp + elseif (self.effect.healType == "mp") then + return self.character.pp + end +end + +function HealEffect:getMaxValue() + if (self.effect.healType == "hp") then + return self.character.stats.hpmax + elseif (self.effect.healType == "mp") then + return self.character.stats.ppmax + end +end + +function HealEffect:heal(value) + if (self.effect.healType == "hp") then + self.character:setHP(value, true) + elseif (self.effect.healType == "mp") then + self.character:setPP(value, true) + end +end + +function HealEffect:battleCallback(fighter) + if (self.effect.healType == "hp") then + fighter.actor:setDamageNumber(self.recovered) + fighter:updateHP() + elseif (self.effect.healType == "mp") then + fighter.actor:setDamageNumber(self.recovered, true) + fighter:updatePP() + end end function HealEffect:getText() diff --git a/sonic-radiance.love/game/loot/effects/setstatus.lua b/sonic-radiance.love/game/loot/effects/setstatus.lua index 72f9cea..b271205 100644 --- a/sonic-radiance.love/game/loot/effects/setstatus.lua +++ b/sonic-radiance.love/game/loot/effects/setstatus.lua @@ -1,13 +1,26 @@ local ParentEffect = require "game.loot.effects.parent" local StatusEffect = ParentEffect:extend() -function StatusEffect:new(effect, character) +function StatusEffect:new(effect, character, duration) self.effect = effect self.character = character + self.duration = duration or -1 end function StatusEffect:applyEffect() + if (self.effect.set) then + self:addStatut() + else + self:removeStatut() + end +end +function StatusEffect:addStatut() + self.character:addStatut(self.effect.status, self.duration) +end + +function StatusEffect:removeStatut() + self.character:removeStatut(self.effect.status) end function StatusEffect:getText()