92 lines
3.2 KiB
Lua
92 lines
3.2 KiB
Lua
---@class BP_Boot_C:BP_TriggerMechanismBase_C
|
|
---@field DamageSphere UStaticMeshComponent
|
|
---@field P_BootDisable UParticleSystemComponent
|
|
---@field StaticMesh UStaticMeshComponent
|
|
---@field BootMesh UStaticMeshComponent
|
|
---@field P_Boot UParticleSystemComponent
|
|
---@field Scene USceneComponent
|
|
---@field DamageValue float
|
|
--Edit Below--
|
|
---@type BP_Boot_C
|
|
local MechanismBase = require('Script.Blueprint.MechanismActor.BP_TriggerMechanismBase')
|
|
|
|
local BP_Boot = setmetatable(
|
|
{
|
|
TrackFrequency = 5.;
|
|
},
|
|
{
|
|
__index = MechanismBase,
|
|
__metatable = MechanismBase
|
|
}
|
|
);
|
|
|
|
function BP_Boot:ReceiveBeginPlay()
|
|
self.SuperClass.ReceiveBeginPlay(self);
|
|
MechanismBase.MechanismBeginPlay(self)
|
|
self:SetMechanismType(MechanismConfig.TriggerMechanismType.Boot)
|
|
|
|
end
|
|
|
|
function BP_Boot:ReceiveEndPlay()
|
|
self:MechanismEndPlay()
|
|
self.SuperClass.ReceiveEndPlay(self);
|
|
end
|
|
|
|
function BP_Boot:Trigger(InTriggeredPlayer, InTriggerDevice, InEnergyValue)
|
|
MechanismBase.Trigger(self, InTriggeredPlayer, InTriggerDevice, InEnergyValue)
|
|
UGCSendRPCSystem.ActorRPCNotify(nil, self, "ClientEnableBoot", UGCPlayerStateSystem.GetTeamID(InTriggeredPlayer), InEnergyValue / self.EnergyConsumptionSpeed)
|
|
self:SetCollisionIsEnable(true)
|
|
self.TrackHandle = UGCEventSystem.SetTimerLoop(self, self.GiveOverlappingPlayerDamage, 1./ self.TrackFrequency)
|
|
end
|
|
|
|
function BP_Boot:CloseMechanism()
|
|
MechanismBase.CloseMechanism(self)
|
|
self:SetCollisionIsEnable(false)
|
|
if self.TrackHandle then
|
|
UGCEventSystem.StopTimer(self.TrackHandle)
|
|
end
|
|
end
|
|
|
|
function BP_Boot:EnableClientTriggerEffects()
|
|
MechanismBase.EnableClientTriggerEffects(self)
|
|
self.P_BootDisable:SetHiddenInGame(true)
|
|
self:SetCollisionIsEnable(true)
|
|
end
|
|
|
|
function BP_Boot:DisableClientTriggerEffects()
|
|
MechanismBase.DisableClientTriggerEffects(self)
|
|
self.P_BootDisable:SetHiddenInGame(false)
|
|
self.P_Boot:SetActive(false, false)
|
|
self:SetCollisionIsEnable(false)
|
|
end
|
|
|
|
function BP_Boot:ClientEnableBoot(TeamID, LifeTime)
|
|
self.P_Boot:SetFloatParameter("LifeTime", LifeTime)
|
|
local TeamColor = TeamConfig.TeamColor[TeamID]
|
|
if TeamColor then
|
|
local VectorColor = KismetMathLibrary.Conv_LinearColorToVector(TeamColor)
|
|
self.P_Boot:SetVectorParameter("Color", VectorHelper.MulNumber(VectorColor, 10))
|
|
end
|
|
self.P_Boot:SetActive(true, true)
|
|
end
|
|
|
|
function BP_Boot:CheckPlayerInRange(PlayerPawn)
|
|
return self.BootMesh:IsOverlappingActor(PlayerPawn)
|
|
end
|
|
|
|
function BP_Boot:GiveOverlappingPlayerDamage()
|
|
local EnableDamagePlayerKeys = self:GetEnableDamagePlayer(self.TriggeredPlayer)
|
|
local CauserController = UGCGameSystem.GetPlayerControllerByPlayerKey(self.TriggeredPlayer)
|
|
for i, PlayerKey in pairs(EnableDamagePlayerKeys) do
|
|
local TempPawn = UGCGameSystem.GetPlayerPawnByPlayerKey(PlayerKey)
|
|
if TempPawn and TempPawn:IsAlive() and self.DamageSphere:IsOverlappingActor(TempPawn) then
|
|
UGCGameSystem.ApplyDamage(TempPawn, self.DamageValue / self.TrackFrequency, CauserController, self, self.MechanismType)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BP_Boot:SetCollisionIsEnable(bEnable)
|
|
self.BootMesh:SetCollisionEnabled(bEnable and ECollisionEnabled.QueryAndPhysics or ECollisionEnabled.NoCollision)
|
|
end
|
|
|
|
return BP_Boot; |