local FighterParent = Object:extend() local counter = 0 function FighterParent:new(owner, isHero, id) self.owner = owner self.turnSystem = owner.turnSystem self.world = owner.world self.isHero = isHero self.assets = self.turnSystem.scene.assets -- Note : l'ID est ici relatif à chaque quand, il n'est donc pas unique, -- ce qui est unique étant le combo id + isHero self.id = id self.abstract = self:getAbstract() self.actor = self:createActor() self.isActive = false self.isAlive = true self.isDefending = false self.action = nil end -- LIFE handling functions function FighterParent:setHP(value, relative) local relativeNumber = value if (not relative) then relativeNumber = relative - self.abstract.hp end self.abstract:setHP(value, relative) self.actor:setDamageNumber(relativeNumber) self:updateHP() end function FighterParent:setPP(value, relative) self.abstract:setPP(value, relative) self:updatePP() end function FighterParent:applyDeath() if (self.abstract:isAlive() ~= self.isAlive ) then if (self.abstract:isAlive()) then self:revive() else self:die() end end end function FighterParent:revive() self.isAlive = true self.isDefending = false self.actor:revive() end function FighterParent:die() self.isAlive = false self.actor:die() end function FighterParent:updatePP() -- Fonction vide end function FighterParent:updateHP() -- Fonction vide end function FighterParent:sendDamage(target, value, accuracy, isSpecial, isAerial) local stats = self:getStats() local value = value / 10 if (isSpecial) then value = value * stats.power else value = value * stats.attack end core.debug:print("cbs/battler", "Sending " .. value .." damage at " .. target.name) target:receiveDamage(value, accuracy, isSpecial, isAerial, self) end function FighterParent:receiveDamage(value, accuracy, isSpecial, isAerial, fromWho) local stats = self:getStats() if (isSpecial) then value = value / stats.mind else value = value / stats.defense end core.debug:print("cbs/fighter", "Taken " .. value .. " damage" ) if (self.isDefending) then self:setHP(value * -0.66, true) else self:setHP(value * -1, true) self.actor:getHurt() end end function FighterParent:getAbstract() return {} end function FighterParent:createActor() return {} end function FighterParent:update(dt) if (self.action ~= nil) then if (self.action.isStarted) then self.action:update(dt) end end end function FighterParent:updateAssets(dt) -- Vide pour l'instant end function FighterParent:setActive() counter = 0 self.isActive = true if (self.isDefending) then self.actor:changeAnimation("idle") self.actor.isDefending = false end self:startAction() end function FighterParent:setInactive() self.isActive = false self.turnSystem:endAction() end function FighterParent:getNbrActionPerTurn() return self.abstract.turns end function FighterParent:getStats() return self.abstract:getStats() end function FighterParent:startAction() end function FighterParent:finishAction() self.action = nil self:setInactive() end function FighterParent:getUniqueIdentificator() local side = 1 if (self.isHero == false) then side = -1 end return self.id * side end function FighterParent:getNonUniqueIdentificator() return self.id end function FighterParent:canFight() return self.isAlive end -- DRAW FUNCTIONS function FighterParent:drawIcon(x, y) love.graphics.setColor(1, 1, 1, 1) love.graphics.rectangle("fill", x, y, 16, 16) end return FighterParent