113 lines
4.1 KiB
Lua
113 lines
4.1 KiB
Lua
|
---@class BP_SpawnPickupWrapper_C:AActor
|
||
|
---@field Sphere USphereComponent
|
||
|
---@field SpawnTF UArrowComponent
|
||
|
---@field P_ItemHandle UParticleSystemComponent
|
||
|
---@field Center USceneComponent
|
||
|
---@field Box UBoxComponent
|
||
|
---@field DefaultSceneRoot USceneComponent
|
||
|
---@field ItemID int32
|
||
|
---@field CoolingTime float
|
||
|
---@field ItemScale float
|
||
|
---@field ActiveColor FLinearColor
|
||
|
---@field NotActiveColor FLinearColor
|
||
|
---@field DelayStart float
|
||
|
---@field IsActive bool
|
||
|
---@field OverlapAutoPickUp bool
|
||
|
--Edit Below--
|
||
|
---@type BP_SpawnPickupWrapper_C
|
||
|
local BP_SpawnPickupWrapper = {
|
||
|
WrapperClass = nil;
|
||
|
PickupWrapper = nil;
|
||
|
NowActive = false;
|
||
|
};
|
||
|
|
||
|
|
||
|
function BP_SpawnPickupWrapper:ReceiveBeginPlay()
|
||
|
self.SuperClass.ReceiveBeginPlay(self);
|
||
|
if UGCGameSystem.IsServer() then
|
||
|
UGCLogSystem.Log("[BP_SpawnPickupWrapper_ReceiveBeginPlay]")
|
||
|
self.WrapperClass = UE.LoadClass(UGCBackPackSystem.GetPickupWrapperClassPath(self.ItemID))
|
||
|
self.DelayStartHandle = UGCEventSystem.SetTimer(self, self.SpawnItem, self.DelayStart)
|
||
|
UGCSystemLibrary.BindBeginOverlapFunc(self.Sphere, self.OverlapPlayer, self)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function BP_SpawnPickupWrapper:OverlapPlayer(OverlappedComponent, OtherActor, OtherComp, OtherBodyIndex, bFromSweep, SweepResult)
|
||
|
if self.OverlapAutoPickUp and self.IsActive and OtherActor and OtherActor.PickupManager then
|
||
|
OtherActor.PickupManager:ServerPickUpTarget(self.PickupWrapper, 0, 1)
|
||
|
UGCLogSystem.Log("[BP_SpawnPickupWrapper_OverlapPlayer]")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function BP_SpawnPickupWrapper:GetPickupWrapper()
|
||
|
if UE.IsValid(self.PickupWrapper) then
|
||
|
return self.PickupWrapper
|
||
|
end
|
||
|
return nil
|
||
|
end
|
||
|
|
||
|
|
||
|
function BP_SpawnPickupWrapper:SpawnItem()
|
||
|
self.SpawnHandle = nil
|
||
|
self.DelayStartHandle = nil
|
||
|
if self.IsActive == false then
|
||
|
if UE.IsValid(self.WrapperClass) then
|
||
|
self.PickupWrapper = ScriptGameplayStatics.SpawnActor(UGCGameSystem.GameState, self.WrapperClass, self.SpawnTF:K2_GetComponentLocation(), self.SpawnTF:K2_GetComponentRotation(), { X = self.ItemScale, Y = self.ItemScale, Z = self.ItemScale });
|
||
|
if self.PickupWrapper.UGC_PickUpWrapperDestroyDelegate then
|
||
|
self.PickupWrapper.UGC_PickUpWrapperDestroyDelegate:Add(self.PickUpWrapperCallBack, self)
|
||
|
UGCLogSystem.Log("[BP_SpawnPickupWrapper_SpawnItem] SpawnSucceed")
|
||
|
else
|
||
|
UGCLogSystem.Log("[BP_SpawnPickupWrapper_SpawnItem] UGC_PickUpWrapperDestroyDelegate is nil")
|
||
|
end
|
||
|
self.IsActive = true
|
||
|
UGCSendRPCSystem.ActorRPCNotify(nil, self, "SetClientEffectActive", true)
|
||
|
|
||
|
else
|
||
|
UGCLogSystem.LogError("[BP_SpawnPickupWrapper_SpawnItem] WrapperClass is not Valid")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
function BP_SpawnPickupWrapper:PickUpWrapperCallBack()
|
||
|
self.IsActive = false
|
||
|
UGCSendRPCSystem.ActorRPCNotify(nil, self, "SetClientEffectActive", false)
|
||
|
if self.PickupWrapper.UGC_PickUpWrapperDestroyDelegate then
|
||
|
self.PickupWrapper.UGC_PickUpWrapperDestroyDelegate:Remove(self.PickUpWrapperCallBack, self)
|
||
|
end
|
||
|
self.SpawnHandle = UGCEventSystem.SetTimer(self, self.SpawnItem, self.CoolingTime)
|
||
|
end
|
||
|
|
||
|
function BP_SpawnPickupWrapper:OnRep_IsActive()
|
||
|
self:SetClientEffectActive(self.IsActive)
|
||
|
end
|
||
|
|
||
|
function BP_SpawnPickupWrapper:SetClientEffectActive(InIsActive)
|
||
|
UGCLogSystem.Log("[BP_SpawnPickupWrapper_SetClientEffectActive] InIsActive:%s", tostring(InIsActive))
|
||
|
if self then
|
||
|
if self.NowActive ~= InIsActive then
|
||
|
self.NowActive = InIsActive
|
||
|
if self.NowActive then
|
||
|
self.P_ItemHandle:SetColorParameter("Color", self.ActiveColor)
|
||
|
else
|
||
|
self.P_ItemHandle:SetColorParameter("Color", self.NotActiveColor)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function BP_SpawnPickupWrapper:ReceiveEndPlay()
|
||
|
if self.SpawnHandle then
|
||
|
UGCEventSystem.StopTimer(self.SpawnHandle)
|
||
|
self.SpawnHandle = nil
|
||
|
end
|
||
|
if self.DelayStartHandle then
|
||
|
UGCEventSystem.StopTimer(self.DelayStartHandle)
|
||
|
self.DelayStartHandle = nil
|
||
|
end
|
||
|
self.SuperClass.ReceiveEndPlay(self);
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
return BP_SpawnPickupWrapper;
|