---@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;