UGCProjects/TwoOnTwo/Script/UI/StatusUI/FightPanel/WB_DistanceDefenseLine.lua

67 lines
2.4 KiB
Lua
Raw Permalink Normal View History

2025-01-04 23:00:19 +08:00
---@class WB_DistanceDefenseLine_C:UUserWidget
---@field Image_Player1 UImage
---@field Image_Player2 UImage
---@field Image_Player3 UImage
---@field TextBlock_BreakThrough UTextBlock
--Edit Below--
local WB_DistanceDefenseLine = {
bInitDoOnce = false;
Range = 50;
WidgetRange = 400
};
--function WB_DistanceDefenseLine:Construct()
--
--end
-- 这个UI大概率不会二次利用就不抽象了耦合度挺高的
function WB_DistanceDefenseLine:Init()
WidgetLibrary.TextBlockBindingPropertyText(self.TextBlock_BreakThrough, self.UpdateBreakThrough, self)
UGCEventSystem.SetTimerLoop(self, self.UpdatePlayerDis, 0.05)
self.PlayerMoveWidget = {self.Image_Player1, self.Image_Player2, self.Image_Player3}
end
function WB_DistanceDefenseLine:UpdateBreakThrough()
return UGCGameSystem.GameState.BreakThroughNum .. "/" .. UGCGameSystem.GameState.MaxBreakThroughNum
end
function WB_DistanceDefenseLine:UpdatePlayerDis()
local DefenderIndex = UGCGameSystem.GameState.DefenderIndex
local AllDefender = UGCGameSystem.GameState.AllDefender
local Index = 0
local LineOfDefense = PlacementModeConfig.GetSimpleLineOfDefense()
if UE.IsValid(LineOfDefense) then
local LineOfDefensePos = LineOfDefense:K2_GetActorLocation()
for i = 1, 4 do
local PlayerKey = AllDefender[i]
if i ~= DefenderIndex then
local Pawn = UGCGameSystem.GetPlayerPawnByPlayerKey(PlayerKey)
Index = Index + 1
if Index <= #self.PlayerMoveWidget then
if UE.IsValid(Pawn) then
local Length = VectorHelper.Length2D(VectorHelper.Sub2D(Pawn:K2_GetActorLocation(), LineOfDefensePos)) / 100
Length = math.clamp(Length, 0, self.Range)
self.PlayerMoveWidget[Index]:SetRenderTranslation({X = (1 - Length / self.Range) * self.WidgetRange, Y = 0})
self.PlayerMoveWidget[Index]:SetVisibility(ESlateVisibility.HitTestInvisible)
else
self.PlayerMoveWidget[Index]:SetVisibility(ESlateVisibility.Collapsed)
end
end
end
end
end
end
-- function WB_DistanceDefenseLine:Tick(MyGeometry, InDeltaTime)
-- end
-- function WB_DistanceDefenseLine:Destruct()
-- end
return WB_DistanceDefenseLine;