104 lines
4.1 KiB
Lua
104 lines
4.1 KiB
Lua
|
---@class BP_Earthquake_C:BP_TriggerMechanismBase_C
|
||
|
---@field CG014_Version_2050_pickup UStaticMeshComponent
|
||
|
---@field P_EarthquakeDefault UParticleSystemComponent
|
||
|
---@field P_Earthquake2 UParticleSystemComponent
|
||
|
---@field P_Earthquake UParticleSystemComponent
|
||
|
---@field CylinderOverlap UStaticMeshComponent
|
||
|
---@field P_ShowRadius UParticleSystemComponent
|
||
|
---@field Scene USceneComponent
|
||
|
---@field TargetCameraShake UClass
|
||
|
---@field DamageTimeInterval float
|
||
|
---@field DamageValue float
|
||
|
---@field AKEarthquake UAkAudioEvent
|
||
|
--Edit Below--
|
||
|
---@type BP_Earthquake_C
|
||
|
local MechanismBase = require('Script.Blueprint.MechanismActor.BP_TriggerMechanismBase')
|
||
|
|
||
|
local BP_Earthquake = setmetatable(
|
||
|
{
|
||
|
DamageHandle = nil;
|
||
|
EarthquakeEffectHandle = nil;
|
||
|
},
|
||
|
{
|
||
|
__index = MechanismBase,
|
||
|
__metatable = MechanismBase
|
||
|
}
|
||
|
);
|
||
|
|
||
|
function BP_Earthquake:ReceiveBeginPlay()
|
||
|
self.SuperClass.ReceiveBeginPlay(self);
|
||
|
MechanismBase.MechanismBeginPlay(self)
|
||
|
self:SetMechanismType(MechanismConfig.TriggerMechanismType.Earthquake)
|
||
|
end
|
||
|
|
||
|
function BP_Earthquake:ReceiveEndPlay()
|
||
|
self:MechanismEndPlay()
|
||
|
self.SuperClass.ReceiveEndPlay(self);
|
||
|
end
|
||
|
|
||
|
function BP_Earthquake:Trigger(InTriggeredPlayer, InTriggerDevice, InEnergyValue)
|
||
|
MechanismBase.Trigger(self, InTriggeredPlayer, InTriggerDevice, InEnergyValue)
|
||
|
if self.DamageHandle == nil then
|
||
|
self.DamageHandle = UGCEventSystem.SetTimerLoop(self, self.ApplyEarthquakeDamage, self.DamageTimeInterval)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function BP_Earthquake:CloseMechanism()
|
||
|
MechanismBase.CloseMechanism(self)
|
||
|
if self.DamageHandle then
|
||
|
UGCEventSystem.StopTimer(self.DamageHandle)
|
||
|
self.DamageHandle = nil
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function BP_Earthquake:EnableClientTriggerEffects()
|
||
|
MechanismBase.EnableClientTriggerEffects(self)
|
||
|
self.P_EarthquakeDefault:SetHiddenInGame(false)
|
||
|
end
|
||
|
|
||
|
function BP_Earthquake:DisableClientTriggerEffects()
|
||
|
MechanismBase.DisableClientTriggerEffects(self)
|
||
|
self.P_EarthquakeDefault:SetHiddenInGame(true)
|
||
|
end
|
||
|
|
||
|
function BP_Earthquake:ApplyEarthquakeDamage()
|
||
|
local EnableDamagePlayerKeys = self:GetEnableDamagePlayer(self.TriggeredPlayer)
|
||
|
local CauserController = UGCGameSystem.GetPlayerControllerByPlayerKey(self.TriggeredPlayer)
|
||
|
UGCSendRPCSystem.ActorRPCNotify(nil, self, "EarthquakeEffect")
|
||
|
for i, PlayerKey in pairs(EnableDamagePlayerKeys) do
|
||
|
-- UGCLogSystem.Log("[BP_Earthquake_ApplyEarthquakeDamage]PlayerKey:%s", tostring(PlayerKey))
|
||
|
local TempPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(PlayerKey)
|
||
|
if TempPawn and TempPawn:IsAlive() and self.CylinderOverlap:IsOverlappingActor(TempPawn) then
|
||
|
UGCGameSystem.ApplyDamage(TempPawn, self.DamageValue, CauserController, self, self.MechanismType)
|
||
|
UGCSendRPCSystem.ActorRPCNotify(PlayerKey, self, "TriggerPlayerCameraShake")
|
||
|
UGCLogSystem.Log("[BP_Earthquake_ApplyEarthquakeDamage] PlayerKey:%s", tostring(PlayerKey))
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function BP_Earthquake:TriggerPlayerCameraShake()
|
||
|
local CameraManager = UGCSystemLibrary.GetLocalPlayerController().PlayerCameraManager
|
||
|
if UE.IsValid(CameraManager) then
|
||
|
CameraManager:PlayCameraShake(self.TargetCameraShake, 1., ECameraAnimPlaySpace.CameraLocal, VectorHelper.RotZero())
|
||
|
UGCLogSystem.Log("[BP_Earthquake_TriggerPlayerCameraShake] Finish")
|
||
|
else
|
||
|
UGCLogSystem.LogError("[BP_Earthquake_TriggerPlayerCameraShake] CameraManager is nil")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function BP_Earthquake:EarthquakeEffect()
|
||
|
self.P_Earthquake:SetActive(true, true)
|
||
|
self.P_Earthquake2:SetActive(true, true)
|
||
|
UGCSoundManagerSystem.PlaySoundAtLocation(self.AKEarthquake, self:K2_GetActorLocation(), self:K2_GetActorRotation())
|
||
|
end
|
||
|
|
||
|
function BP_Earthquake:CheckPlayerInRange(PlayerPawn)
|
||
|
return self.CylinderOverlap:IsOverlappingActor(PlayerPawn)
|
||
|
end
|
||
|
|
||
|
--function BP_Earthquake:GetEnableTipPlayerInRange()
|
||
|
-- UGCLogSystem.Log("[BP_TriggerMechanismBase_GetEnableTipPlayerInRange] Name:%s, bEnableTipPlayerInRange:%s", KismetSystemLibrary.GetObjectName(self), tostring(self.bEnableTipPlayerInRange))
|
||
|
-- return true
|
||
|
--end
|
||
|
|
||
|
return BP_Earthquake;
|