---@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;