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

89 lines
1.9 KiB
Plaintext

SkillSolo = class("SkillSolo", ReusableObject)
SkillSolo.PoolSize = 5
local VectorZero = LuaVector3.zero
function SkillSolo.Create()
return ReusableObject.Create(SkillSolo, true)
end
function SkillSolo:StartSolo(creature, skillid)
-- action
local skillInfo = Game.LogicManager_Skill:GetSkillInfo(skillid)
if skillInfo then
self.soloAction = skillInfo:GetAttackAction(creature)
else
self.soloAction = nil
end
creature:Logic_PlayAction_Idle()
-- se
self:PlaySEOn(creature, skillid)
end
function SkillSolo:EndSolo(creature)
-- action
local action = self.soloAction
self.soloAction = nil
if creature.assetRole:IsPlayingAction(action) then
creature:Logic_PlayAction_Idle()
end
-- se
self:StopSEOn()
end
function SkillSolo:PlaySEOn(creature, skillid)
local skillInfo = Game.LogicManager_Skill:GetSkillInfo(skillid)
if skillInfo == nil then
return
end
local sePath = skillInfo:GetBgSEPath()
if sePath == nil then
return
end
if self.audioSource == nil then
self.audioSource = AudioUtility.GetOneShotAudioSource()
if self.audioSource == nil then
return
end
local audioTransform = self.audioSource.transform
audioTransform.parent = creature.assetRole.completeTransform
audioTransform.localPosition = VectorZero
end
local resPath = ResourcePathHelper.AudioSE(sePath)
AudioUtility.PlayOn_Path(resPath, self.audioSource)
self.audioSource.loop = true
FunctionBGMCmd.Me():StartSolo()
end
function SkillSolo:StopSEOn()
if self.audioSource ~= nil then
FunctionBGMCmd.Me():EndSolo()
end
self:ClearAudioSource()
end
function SkillSolo:ClearAudioSource()
if self.audioSource ~= nil then
self.audioSource:Stop()
self.audioSource = nil
end
end
function SkillSolo:GetSoloAction()
return self.soloAction
end
-- override begin
function SkillSolo:DoConstruct(asArray, args)
end
function SkillSolo:DoDeconstruct(asArray)
self.soloAction = nil
self:ClearAudioSource()
end
-- override end