93 lines
2.8 KiB
Lua
93 lines
2.8 KiB
Lua
---@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; |