---@class BP_Note_C:AActor ---@field RandomPosRadius USphereComponent ---@field OverlapSphere USphereComponent ---@field ParticleSystem UParticleSystemComponent ---@field DefaultSceneRoot USceneComponent ---@field UpdatePosDelayTime float --Edit Below-- local BP_Note = { StartPos = {X=0,Y=0,Z=0}; Radius = 0; bCanPickUp = true; }; function BP_Note:ReceiveBeginPlay() self.SuperClass.ReceiveBeginPlay(self); if UGCGameSystem.IsServer() then self:ParamInit() end end function BP_Note:ParamInit() self.StartPos = VectorHelper.ToLuaTable(self:K2_GetActorLocation()) self.Radius = self.RandomPosRadius:GetScaledSphereRadius() UGCSystemLibrary.BindBeginOverlapFunc(self.OverlapSphere, self.OverlapPlayer, self) end function BP_Note:OverlapPlayer(OverlappedComponent, OtherActor, OtherComp, OtherBodyIndex, bFromSweep, SweepResult) if self.bCanPickUp then if OtherActor and OtherActor.PlayerKey then UGCEventSystem.SendEvent(EventEnum.PlayerPickNote, OtherActor.PlayerKey) self.bCanPickUp = false self.UpdatePosHandle = UGCEventSystem.SetTimer(self, self.UpdatePos, self.UpdatePosDelayTime) UGCSendRPCSystem.ActorRPCNotify(nil, self, "PlayerPickUpEffect", OtherActor.PlayerKey) end end end function BP_Note:UpdatePos() self.UpdatePosHandle = nil local RandomRadius = KismetMathLibrary.RandomFloatInRange(0, self.Radius) local RandomYaw = KismetMathLibrary.RandomFloatInRange(0, 360) local AddVector = KismetMathLibrary.GreaterGreater_VectorRotator({X = RandomRadius, Y = 0, Z = 0}, {Roll = 0, Pitch = 0, Yaw = RandomYaw}) local NewPos = VectorHelper.ToLuaTable(VectorHelper.Add(self.StartPos, AddVector)) self:K2_SetActorLocation(NewPos) UGCSendRPCSystem.ActorRPCNotify(nil, self, "ClientUpdatePos", NewPos) self.bCanPickUp = true end function BP_Note:ClientUpdatePos(NewPos) -- UGCLogSystem.LogTree("[BP_Note_ClientUpdatePos]", NewPos) self:K2_SetActorLocation(NewPos) self:SetActorHiddenInGame(false) end function BP_Note:PlayerPickUpEffect(PlayerKey) self:SetActorHiddenInGame(true) if PlayerKey == UGCSystemLibrary.GetLocalPlayerKey() then SoundSystem.PlaySound(SoundSystem.ESound.AddScore) else -- SoundSystem.PlaySound(SoundSystem.ESound.) end end --[[ function BP_Note:ReceiveTick(DeltaTime) self.SuperClass.ReceiveTick(self, DeltaTime); end --]] function BP_Note:ReceiveEndPlay() self.SuperClass.ReceiveEndPlay(self); if self.UpdatePosHandle then UGCEventSystem.StopTimer(self.UpdatePosHandle) self.UpdatePosHandle = nil end end --[[ function BP_Note:GetReplicatedProperties() return end --]] --[[ function BP_Note:GetAvailableServerRPCs() return end --]] return BP_Note;