106 lines
3.4 KiB
Lua
106 lines
3.4 KiB
Lua
---@class BP_Battery_C:AActor
|
|
---@field StaticMesh2 UStaticMeshComponent
|
|
---@field SM_CG019_Catapult_Cannon_04 UStaticMeshComponent
|
|
---@field Scene USceneComponent
|
|
---@field Particle UParticleSystemComponent
|
|
---@field Arrow UArrowComponent
|
|
---@field GunRoot USceneComponent
|
|
---@field DefaultSceneRoot USceneComponent
|
|
---@field ShowTime float
|
|
---@field FireAnimTime float
|
|
---@field FireScaleCurve UCurveVector
|
|
--Edit Below--
|
|
---@type BP_Battery_C
|
|
local BP_Battery = {
|
|
bIsFireAnimPlaying = false;
|
|
StartFireTime = 0;
|
|
StartFireAnimTime = 0;
|
|
};
|
|
|
|
|
|
|
|
|
|
function BP_Battery:ReceiveBeginPlay()
|
|
self.SuperClass.ReceiveBeginPlay(self);
|
|
if UGCGameSystem.IsServer() then
|
|
else
|
|
self:SetActorHiddenInGame(true)
|
|
end
|
|
UGCLogSystem.Log("[BP_Battery_ReceiveBeginPlay]" .. KismetSystemLibrary.GetObjectName(self))
|
|
end
|
|
|
|
|
|
function BP_Battery:ReceiveTick(DeltaTime)
|
|
self.SuperClass.ReceiveTick(self, DeltaTime);
|
|
|
|
if self.bIsFireAnimPlaying then
|
|
local AnimTime = UGCSystemLibrary.GetGameTime() - self.StartFireAnimTime
|
|
if AnimTime >= self.FireAnimTime then
|
|
AnimTime = self.FireAnimTime
|
|
self.bIsFireAnimPlaying = false
|
|
self:FireEffect()
|
|
end
|
|
local CmpScale = self.FireScaleCurve:GetVectorValue(AnimTime / self. FireAnimTime)
|
|
-- UGCLogSystem.Log("[BP_Battery_ReceiveTick] CmpScale:%s", VectorHelper.ToString(CmpScale))
|
|
self.GunRoot:SetWorldScale3D(CmpScale)
|
|
end
|
|
end
|
|
|
|
|
|
function BP_Battery:FireBullet(Pos, Rot, BulletActor, InStartFireTime)
|
|
self:K2_SetActorLocation(Pos)
|
|
self:K2_SetActorRotation(Rot)
|
|
BulletActor:K2_SetActorLocation(self.Arrow:K2_GetComponentLocation())
|
|
BulletActor:K2_SetActorRotation(self.Arrow:K2_GetComponentRotation())
|
|
|
|
if UGCGameSystem.IsServer() then
|
|
self.StartFireTime = UGCGameSystem.GameState:GetServerGameTime()
|
|
BulletActor:PrepareToFire(self.StartFireTime, self.FireAnimTime)
|
|
UGCLogSystem.Log("[BP_Battery_FireBullet] Pos:%s, Rot:%s, BulletActor:%s, StartFireTime:%s", VectorHelper.ToString(Pos), VectorHelper.RotToString(Rot), KismetSystemLibrary.GetObjectName(BulletActor), tostring(self.StartFireTime))
|
|
UGCSendRPCSystem.ActorRPCNotify(nil, self, "FireBullet", Pos, Rot, BulletActor, self.StartFireTime)
|
|
else
|
|
self:SetActorHiddenInGame(false)
|
|
self.bIsFireAnimPlaying = true
|
|
self.StartFireTime = InStartFireTime
|
|
BulletActor:PrepareToFire(self.StartFireTime, self.FireAnimTime)
|
|
self.StartFireAnimTime = UGCSystemLibrary.GetGameTime()
|
|
-- 延迟隐藏Actor
|
|
if self.HideActorHandle then
|
|
UGCEventSystem.StopTimer(self.HideActorHandle)
|
|
end
|
|
self.HideActorHandle = UGCEventSystem.SetTimer(self, function()
|
|
self:SetActorHiddenInGame(true)
|
|
self.HideActorHandle = nil
|
|
end, self.ShowTime)
|
|
end
|
|
end
|
|
|
|
function BP_Battery:FireEffect()
|
|
self.Particle:SetActive(true, true);
|
|
SoundSystem.PlaySound(SoundSystem.ESound.Boom2, self:K2_GetActorLocation())
|
|
end
|
|
|
|
|
|
|
|
function BP_Battery:ReceiveEndPlay()
|
|
self.SuperClass.ReceiveEndPlay(self);
|
|
if self.HideActorHandle then
|
|
UGCEventSystem.StopTimer(self.HideActorHandle)
|
|
self.HideActorHandle = nil
|
|
end
|
|
end
|
|
|
|
|
|
--function BP_Battery:GetReplicatedProperties()
|
|
-- return { "Bullets", "Lazy" }
|
|
--end
|
|
|
|
--[[
|
|
function BP_Battery:GetAvailableServerRPCs()
|
|
return
|
|
end
|
|
--]]
|
|
|
|
|
|
|
|
return BP_Battery; |