NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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