142 lines
5.5 KiB
Lua
142 lines
5.5 KiB
Lua
---@class W_ShowTriggerDeviceInfo_3_C:ObjectPositionWidget
|
|
---@field Image_CT UImage
|
|
---@field Image_MechanismIcon UImage
|
|
---@field Image_Ring UImage
|
|
---@field Image_T UImage
|
|
---@field Overlay_CanActive UOverlay
|
|
---@field ProgressBar_ShowEnergy UProgressBar
|
|
---@field TextBlock_HealthValue UTextBlock
|
|
---@field TextBlock_Range UTextBlock
|
|
---@field WidgetSwitcher_Active UWidgetSwitcher
|
|
---@field WidgetSwitcher_ShowText UWidgetSwitcher
|
|
---@field WidgetSwitcher_TeamIcon UWidgetSwitcher
|
|
---@field FullEnergyColor FLinearColor
|
|
---@field CanActiveColor FLinearColor
|
|
---@field CanNotActiveColor FLinearColor
|
|
--Edit Below--
|
|
---@type W_ShowTriggerDeviceInfo_3_C
|
|
local W_ShowTriggerDeviceInfo_3 = {
|
|
bInitDoOnce = false;
|
|
MaxEnergy = 1.;
|
|
LimitEnergy = 0.;
|
|
LocalCanActive = false;
|
|
};
|
|
|
|
--[==[ Construct
|
|
function W_ShowTriggerDeviceInfo:Construct()
|
|
|
|
end
|
|
-- Construct ]==]
|
|
|
|
-- function W_ShowTriggerDeviceInfo:Tick(MyGeometry, InDeltaTime)
|
|
|
|
-- end
|
|
|
|
-- function W_ShowTriggerDeviceInfo:Destruct()
|
|
|
|
-- end
|
|
|
|
function W_ShowTriggerDeviceInfo_3:InitMechanismInfo(InMaxEnergy, InLimitEnergy, MechanismType)
|
|
self.MaxEnergy = InMaxEnergy
|
|
self.LimitEnergy = InLimitEnergy
|
|
--self.TextBlock_Limit:SetText(string.format("%.0f", InLimitEnergy))
|
|
--self.TextBlock_Max:SetText(string.format("%.0f", InMaxEnergy))
|
|
self.TextBlock_Range:SetText(string.format("[ %.0f, %.0f ]", InLimitEnergy, self.MaxEnergy))
|
|
--self.TextBlock_Name:SetText(tostring(MechanismName))
|
|
-- self.LoopSetCanActive = UGCEventSystem.SetTimerLoop(self, self.CheckCanActive, 0.2)
|
|
-- 设置两图标颜色
|
|
self.Image_CT:SetColorAndOpacity(TeamConfig.TeamColor[TeamConfig.TeamType.CT])
|
|
self.Image_T:SetColorAndOpacity(TeamConfig.TeamColor[TeamConfig.TeamType.T])
|
|
local IconInfo = MechanismConfig.MechanismIconInfo[MechanismType]
|
|
if IconInfo then
|
|
local IconTex = UGCSystemLibrary.LoadAsset(IconInfo.Icon, true)
|
|
if UE.IsValid(IconTex) then
|
|
self.Image_MechanismIcon:SetBrushFromTexture(IconTex)
|
|
self.Image_MechanismIcon:SetColorAndOpacity(IconInfo.Color)
|
|
end
|
|
end
|
|
--- 更新环状能量进度条信息
|
|
UGCEventSystem.SetTimer(self,
|
|
function()
|
|
if self.LoopUpdateRingHandle == nil then
|
|
self.LoopUpdateRingHandle = UGCEventSystem.SetTimerLoop(self, self.UpdateRingInfo, 1.)
|
|
end
|
|
end,
|
|
math.random()
|
|
)
|
|
end
|
|
|
|
function W_ShowTriggerDeviceInfo_3:UpdateRingInfo()
|
|
local LocalPawn = UGCSystemLibrary.GetLocalPlayerPawn()
|
|
if LocalPawn then
|
|
local MechanismEnergy = LocalPawn:GetMechanismEnergy()
|
|
local Material = self.Image_Ring:GetDynamicMaterial()
|
|
UGCLogSystem.Log("[W_ShowTriggerDeviceInfo_3_UpdateRingInfo] 1")
|
|
if Material ~= nil then
|
|
local TargetPercent = math.clamp(MechanismEnergy / self.MaxEnergy, 0., 1.)
|
|
Material:SetScalarParameterValue("Mask_Percent", 1. - TargetPercent)
|
|
UGCLogSystem.Log("[W_ShowTriggerDeviceInfo_3_UpdateRingInfo] 2 TargetPercent:%s", tostring(TargetPercent))
|
|
end
|
|
if MechanismEnergy >= self.MaxEnergy then
|
|
self.Image_Ring:SetColorAndOpacity(self.FullEnergyColor)
|
|
elseif MechanismEnergy >= self.LimitEnergy then
|
|
self.Image_Ring:SetColorAndOpacity(self.CanActiveColor)
|
|
else
|
|
self.Image_Ring:SetColorAndOpacity(self.CanNotActiveColor)
|
|
end
|
|
end
|
|
end
|
|
|
|
function W_ShowTriggerDeviceInfo_3:CanActive(bActive)
|
|
if self.LocalCanActive ~= bActive then
|
|
self.LocalCanActive = bActive
|
|
if bActive then
|
|
self.Overlay_CanActive:SetVisibility(ESlateVisibility.SelfHitTestInvisible)
|
|
self.WidgetSwitcher_ShowText:SetActiveWidgetIndex(1)
|
|
else
|
|
self.Overlay_CanActive:SetVisibility(ESlateVisibility.Collapsed)
|
|
self.WidgetSwitcher_ShowText:SetActiveWidgetIndex(0)
|
|
end
|
|
end
|
|
end
|
|
|
|
function W_ShowTriggerDeviceInfo_3:Trigger(PlayerKey, InEnergy, InMaxEnergy)
|
|
self.MaxEnergy = InMaxEnergy
|
|
self:UpdateTriggeredPlayerInfo(PlayerKey)
|
|
self:UpdateEnergyInfo(InEnergy, self.MaxEnergy)
|
|
self.WidgetSwitcher_Active:SetActiveWidgetIndex(0)
|
|
UGCLogSystem.Log("[W_ShowTriggerDeviceInfo_3_Trigger]")
|
|
end
|
|
|
|
function W_ShowTriggerDeviceInfo_3:MechanismClosed()
|
|
self.WidgetSwitcher_Active:SetActiveWidgetIndex(1)
|
|
UGCLogSystem.Log("[W_ShowTriggerDeviceInfo_3_MechanismClosed]")
|
|
end
|
|
|
|
function W_ShowTriggerDeviceInfo_3:UpdateTriggeredPlayerInfo(PlayerKey)
|
|
if PlayerKey < 0 then
|
|
self.WidgetSwitcher_Active:SetActiveWidgetIndex(1)
|
|
return
|
|
end
|
|
|
|
local PlayerTeamID = UGCGameSystem.GameState:GetPlayerTeamIDByPlayerKey(PlayerKey)
|
|
local TeamColor = TeamConfig.TeamColor[PlayerTeamID]
|
|
if TeamColor then
|
|
self.ProgressBar_ShowEnergy:SetFillColorAndOpacity(TeamColor)
|
|
UGCLogSystem.Log("[W_ShowTriggerDeviceInfo_3_UpdateTriggeredPlayerInfo] Succeed, PlayerKey:%s", tostring(PlayerKey))
|
|
-- 设置队伍图标
|
|
self.WidgetSwitcher_TeamIcon:SetActiveWidgetIndex(PlayerTeamID - 1)
|
|
else
|
|
UGCLogSystem.LogError("[W_ShowTriggerDeviceInfo_3_UpdateTriggeredPlayerInfo] TeamConfig.TeamColor[%s] is nil, PlayerKey:%s", tostring(PlayerTeamID), tostring(PlayerKey))
|
|
end
|
|
|
|
self.WidgetSwitcher_Active:SetActiveWidgetIndex(0)
|
|
end
|
|
|
|
function W_ShowTriggerDeviceInfo_3:UpdateEnergyInfo(InEnergy, InMaxEnergy)
|
|
self.MaxEnergy = InMaxEnergy
|
|
self.ProgressBar_ShowEnergy:SetPercent(InEnergy / self.MaxEnergy)
|
|
self.TextBlock_HealthValue:SetText(string.format("%.0f / %.0f", InEnergy, InMaxEnergy))
|
|
end
|
|
|
|
return W_ShowTriggerDeviceInfo_3; |