contentProviderEpicArcs.py (2701B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\agencyNew\contentProviders\contentProviderEpicArcs.py 2 from carbon.common.lib import telemetry 3 from eve.client.script.ui.shared.agencyNew import agencyConst, agencyUtil, agencyFilters 4 from eve.client.script.ui.shared.agencyNew.contentGroups import contentGroupConst 5 from eve.client.script.ui.shared.agencyNew.contentPieces.epicArcAgentContentPiece import EpicArcAgentContentPiece 6 from eve.client.script.ui.shared.agencyNew.contentProviders.baseContentProvider import BaseContentProvider 7 from eve.client.script.ui.station.agents.agentUtil import IsAgentStandingSufficientToUse 8 9 class ContentProviderEpicArcs(BaseContentProvider): 10 __notifyevents__ = BaseContentProvider.__notifyevents__ + ['OnAgentMissionChanged', 'OnEpicArcDataChanged'] 11 contentType = agencyConst.CONTENTTYPE_EPICARCS 12 contentGroup = contentGroupConst.contentGroupEpicArcs 13 contentTypeFilters = (agencyConst.CONTENTTYPE_SUGGESTED, agencyConst.CONTENTTYPE_COMBAT, agencyConst.CONTENTTYPE_EPICARCS) 14 15 def OnAgentMissionChanged(self, missionState, agentID): 16 self.InvalidateContentPieces() 17 18 def OnEpicArcDataChanged(self): 19 self.InvalidateContentPieces() 20 21 @telemetry.ZONE_METHOD 22 def _ConstructContentPieces(self): 23 epicArcs = self.GetAllEpicArcs() 24 contentPieces = [ self._ConstructContentPiece(epicArc) for epicArc in epicArcs ] 25 self.contentPieces = sorted(contentPieces, key=self._GetSortKey) 26 27 def _ConstructContentPiece(self, epicArc): 28 agent = epicArc.GetActiveAgent() 29 contentPiece = EpicArcAgentContentPiece(agent=agent, epicArc=epicArc, ownerID=epicArc.GetFactionID(), solarSystemID=agent.solarsystemID, itemID=agent.agentID, locationID=agent.stationID, typeID=agent.agentTypeID) 30 return contentPiece 31 32 def _GetSortKey(self, contentPiece): 33 return (contentPiece.epicArc.GetState(), contentPiece.GetJumpsToSelfFromCurrentLocation()) 34 35 def GetBestEpicArcAgent(self, epicArc): 36 missions = epicArc.GetActiveMissions() 37 if not missions: 38 return self.GetAgent(epicArc.startNodes[0].agentID) 39 agents = [ self.GetAgent(mission.agentID) for mission in missions ] 40 agents = sorted(agents, key=self._GetAgentSortKey) 41 return agents[0] 42 43 def GetAgent(self, agentID): 44 return sm.GetService('agents').GetAgentByID(agentID) 45 46 @telemetry.ZONE_METHOD 47 def _GetAgentSortKey(self, agent): 48 return (-int(IsAgentStandingSufficientToUse(agent)), self.GetNumJumpsToSystem(agent.solarsystemID)) 49 50 def GetAllEpicArcs(self): 51 return sm.GetService('epicArc').GetEpicArcs()