357 lines
8.5 KiB
Lua
357 lines
8.5 KiB
Lua
local BattleSkillEntity = require "app/userdata/battle/skill/battle_skill_entity"
|
|
|
|
local BattleUnitEntity = class("BattleUnitEntity", BaseData)
|
|
|
|
function BattleUnitEntity:ctor()
|
|
end
|
|
|
|
function BattleUnitEntity:init(unitData, side, team)
|
|
self.unitData = unitData
|
|
self.side = side
|
|
self.team = team
|
|
self.damageCount = 0 -- 记录伤害
|
|
self.healCount = 0 -- 记录治疗
|
|
self:initSkill()
|
|
end
|
|
|
|
function BattleUnitEntity:initSkill()
|
|
self.activeSkills = {}
|
|
if self.unitData.normalSkills then
|
|
self.normalSkills = {}
|
|
for k, v in ipairs(self.unitData.normalSkills) do
|
|
local skill = BattleSkillEntity:create(v, GConst.BattleConst.SKILL_TYPE_NORMAL, self)
|
|
table.insert(self.normalSkills, skill)
|
|
end
|
|
self.normalSkillCount = self.unitData.normalSkillCount or #self.normalSkills
|
|
else
|
|
self.normalSkillCount = self.unitData.normalSkillCount or 0
|
|
end
|
|
self.normalSkill = nil
|
|
if self.unitData.assistingSkill then
|
|
self.assistingSkill = BattleSkillEntity:create(self.unitData.assistingSkill, GConst.BattleConst.SKILL_TYPE_ASSISTING, self)
|
|
end
|
|
if self.unitData.activeSkills then
|
|
for k, v in ipairs(self.unitData.activeSkills) do
|
|
local skill = BattleSkillEntity:create(v, GConst.BattleConst.SKILL_TYPE_ACTIVE, self)
|
|
table.insert(self.activeSkills, skill)
|
|
end
|
|
end
|
|
if self.unitData.passiveSkills then
|
|
self.passiveSkills = {}
|
|
for k, v in ipairs(self.unitData.passiveSkills) do
|
|
local skill = BattleSkillEntity:create(v, GConst.BattleConst.SKILL_TYPE_PASSIVE, self)
|
|
table.insert(self.passiveSkills, skill)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUnitEntity:getIsBoss()
|
|
return self.unitData.isBoss
|
|
end
|
|
|
|
function BattleUnitEntity:getId()
|
|
return self.unitData.id
|
|
end
|
|
|
|
function BattleUnitEntity:addSkill(skillId)
|
|
local skillInfo = ConfigManager:getConfig("skill")[skillId]
|
|
if skillInfo == nil then
|
|
return nil
|
|
end
|
|
if skillInfo.effect_type == 1 then -- 主动技能
|
|
local skill = BattleSkillEntity:create(skillId, GConst.BattleConst.SKILL_TYPE_ACTIVE, self)
|
|
table.insert(self.activeSkills, skill)
|
|
return skill
|
|
elseif skillInfo.effect_type == 2 then -- 被动技能
|
|
if self.passiveSkills == nil then
|
|
self.passiveSkills = {}
|
|
end
|
|
local skill = BattleSkillEntity:create(skillId, GConst.BattleConst.SKILL_TYPE_PASSIVE, self)
|
|
table.insert(self.passiveSkills, skill)
|
|
return skill
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function BattleUnitEntity:removeSkill(skillId, sid)
|
|
local skillInfo = ConfigManager:getConfig("skill")[skillId]
|
|
if skillInfo == nil then
|
|
return nil
|
|
end
|
|
if skillInfo.effect_type == 1 then -- 主动技能
|
|
for k, v in ipairs(self.activeSkills) do
|
|
if v:getSid() == sid then
|
|
return table.remove(self.activeSkills, k)
|
|
end
|
|
end
|
|
elseif skillInfo.effect_type == 2 then -- 被动技能
|
|
if self.passiveSkills then
|
|
for k, v in ipairs(self.passiveSkills) do
|
|
if v:getSid() == sid then
|
|
return table.remove(self.passiveSkills, k)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function BattleUnitEntity:addAttr(name, num, isPercent)
|
|
return self.team:addAttr(name, num, isPercent)
|
|
end
|
|
|
|
function BattleUnitEntity:getModelId()
|
|
return self.unitData.modelId
|
|
end
|
|
|
|
function BattleUnitEntity:getMatchType()
|
|
return self.unitData.matchType
|
|
end
|
|
|
|
function BattleUnitEntity:getSide()
|
|
return self.side
|
|
end
|
|
|
|
function BattleUnitEntity:setIsMainUnit(isMainUnit)
|
|
self.isMainUnit = isMainUnit
|
|
end
|
|
|
|
function BattleUnitEntity:getIsMainUnit()
|
|
return self.isMainUnit
|
|
end
|
|
|
|
function BattleUnitEntity:getBody()
|
|
return self.unitData.body
|
|
end
|
|
|
|
function BattleUnitEntity:getNormalSkill(reRandom)
|
|
if self.normalSkills == nil then
|
|
return nil
|
|
end
|
|
if not reRandom then
|
|
return self.normalSkill
|
|
end
|
|
if self.normalSkillIndex == nil then
|
|
self.normalSkillIndex = math.random(1, #self.normalSkills)
|
|
else
|
|
local temp = self.normalSkills[#self.normalSkills]
|
|
self.normalSkills[#self.normalSkills] = self.normalSkills[self.normalSkillIndex]
|
|
self.normalSkills[self.normalSkillIndex] = temp
|
|
self.normalSkillIndex = math.random(1, #self.normalSkills - 1)
|
|
end
|
|
self.normalSkill = self.normalSkills[self.normalSkillIndex]
|
|
return self.normalSkill
|
|
end
|
|
|
|
function BattleUnitEntity:getAssistingSkill()
|
|
return self.assistingSkill
|
|
end
|
|
|
|
function BattleUnitEntity:getActiveSkillCount()
|
|
return #self.activeSkills
|
|
end
|
|
|
|
function BattleUnitEntity:getAvailableActiveSkill(index)
|
|
local skill = self.activeSkills[index]
|
|
if skill == nil then
|
|
return
|
|
end
|
|
if skill:getIsAvailable() then
|
|
return skill
|
|
end
|
|
return nil
|
|
end
|
|
|
|
function BattleUnitEntity:getNormalSkillCount()
|
|
return self.normalSkillCount
|
|
end
|
|
|
|
function BattleUnitEntity:getPassiveSkills()
|
|
return self.passiveSkills
|
|
end
|
|
|
|
function BattleUnitEntity:changeSkillId(originSkillId, tartgetSkillId)
|
|
for _, skillEntity in ipairs(self.activeSkills) do
|
|
if skillEntity:getSkillId() == originSkillId then
|
|
skillEntity:changeSkillId(tartgetSkillId)
|
|
return
|
|
end
|
|
end
|
|
if self.passiveSkills then
|
|
for _, skillEntity in ipairs(self.passiveSkills) do
|
|
if skillEntity:getSkillId() == originSkillId then
|
|
skillEntity:changeSkillId(tartgetSkillId)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUnitEntity:addSkillParams(skillId, effect)
|
|
for _, skillEntity in ipairs(self.activeSkills) do
|
|
if skillEntity:getSkillId() == skillId then
|
|
skillEntity:addSkillEffectParams(effect)
|
|
break
|
|
end
|
|
end
|
|
if self.passiveSkills then
|
|
for _, skillEntity in ipairs(self.passiveSkills) do
|
|
if skillEntity:getSkillId() == skillId then
|
|
skillEntity:addSkillEffectParams(effect)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUnitEntity:addSkillRound(skillId, effect)
|
|
for _, skillEntity in ipairs(self.activeSkills) do
|
|
if skillEntity:getSkillId() == skillId then
|
|
skillEntity:addSkillEffectRound(effect)
|
|
break
|
|
end
|
|
end
|
|
if self.passiveSkills then
|
|
for _, skillEntity in ipairs(self.passiveSkills) do
|
|
if skillEntity:getSkillId() == skillId then
|
|
skillEntity:addSkillEffectRound(effect)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function BattleUnitEntity:getDamageCount()
|
|
return self.damageCount
|
|
end
|
|
|
|
-- 伤害统计
|
|
function BattleUnitEntity:addDamageCount(num)
|
|
if num > 0 then -- 加血统计
|
|
self.healCount = self.healCount + num
|
|
else -- 伤害统计
|
|
self.damageCount = self.damageCount - num
|
|
end
|
|
end
|
|
|
|
function BattleUnitEntity:takeDamageOrCure(num)
|
|
return self.team:takeDamageOrCure(num)
|
|
end
|
|
|
|
function BattleUnitEntity:getHp()
|
|
return self.team:getHp()
|
|
end
|
|
|
|
function BattleUnitEntity:getMaxHp()
|
|
return self.team:getMaxHp()
|
|
end
|
|
|
|
function BattleUnitEntity:getHpPercent()
|
|
return self.team:getHpPercent()
|
|
end
|
|
|
|
function BattleUnitEntity:getAtk()
|
|
return self.team:getAtk(self.unitData.matchType)
|
|
end
|
|
|
|
function BattleUnitEntity:getDmgAddition()
|
|
return self.team:getDmgAddition(self.unitData.matchType)
|
|
end
|
|
|
|
function BattleUnitEntity:getDmgDec(matchType)
|
|
return self.team:getDmgDec(matchType)
|
|
end
|
|
|
|
function BattleUnitEntity:getWeakness(matchType)
|
|
return self.team:getWeakness(matchType)
|
|
end
|
|
|
|
function BattleUnitEntity:getCrit()
|
|
return self.team:getCrit()
|
|
end
|
|
|
|
function BattleUnitEntity:getCrittime()
|
|
return self.team:getCrittime()
|
|
end
|
|
|
|
function BattleUnitEntity:getCureAddition()
|
|
return self.team:getCureAddition()
|
|
end
|
|
|
|
function BattleUnitEntity:getNormalAttackAddCount()
|
|
return self.team:getNormalAttackAddCount()
|
|
end
|
|
|
|
function BattleUnitEntity:addLimit(name)
|
|
self.team:addLimit(name)
|
|
end
|
|
|
|
function BattleUnitEntity:removeLimit(name)
|
|
self.team:removeLimit(name)
|
|
end
|
|
|
|
function BattleUnitEntity:getIsLimit()
|
|
return self.team:getIsLimit()
|
|
end
|
|
|
|
function BattleUnitEntity:addShield(num)
|
|
self.team:addShield(num)
|
|
end
|
|
|
|
function BattleUnitEntity:getShieldHp()
|
|
return self.team:getShieldHp()
|
|
end
|
|
|
|
function BattleUnitEntity:getShieldRebound()
|
|
return self.team:getShieldRebound()
|
|
end
|
|
|
|
function BattleUnitEntity:addMaxHp(num)
|
|
self.team:addMaxHp(num)
|
|
end
|
|
|
|
function BattleUnitEntity:getBlock()
|
|
return self.team:getBlock()
|
|
end
|
|
|
|
function BattleUnitEntity:getExp()
|
|
return self.unitData.exp
|
|
end
|
|
|
|
function BattleUnitEntity:getExpTime()
|
|
return self.team:getExpTime()
|
|
end
|
|
|
|
function BattleUnitEntity:getIsDead()
|
|
return self.team:getIsDead()
|
|
end
|
|
|
|
function BattleUnitEntity:addSkillExtraUseTimes(skillId, count)
|
|
if self.skillExtraUseTimes == nil then
|
|
self.skillExtraUseTimes = {}
|
|
end
|
|
self.skillExtraUseTimes[skillId] = (self.skillExtraUseTimes[skillId] or 0) + count
|
|
end
|
|
|
|
function BattleUnitEntity:getSkillExtraUseTimes(skillId)
|
|
if self.skillExtraUseTimes == nil then
|
|
return 0
|
|
end
|
|
return self.skillExtraUseTimes[skillId] or 0
|
|
end
|
|
|
|
function BattleUnitEntity:getTeamRecordData(name)
|
|
return self.team:getRecordData(name)
|
|
end
|
|
|
|
function BattleUnitEntity:setTeamRecordData(name, value)
|
|
self.team:setRecordData(name, value)
|
|
end
|
|
|
|
function BattleUnitEntity:onRoundEnd()
|
|
for k, v in ipairs(self.activeSkills) do
|
|
v:cooldown()
|
|
end
|
|
end
|
|
|
|
return BattleUnitEntity |