c1_lua/lua/app/userdata/battle/skill/battle_skill_entity.lua
2023-05-29 20:56:46 +08:00

302 lines
6.9 KiB
Lua

local BattleBuffEntity = require "app/userdata/battle/skill/battle_buff_entity"
local BattleConst = require "app/module/battle/battle_const"
local BattleSkillEntity = class("BattleSkillEntity", BaseData)
BattleSkillEntity.sid = 0
function BattleSkillEntity:ctor(skillId, skillType, owner)
self.skillType = skillType
self.skillId = skillId
self.owner = owner
BattleSkillEntity.sid = BattleSkillEntity.sid + 1
self.sid = BattleSkillEntity.sid
self:init()
end
function BattleSkillEntity:init()
self.skillInfo = ConfigManager:getConfig("skill")[self.skillId]
self.coolingRounds = self.skillInfo.cd or 0
if self.skillInfo.cd_start then -- 开场就进入cd
self.cd = self.skillInfo.cd_start
else
self.cd = 0
end
self:initSkillEffect()
self:initEffectBlock()
if self.skillInfo.effect or self.skillInfo.name_act or self.skillInfo.skill_type then
self.available = true
else
self.available = false
end
self:clearRecordData()
self.buffConditionRel = nil
end
function BattleSkillEntity:initSkillEffect()
self.effectList = {}
self.isHurtType = false
if self.skillInfo.effect then
for k, v in ipairs(self.skillInfo.effect) do
local buffEntity = BattleBuffEntity:create()
buffEntity:init(v, self.owner, self)
if buffEntity:getIsHurtType() then
self.isHurtType = true
end
table.insert(self.effectList, buffEntity)
end
end
end
function BattleSkillEntity:initEffectBlock()
if not self.effectBlock then
self.effectBlock = {}
self.blockTime = {}
else
for i = #self.effectBlock, 1, -1 do
table.remove(self.effectBlock)
end
for i = #self.blockTime, 1, -1 do
table.remove(self.blockTime)
end
end
if self.skillInfo.effect_block then
for _, idx in ipairs(self.skillInfo.effect_block) do
table.insert(self.effectBlock, idx)
end
else
local count = 0
if self.skillInfo.effect then
count = #self.skillInfo.effect
end
table.insert(self.effectBlock, count)
end
if self.skillInfo.block_time then
for _, time in ipairs(self.skillInfo.block_time) do
table.insert(self.blockTime, time / 1000)
end
end
end
function BattleSkillEntity:startUse()
self.skillCanUseTimes = self.owner:getSkillExtraUseTimes(self.skillId) + 1
end
function BattleSkillEntity:getSkillCanUseTimes()
return self.skillCanUseTimes
end
function BattleSkillEntity:cooldown(round)
if self.cd > 0 then
self.cd = self.cd - (round or 1)
if self.cd < 0 then
self.cd = 0
end
end
end
-- 技能是否可用
function BattleSkillEntity:getIsAvailable()
if not self.available then
return false
end
return self.cd == 0
end
-- 技能释放完毕
function BattleSkillEntity:endUse()
self.cd = self.coolingRounds
if self.skillCanUseTimes then
self.skillCanUseTimes = self.skillCanUseTimes - 1
end
end
function BattleSkillEntity:addSkillEffectParams(effect)
local buffEntity
for _, entity in ipairs(self.effectList) do
if entity:getName() == effect.type then
buffEntity = entity
buffEntity:setEffectNum(buffEntity:getEffectNum() + effect.num)
end
end
if not buffEntity then
buffEntity = BattleBuffEntity:create()
buffEntity:init(effect, self.owner, self)
table.insert(self.effectList, buffEntity)
end
end
function BattleSkillEntity:addSkillEffectRound(effect)
local buffEntity
for _, entity in ipairs(self.effectList) do
if entity:getName() == effect.type then
buffEntity = entity
buffEntity:setRound(buffEntity:getRound() + effect.round)
end
end
if not buffEntity then
buffEntity = BattleBuffEntity:create()
buffEntity:init(effect, self.owner, self)
table.insert(self.effectList, buffEntity)
end
end
function BattleSkillEntity:getSkillId()
return self.skillId
end
function BattleSkillEntity:getIsPassiveType()
return self.skillType == BattleConst.SKILL_TYPE_PASSIVE
end
function BattleSkillEntity:getIsNormalType()
return self.skillType == BattleConst.SKILL_TYPE_NORMAL
end
function BattleSkillEntity:getIsActiveType()
return self.skillType == BattleConst.SKILL_TYPE_ACTIVE
end
-- 消除类技能
function BattleSkillEntity:getEliminateSkillType()
return self.skillInfo.skill_type
end
function BattleSkillEntity:isAttackOverActive()
return GConst.BattleConst.ATTACK_OVER_ACTIVE_SKILL_TYPE[self:getEliminateSkillType()]
end
-- 消除类技能参数
function BattleSkillEntity:getEliminateSkillParameter()
return self.skillInfo.skill_type_parameter
end
function BattleSkillEntity:changeSkillId(skillId)
self.skillId = skillId
self:init()
end
function BattleSkillEntity:getMoveType()
return self.skillInfo.skill_position
end
function BattleSkillEntity:getSkillAttackName()
return self.skillInfo.name_act
end
function BattleSkillEntity:getEffectList()
return self.effectList
end
function BattleSkillEntity:getEffectBlock()
return self.effectBlock
end
function BattleSkillEntity:isFinalBlock(index)
return self.effectBlock[index + 1] == nil
end
function BattleSkillEntity:getEffectBlockTime()
return self.blockTime
end
function BattleSkillEntity:getBuffCondition(index)
if not self.skillInfo.buff_condition then
return
end
return self.skillInfo.buff_condition[index]
end
function BattleSkillEntity:getBuffConditionRel(index)
if not self.skillInfo.condition_rel then
return
end
if not self.buffConditionRel then
self.buffConditionRel = {}
for i, info in ipairs(self.skillInfo.condition_rel) do
self.buffConditionRel[info[1]] = {i, info[2]}
end
end
return self.buffConditionRel[index]
end
function BattleSkillEntity:haveBuffCondition()
return self.skillInfo.condition_rel ~= nil
end
function BattleSkillEntity:getTargetType()
return self.skillInfo.obj
end
function BattleSkillEntity:getSid()
return self.sid
end
function BattleSkillEntity:getPassiveTriggerValue()
return self.skillInfo.trigger_value
end
function BattleSkillEntity:getPassiveTriggerId()
return self.skillInfo.trigger
end
function BattleSkillEntity:getFxSelf()
return self.skillInfo.fx_self
end
function BattleSkillEntity:getFxSelfDelay()
return self.skillInfo.fx_self_delay
end
function BattleSkillEntity:getFxTarget()
return self.skillInfo.fx_target
end
function BattleSkillEntity:getFxTargetDelay()
return self.skillInfo.fx_target_delay
end
function BattleSkillEntity:getShakeType()
return self.skillInfo.shake_type
end
function BattleSkillEntity:getShakeTime()
return self.skillInfo.shake_time
end
function BattleSkillEntity:getSoundHit()
return self.skillInfo.sound_hit
end
function BattleSkillEntity:getRecordData(name)
if self.recordData == nil then
self.recordData = {}
end
return self.recordData[name]
end
function BattleSkillEntity:setRecordData(name, value)
if self.recordData == nil then
self.recordData = {}
end
self.recordData[name] = value
end
function BattleSkillEntity:clearRecordData()
if self.recordData then
for k, v in pairs(self.recordData) do
self.recordData[k] = nil
end
end
end
-- 子弹时间参数
function BattleSkillEntity:getSlowDownBulletTimeParams()
return self.skillInfo.bullet_time
end
function BattleSkillEntity:getIsHurtType()
return self.isHurtType
end
return BattleSkillEntity