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

87 lines
3.1 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: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;