112 lines
3.6 KiB
Lua
Raw Permalink Normal View History

2025-01-04 23:00:19 +08:00
---@class BP_LandMine_C:BP_PlaceItemBase_C
---@field P_MiniGames_Boom_01 UParticleSystemComponent
---@field SphereDamage USphereComponent
---@field Sphere USphereComponent
---@field StaticMesh UStaticMeshComponent
---@field ExplosionSound UAkAudioEvent
--Edit Below--
local PlaceItemBase = require("Script.Blueprint.PlaceItems.BP_PlaceItemBase")
local BP_LandMine = setmetatable(
{
bIsCooling = false;
Damage = 0;
CoolingTime = 0;
},
{
__index = PlaceItemBase,
__metatable = PlaceItemBase
}
)
function BP_LandMine:ReceiveBeginPlay()
self.SuperClass.ReceiveBeginPlay(self);
PlaceItemBase.ParentBeginPlay(self)
if self:HasAuthority() then
UGCSystemLibrary.BindBeginOverlapFunc(self.Sphere, self.OnBeginOverlap, self)
end
self.Damage = PlacementModeConfig.ItemInfo[EPlaceItemType.LandMine].Param.Damage
self.CoolingTime = PlacementModeConfig.ItemInfo[EPlaceItemType.LandMine].Param.CoolingTime
end
function BP_LandMine:ReceiveEndPlay()
PlaceItemBase.ParentEndPlay(self)
self.SuperClass.ReceiveEndPlay(self);
end
function BP_LandMine:SetActive(InActive)
-- UGCLogSystem.Log("[BP_LandMine_SetActive]")
PlaceItemBase.SetActive(self, InActive)
if self.CoolingTimeHandle then
UGCEventSystem.StopTimer(self.CoolingTimeHandle)
self.CoolingTimeHandle = nil
end
self.bIsCooling = false
end
function BP_LandMine:OnBeginOverlap(OverlappedComp, Other, OtherComp, OtherBodyIndex, bFromSweep, SweepResult)
-- UGCLogSystem.Log("[BP_LandMine_OnBeginOverlap] bIsCooling:%s, bEnableActive:%s", tostring(self.bIsCooling), tostring(self.bEnableActive))
if self.bEnableActive and not self.bIsCooling and Other.PlayerKey ~= UGCGameSystem.GameState:GetNowDefender() then
UGCLogSystem.Log("[BP_LandMine_OnBeginOverlap]2")
self:Explosion()
self.bIsCooling = true
UGCEventSystem.SetTimer(self, function() self.bIsCooling = false end, self.CoolingTime)
end
end
function BP_LandMine:Explosion()
local AllPawn = UGCGameSystem.GetAllPlayerPawn()
local Defender = UGCGameSystem.GameState:GetNowDefender()
local DefenderPC = UGCGameSystem.GetPlayerControllerByPlayerKey(Defender)
for i, v in pairs(AllPawn) do
if v.PlayerKey ~= Defender and self.SphereDamage:IsOverlappingActor(v) then
if PlacementModeConfig.IsPlaceMode() then
UGCGameSystem.ApplyDamage(v, self.Damage, v:GetController(), self, EDamageType.UGCCustomDamageType + 1)
UGCLogSystem.Log("[BP_LandMine_Explosion]1 Damage:%s", tostring(self.Damage))
else
UGCGameSystem.ApplyDamage(v, self.Damage, DefenderPC, self, EDamageType.UGCCustomDamageType + 1)
UGCLogSystem.Log("[BP_LandMine_Explosion]2 Damage:%s", tostring(self.Damage))
end
UGCLogSystem.Log("[BP_LandMine_Explosion]3")
end
end
UGCSendRPCSystem.ActorRPCNotify(nil, self, "ClientExplosionEffect")
end
function BP_LandMine:ClientExplosionEffect()
self.P_MiniGames_Boom_01:SetActive(true, true)
UGCSoundManagerSystem.PlaySoundAtLocation(self.ExplosionSound, self:K2_GetActorLocation(), self:K2_GetActorRotation())
end
--[[
function BP_LandMine:ReceiveBeginPlay()
self.SuperClass.ReceiveBeginPlay(self);
end
--]]
--[[
function BP_LandMine:ReceiveTick(DeltaTime)
self.SuperClass.ReceiveTick(self, DeltaTime);
end
--]]
--[[
function BP_LandMine:ReceiveEndPlay()
self.SuperClass.ReceiveEndPlay(self);
end
--]]
--[[
function BP_LandMine:GetReplicatedProperties()
return
end
--]]
--[[
function BP_LandMine:GetAvailableServerRPCs()
return
end
--]]
return BP_LandMine;