87 lines
2.9 KiB
Lua
87 lines
2.9 KiB
Lua
|
---@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;
|