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

87 lines
2.9 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---@class WB_DistanceDefenseLine_C:UUserWidget
---@field CanvasPanel_Runs UCanvasPanel
---@field TextBlock_BreakThrough UTextBlock
---@field TextBlock_Len UTextBlock
--Edit Below--
local WB_DistanceDefenseLine = {
bInitDoOnce = false;
Range = GlobalConfigs.ProjectSetting.ShowAttackerRange;
WidgetRange = 300;
PlayerMoveWidget = {}
};
function WB_DistanceDefenseLine:Construct()
WidgetLibrary.TextBlockBindingPropertyText(self.TextBlock_BreakThrough, self.UpdateBreakThrough, self)
for i = 0 , self.CanvasPanel_Runs:GetChildrenCount() - 1 do
local Item = self.CanvasPanel_Runs:GetChildAt(i)
self.PlayerMoveWidget[i + 1] = Item
Item:SetVis(false)
end
UGCEventSystem.AddListener(EventEnum.UpdateAttackers, self.UpdateAttackers, self)
UGCEventSystem.SetTimerLoop(self, self.UpdatePlayerDis, 0.05)
self.TextBlock_Len:SetText(self.Range .. "m")
end
-- 这个UI大概率不会二次利用就不抽象了耦合度挺高的
function WB_DistanceDefenseLine:UpdateBreakThrough()
return UGCGameSystem.GameState:GetBreakThrough() .. "/" .. GlobalConfigs.ProjectSetting.BreakThroughMaxCount
end
function WB_DistanceDefenseLine:UpdateAttackers(Attackers)
for i, v in pairs(self.PlayerMoveWidget) do
v:SetPlayer(Attackers[i])
v:SetVis(false)
end
end
function WB_DistanceDefenseLine:GetSimpleLineOfDefense()
if not UE.IsValid(self.SimpleLineOfDefense) then
self.SimpleLineOfDefense = UGCSystemLibrary.GetUniqueInstanceFromPath(GlobalConfigs.ProjectSetting.LineOfDefensePath)
end
if UE.IsValid(self.SimpleLineOfDefense) then
self.LineOfDefensePos = self.SimpleLineOfDefense:K2_GetActorLocation()
end
return self.SimpleLineOfDefense
end
function WB_DistanceDefenseLine:UpdatePlayerDis()
local LineOfDefense = self:GetSimpleLineOfDefense()
if UE.IsValid(LineOfDefense) then
for i, v in pairs(self.PlayerMoveWidget) do
local PlayerKey = v:GetPlayerKey()
if PlayerKey then
local Pawn = UGCGameSystem.GameState:GetAlivePawn(PlayerKey)
if UE.IsValid(Pawn) then
local Length = VectorHelper.Length2D(VectorHelper.Sub2D(Pawn:K2_GetActorLocation(), self.LineOfDefensePos)) / 100
if Length <= self.Range then
-- Length = math.clamp(Length, 0, self.Range)
v:SetRenderTranslation({X = (1 - Length / self.Range) * self.WidgetRange, Y = 0})
v:SetVis(true)
else
v:SetVis(false)
end
end
v:UpdateIsDead()
end
end
end
end
-- function WB_DistanceDefenseLine:Tick(MyGeometry, InDeltaTime)
-- end
-- function WB_DistanceDefenseLine:Destruct()
-- end
return WB_DistanceDefenseLine;