96 lines
2.6 KiB
Lua
96 lines
2.6 KiB
Lua
---@class BP_Range_MinimapReflect_C:AActor
|
|
---@field Box UBoxComponent
|
|
---@field DefaultSceneRoot USceneComponent
|
|
--Edit Below--
|
|
---@type BP_Range_MinimapReflect_C
|
|
local BP_Range_MinimapReflect = {};
|
|
|
|
BP_Range_MinimapReflect.InRangeActors = {};
|
|
BP_Range_MinimapReflect.ActorPercents = {};
|
|
-- 玩家
|
|
BP_Range_MinimapReflect.ClassActors = {};
|
|
|
|
function BP_Range_MinimapReflect:ReceiveBeginPlay()
|
|
self.SuperClass.ReceiveBeginPlay(self);
|
|
|
|
if IsClient then
|
|
UGCEventSystem.AddListener(EventTypes.ClientAlready, self.OnClientAlready, self)
|
|
end
|
|
end
|
|
|
|
function BP_Range_MinimapReflect:OnClientAlready()
|
|
GlobalTickTool:AddTick(self, function(o, dt, st)
|
|
self.InRangeActors = {};
|
|
for i, v in pairs(UGCGameSystem.GetAllPlayerController()) do
|
|
local Pawn = UGCGameSystem.GetPlayerPawnByPlayerKey(v.PlayerKey)
|
|
if UE.IsValidPawn(Pawn) then
|
|
table.insert(self.InRangeActors, Pawn);
|
|
end
|
|
end
|
|
local Percents = o:GetActorPercent();
|
|
WidgetManager:GetPanel(WidgetConfig.EUIType.Main):SetRangePercent(Percents);
|
|
end, 0.1, nil);
|
|
end
|
|
|
|
|
|
function BP_Range_MinimapReflect:FindRangeActors(InClassList, IsHadNewActor)
|
|
if table.isEmpty(InClassList) then return; end
|
|
---@type table<int32, AActor>
|
|
self.InRangeActors = {};
|
|
self.ClassActors = {};
|
|
UE.FindActorsByClass(nil, self.InRangeActors, function(InIndex, InActor)
|
|
for i, v in pairs(InClassList) do
|
|
if UE.IsA(InActor, v) then
|
|
if self.ClassActors[v] == nil then self.ClassActors[v] = {}; end
|
|
table.insert(self.ClassActors[v], InActor);
|
|
return true;
|
|
end
|
|
end
|
|
return false;
|
|
end);
|
|
end
|
|
|
|
-- 在 Tick 中执行,这样能保证在 UI 上显示及时
|
|
function BP_Range_MinimapReflect:GetActorPercent()
|
|
local SelfLoc = self:K2_GetActorLocation();
|
|
-- 获取 X 边长
|
|
local BoxVec = self.Box:GetScaledBoxExtent()
|
|
for i, v in pairs(self.InRangeActors) do
|
|
local Vec = v:K2_GetActorLocation();
|
|
if math.abs(Vec.X - SelfLoc.X) <= BoxVec.X and math.abs(Vec.Y - SelfLoc.Y) <= BoxVec.Y then
|
|
-- 转换成百分比
|
|
local Item = {
|
|
X = (Vec.X - (SelfLoc.X - BoxVec.X)) / (BoxVec.X * 2),
|
|
Y = (Vec.Y - (SelfLoc.Y - BoxVec.Y)) / (BoxVec.Y * 2),
|
|
}
|
|
self.ActorPercents[v] = Item;
|
|
end
|
|
end
|
|
return self.ActorPercents;
|
|
end
|
|
|
|
--[[
|
|
function BP_Range_MinimapReflect:ReceiveTick(DeltaTime)
|
|
self.SuperClass.ReceiveTick(self, DeltaTime);
|
|
end
|
|
--]]
|
|
|
|
--[[
|
|
function BP_Range_MinimapReflect:ReceiveEndPlay()
|
|
self.SuperClass.ReceiveEndPlay(self);
|
|
end
|
|
--]]
|
|
|
|
--[[
|
|
function BP_Range_MinimapReflect:GetReplicatedProperties()
|
|
return
|
|
end
|
|
--]]
|
|
|
|
--[[
|
|
function BP_Range_MinimapReflect:GetAvailableServerRPCs()
|
|
return
|
|
end
|
|
--]]
|
|
|
|
return BP_Range_MinimapReflect; |