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