96 lines
2.5 KiB
Lua
Raw Permalink Normal View History

2025-01-04 23:00:19 +08:00
---@class BP_Range_MinimapReflect_C:AActor
---@field Box UBoxComponent
---@field DefaultSceneRoot USceneComponent
--Edit Below--
---@type BP_Range_MinimapReflect_C
local BP_MinimapReflect = {};
BP_MinimapReflect.InRangeActors = {};
BP_MinimapReflect.ActorPercents = {};
-- 玩家
BP_MinimapReflect.ClassActors = {};
function BP_MinimapReflect:ReceiveBeginPlay()
self.SuperClass.ReceiveBeginPlay(self);
if IsClient then
UGCEventSystem.AddListener(EventTypes.ClientAlready, self.OnClientAlready, self)
end
end
function BP_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_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_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_MinimapReflect:ReceiveTick(DeltaTime)
self.SuperClass.ReceiveTick(self, DeltaTime);
end
--]]
--[[
function BP_MinimapReflect:ReceiveEndPlay()
self.SuperClass.ReceiveEndPlay(self);
end
--]]
--[[
function BP_MinimapReflect:GetReplicatedProperties()
return
end
--]]
--[[
function BP_MinimapReflect:GetAvailableServerRPCs()
return
end
--]]
return BP_MinimapReflect;