2025-01-04 23:00:19 +08:00

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;