2025-06-04 05:02:57 +08:00

65 lines
2.0 KiB
Plaintext

SkillFreeCast_Client = class("SkillFreeCast_Client", SkillFreeCast)
local FindCreature = SceneCreatureProxy.FindCreature
function SkillFreeCast_Client.Create(args)
return ReusableObject.Create(SkillFreeCast_Client, true, args)
end
function SkillFreeCast_Client:Update_FreeCast(time, deltaTime, creature)
if not self.info.LogicClass.Client_PreUpdate_FreeCast(self, time, deltaTime, creature) then
self:_SwitchToNone(creature)
return false
end
return SkillFreeCast_Client.super.Update_FreeCast(self, time, deltaTime, creature)
end
function SkillFreeCast_Client:CheckTargetCreature(creature)
local targetCreature = FindCreature(self.targetCreatureGUID)
if nil == targetCreature then
return false
end
if not self:CheckTargetPosition(creature, targetCreature:GetPosition()) then
return false
end
return self.info:CheckTarget(creature, targetCreature)
end
function SkillFreeCast_Client:CheckTargetPosition(creature, targetPosition)
local launchRange = self.info:GetLaunchRange(creature)
if 0 < launchRange then
local testRange = launchRange * 1.5
local currentPosition = creature:GetPosition()
if VectorUtility.DistanceXZ(currentPosition, targetPosition) > testRange then
return false
end
end
return true
end
function SkillFreeCast_Client:_SwitchToAttack(creature)
SkillFreeCast_Client.super._SwitchToAttack(self, creature)
local targetCreature
if self.targetCreatureGUID ~= 0 then
targetCreature = FindCreature(self.targetCreatureGUID)
end
creature:Client_UseSkill(self.info:GetSkillID(creature), targetCreature, self.phaseData:GetPosition(), nil, nil, nil, nil, true, true)
end
function SkillFreeCast_Client:_SwitchToNone(creature)
local phase = self.phaseData:GetSkillPhase()
SkillFreeCast_Client.super._SwitchToNone(self, creature)
if phase == SkillPhase.FreeCast then
self:_NotifyServer(creature)
end
end
function SkillFreeCast_Client:_NotifyServer(creature)
creature:Client_UseSkillHandler(
self.random,
self.phaseData,
self.targetCreatureGUID)
end