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

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;