237 lines
6.8 KiB
Lua
237 lines
6.8 KiB
Lua
---@class BP_TriggerMechanismBase_C:Pawn
|
|
---@field DefaultSceneRoot USceneComponent
|
|
---@field MaxEnergyValue float
|
|
---@field EnergyValue float
|
|
---@field EnergyMinimumLimit float
|
|
---@field EnergyConsumptionSpeed float
|
|
---@field bMechanismEnable bool
|
|
---@field EnableAudio UAkAudioEvent
|
|
---@field TriggeredPlayer int64
|
|
---@field ConePos FVector
|
|
---@field bGlobalScope bool
|
|
---@field bEnableTipMechanismRangeHasPlayer bool
|
|
---@field bEnableFriendlyInjury bool
|
|
--Edit Below--
|
|
---@type BP_TriggerMechanismBase_C
|
|
local BP_TriggerMechanismBase = {
|
|
TriggeredSoundID = -1;
|
|
TriggerDevice = nil;
|
|
TriggerHandle = nil;
|
|
ConsumptionFrequency = 10.;
|
|
MechanismType = -1;
|
|
RangeTeams = {};
|
|
};
|
|
|
|
|
|
---继承接口
|
|
--[[
|
|
|
|
local MechanismBase = require('Script.Blueprint.MechanismActor.BP_TriggerMechanismBase')
|
|
|
|
local BP_Flamethrower = setmetatable(
|
|
{
|
|
DamageFrequency = 10.;
|
|
},
|
|
{
|
|
__index = MechanismBase,
|
|
__metatable = MechanismBase
|
|
}
|
|
);
|
|
|
|
function BP_Flamethrower:ReceiveBeginPlay()
|
|
self.SuperClass.ReceiveBeginPlay(self);
|
|
MechanismBase.MechanismBeginPlay(self)
|
|
end
|
|
|
|
function BP_Flamethrower:ReceiveEndPlay()
|
|
self:MechanismEndPlay()
|
|
self.SuperClass.ReceiveEndPlay(self);
|
|
end
|
|
|
|
function BP_Flamethrower:Trigger(InTriggeredPlayer, InTriggerDevice, InEnergyValue)
|
|
MechanismBase.Trigger(self, InTriggeredPlayer, InTriggerDevice, InEnergyValue)
|
|
end
|
|
|
|
function BP_Flamethrower:CloseMechanism()
|
|
MechanismBase.CloseMechanism(self)
|
|
end
|
|
|
|
function BP_Flamethrower:EnableClientTriggerEffects()
|
|
MechanismBase.EnableClientTriggerEffects(self)
|
|
end
|
|
|
|
function BP_Flamethrower:DisableClientTriggerEffects()
|
|
MechanismBase.DisableClientTriggerEffects(self)
|
|
end
|
|
|
|
function BP_Flamethrower:CheckPlayerInRange(PlayerPawn)
|
|
return false
|
|
end
|
|
|
|
]]
|
|
|
|
function BP_TriggerMechanismBase:MechanismBeginPlay()
|
|
if UGCGameSystem.IsServer() then
|
|
else
|
|
if self.bMechanismEnable then
|
|
self:EnableClientTriggerEffects()
|
|
else
|
|
self:DisableClientTriggerEffects()
|
|
end
|
|
end
|
|
self:SetMechanismType(MechanismConfig.TriggerMechanismType.MechanismWeapon)
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:Trigger(InTriggeredPlayer, InTriggerDevice, InEnergyValue)
|
|
self.bMechanismEnable = true
|
|
self.TriggeredPlayer = InTriggeredPlayer
|
|
self.TriggerDevice = InTriggerDevice
|
|
UGCLogSystem.Log("[BP_TriggerMechanismBase_Trigger] InEnergyValue:%s", tostring(InEnergyValue))
|
|
self:SetEnergyValue(InEnergyValue)
|
|
self.TriggerHandle = UGCEventSystem.SetTimerLoop(self, self.EnergyConsumption, 1. / self.ConsumptionFrequency)
|
|
--UnrealNetwork.CallUnrealRPC_Multicast(self, "EnableClientTriggerEffects")
|
|
UGCSendRPCSystem.ActorRPCNotify(nil, self, "EnableClientTriggerEffects")
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:CloseMechanism()
|
|
self.bMechanismEnable = false
|
|
self.TriggeredPlayer = -1
|
|
if UE.IsValid(self.TriggerDevice) then
|
|
self.TriggerDevice:MechanismClosed()
|
|
end
|
|
if self.TriggerHandle then
|
|
UGCEventSystem.StopTimer(self.TriggerHandle)
|
|
self.TriggerHandle = nil
|
|
end
|
|
-- UnrealNetwork.CallUnrealRPC_Multicast(self, "DisableClientTriggerEffects")
|
|
UGCSendRPCSystem.ActorRPCNotify(nil, self, "DisableClientTriggerEffects")
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:GetEnergyValue()
|
|
return self.EnergyValue
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:SetEnergyValue(NewEnergyValue)
|
|
UGCLogSystem.Log("[BP_TriggerMechanismBase_SetEnergyValue] NewEnergyValue:%s", tostring(NewEnergyValue))
|
|
self.EnergyValue = math.clamp(NewEnergyValue, 0., self:GetMaxEnergyValue())
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:GetMaxEnergyValue()
|
|
return self.MaxEnergyValue
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:GetEnergyMinimumLimit()
|
|
return self.EnergyMinimumLimit
|
|
end
|
|
|
|
--- 能量消耗
|
|
---@param ConsumptionValue float|nil 消耗值 若为nil则自动按频率消耗
|
|
function BP_TriggerMechanismBase:EnergyConsumption(ConsumptionValue)
|
|
if ConsumptionValue == nil then
|
|
ConsumptionValue = self.EnergyConsumptionSpeed / self.ConsumptionFrequency
|
|
end
|
|
if self:GetEnergyValue() > ConsumptionValue then
|
|
self:SetEnergyValue(self:GetEnergyValue() - ConsumptionValue)
|
|
else
|
|
self:SetEnergyValue(0)
|
|
self:CloseMechanism()
|
|
end
|
|
self.TriggerDevice:UpdateMechanismEnergyInfo(self:GetEnergyValue())
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:EnableClientTriggerEffects()
|
|
if self.EnableAudio then
|
|
if self.TriggeredSoundID >= 0 then
|
|
UGCSoundManagerSystem.StopSoundByID(self.TriggeredSoundID)
|
|
end
|
|
self.TriggeredSoundID = UGCSoundManagerSystem.PlaySoundAtLocation(self.EnableAudio, self:K2_GetActorLocation(), self:K2_GetActorRotation())
|
|
end
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:DisableClientTriggerEffects()
|
|
if self.TriggeredSoundID >= 0 then
|
|
UGCSoundManagerSystem.StopSoundByID(self.TriggeredSoundID)
|
|
self.TriggeredSoundID = -1
|
|
end
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:GetConePos()
|
|
local SelfRot = self:K2_GetActorRotation()
|
|
local RelativePos = KismetMathLibrary.GreaterGreater_VectorRotator(self.ConePos, SelfRot)
|
|
return VectorHelper.Add(self:K2_GetActorLocation(), RelativePos)
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:GetMechanismType()
|
|
return self.MechanismType
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:SetMechanismType(InMechanismType)
|
|
self.MechanismType = InMechanismType
|
|
end
|
|
|
|
-- 判断玩家是否在效果范围内
|
|
function BP_TriggerMechanismBase:CheckPlayerInRange(PlayerPawn)
|
|
return false
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:GetEnableTipPlayerInRange()
|
|
return self.bEnableTipMechanismRangeHasPlayer
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:GetGlobalScope()
|
|
return self.bGlobalScope
|
|
end
|
|
|
|
function BP_TriggerMechanismBase:GetEnableDamagePlayer(PlayerKey)
|
|
if MechanismConfig.bEnableFriendlyInjury and self.bEnableFriendlyInjury then
|
|
local Res = {}
|
|
local AllController = UGCGameSystem.GetAllPlayerController()
|
|
for i, v in pairs(AllController) do
|
|
Res[#Res + 1] = v.PlayerKey
|
|
end
|
|
return Res
|
|
else
|
|
local TeamID = UGCPlayerStateSystem.GetTeamID(PlayerKey)
|
|
return UGCTeamSystem.GetOtherTeamPlayerKeys(TeamID)
|
|
end
|
|
end
|
|
|
|
|
|
|
|
--[[
|
|
function BP_TriggerMechanismBase:ReceiveBeginPlay()
|
|
self.SuperClass.ReceiveBeginPlay(self);
|
|
end
|
|
--]]
|
|
|
|
--[[
|
|
function BP_TriggerMechanismBase:ReceiveTick(DeltaTime)
|
|
self.SuperClass.ReceiveTick(self, DeltaTime);
|
|
end
|
|
--]]
|
|
|
|
|
|
|
|
|
|
function BP_TriggerMechanismBase:MechanismEndPlay()
|
|
if self.TriggerHandle then
|
|
UGCEventSystem.StopTimer(self.TriggerHandle)
|
|
self.TriggerHandle = nil
|
|
end
|
|
self.SuperClass.ReceiveEndPlay(self);
|
|
end
|
|
|
|
|
|
|
|
--function BP_TriggerMechanismBase:GetReplicatedProperties()
|
|
-- return
|
|
--end
|
|
|
|
|
|
--[[
|
|
function BP_TriggerMechanismBase:GetAvailableServerRPCs()
|
|
return
|
|
end
|
|
--]]
|
|
|
|
return BP_TriggerMechanismBase; |