local CastSystem = {} local _tempV1 = FP.newV1(0) local SHOVE_DIAMETER_THRESHOLD = FP.newV1(4) function CastSystem.OnCheckNeedCastWhenAttack(entity, command, skillID) if SystemManager.GetSkillKeyPositionBySkillIndex(entity,command.SkillIndex) == LuaConst.NormalSkillKeyPos and entity._logicInitData.IsPlayer then --玩家 --必须是第一技能的,切追击技能cd好了 local skillData = entity:GetSkillData(skillID) if skillID ~= skillData.BelongTo then return skillID end local castSkillID = entity.components.skillBase.CastSkillID if not castSkillID then return skillID end if not entity.components.skillBase.CanUseCastSkill then return skillID end local castSkillData = entity:GetSkillData(castSkillID) if not entity.components.skillBase:CanUseSkill(castSkillData) then return skillID end --重新选取目标(用普通技能的数据,不要用追击技数据 - 策划需求) local target = entity.components.target.Target --目标不为空,且技能配置的目标选择范围大于0时,检测是否需要追击 if target and skillData and skillData.ChooseRadius > FP.Const.Zero then local targetPos = target.components.move.LogicPos local selfPos = entity.components.move.LogicPos local disSqr = FP.V2.SqrMagnitude(targetPos - selfPos) -- old↓ 是否释放追击技能考虑了体积半径,后来发现不应该考虑体积半径,否则策划配表容易配错 -- local shoveDiameter1 = entity.components.base:GetAverageRadius() -- local shoveDiameter2 = target.components.base:GetAverageRadius() -- _tempV1:Reset(shoveDiameter1):Add(shoveDiameter2):Div(2):Add(0.5) -- (shoveDiameter1 + shoveDiameter2) / 2 + 0.5 --0.5是格子修正 -- -- 此时 _tempV1 含义就是原作者的 shoveDist -- if _tempV1 >= SHOVE_DIAMETER_THRESHOLD then -- _tempV1:Add(skillData.CastRadius) -- _tempV1:Mul(_tempV1) -- else -- _tempV1:Reset(skillData.CastRadius):Mul(skillData.CastRadius)-- skillData.CastRadius * skillData.CastRadius -- end -- old↑ --new↓ 不再考虑体积半径 _tempV1:Reset(skillData.CastRadius):Mul(skillData.CastRadius) --new↑ if disSqr > _tempV1 then command.MoveDir = targetPos - selfPos command.RotateDir:Reset(command.MoveDir) skillID = castSkillID end end end return skillID end return CastSystem