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

105 lines
4.0 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: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;