pendingAbstractMarkerUpdater.py (2786B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\mapView\markers\pendingAbstractMarkerUpdater.py 2 import uthread2 3 4 class PendingAbstractMarkerUpdater(object): 5 6 def __init__(self, markersHandler): 7 self._pendingMarkerUpdates = set() 8 self._doUpdates_thread = None 9 self._markersHandler = markersHandler 10 11 def RegisterMarkerForPendingUpdate(self, markerID): 12 self._pendingMarkerUpdates.add(markerID) 13 self.StartUpdateThread() 14 15 def StartUpdateThread(self): 16 if not self._pendingMarkerUpdates: 17 return 18 if not self._doUpdates_thread or not self._doUpdates_thread.IsAlive(): 19 self._doUpdates_thread = uthread2.call_after_wallclocktime_delay(self.DoMarkerUpdates, 0.05) 20 21 def DoMarkerUpdates(self): 22 markersToUpdate = self._pendingMarkerUpdates 23 self._pendingMarkerUpdates = set() 24 if not markersToUpdate: 25 return 26 if not self._markersHandler: 27 return 28 massUpdate = len(markersToUpdate) > 300 29 if massUpdate: 30 sortedMarkers = self.GetStarMarekersOrderedByDistanceToCenter(markersToUpdate) 31 for idx, (markerID, _) in enumerate(sortedMarkers): 32 delay = idx * 0.001 33 uthread2.call_after_wallclocktime_delay(self.UpdateMarker, delay, markerID) 34 35 else: 36 for markerID in markersToUpdate: 37 uthread2.StartTasklet(self.UpdateMarker, markerID) 38 39 if self._pendingMarkerUpdates: 40 uthread2.StartTasklet(self.StartUpdateThread) 41 42 def UpdateMarker(self, markerID): 43 if not self._markersHandler: 44 return 45 marker = self._markersHandler.GetMarkerByID(markerID) 46 if not marker: 47 return 48 return marker.DoUpdateAbstractMarker() 49 50 def RemovePending(self, markerID): 51 self._pendingMarkerUpdates.discard(markerID) 52 53 def Kill(self): 54 if self._doUpdates_thread: 55 self._doUpdates_thread.kill() 56 self._markersHandler = None 57 58 def GetStarMarekersOrderedByDistanceToCenter(self, markerIDs): 59 _, _, vpWidth, vpHeight = self._markersHandler.GetViewportValues() 60 centerX = vpWidth / 2 61 centerY = vpHeight / 2 62 result = [] 63 for markerID in markerIDs: 64 marker = self._markersHandler.GetMarkerByID(markerID) 65 if not marker: 66 continue 67 diffX = centerX - marker.projectBracket.rawProjectedPosition[0] 68 diffY = centerY - marker.projectBracket.rawProjectedPosition[1] 69 distSquared = diffX * diffX + diffY * diffY 70 result.append((markerID, distSquared)) 71 72 result.sort(key=lambda x: x[1]) 73 return result