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

contentProviderColonyResourcesAgency.py (24927B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\agencyNew\contentProviders\contentProviderColonyResourcesAgency.py
      2 import log
      3 import telemetry
      4 import uthread2
      5 from eve.common.lib import appConst
      6 from caching import Memoize
      7 from eve.common.script.sys import idCheckers
      8 from collections import namedtuple
      9 from eve.client.script.ui.shared.agencyNew import agencyConst, agencyFilters, agencySignals
     10 from eve.client.script.ui.shared.agencyNew.agencyUtil import GetNumberOfJumps
     11 from eve.client.script.ui.shared.agencyNew.contentGroups import contentGroupConst
     12 from eve.client.script.ui.shared.agencyNew.contentProviders.baseContentProvider import BaseContentProvider
     13 from eve.client.script.ui.shared.agencyNew.contentPieces.colonyResourcesAgencySystemContentPiece import ColonyResourcesAgencySystemContentPiece
     14 import orbitalSkyhook.resourceRichness as resourceRichness
     15 from locks import TempLock
     16 
     17 class ContentProviderColonyResourcesAgency(BaseContentProvider):
     18     contentType = agencyConst.CONTENTTYPE_COLONYRESOURCESAGENCY
     19     contentGroup = contentGroupConst.contentGroupColonyResourcesAgency
     20     __notifyevents__ = BaseContentProvider.__notifyevents__ + ['OnSessionChanged']
     21 
     22     def __init__(self):
     23         self.sovereigntyResourceSvc = sm.GetService('sovereigntyResourceSvc')
     24         self.starMapSvc = sm.GetService('starmap')
     25         self.validSolarSystemIDs = []
     26         self.allianceSolarSystems = None
     27         self._solarSystemAndPlanetValues = {}
     28         self.nullSecSolarsystems = None
     29         super(ContentProviderColonyResourcesAgency, self).__init__()
     30         agencySignals.on_content_pieces_invalidated.connect(self.OnContentPiecesInvalidated)
     31 
     32     def __del__(self):
     33         sm.UnregisterNotify(self)
     34 
     35     def OnContentPiecesInvalidated(self, *args):
     36         self.validSolarSystemIDs = []
     37         self.allianceSolarSystems = None
     38         self._solarSystemAndPlanetValues.clear()
     39 
     40     def InvalidateSystemCache(self, *args):
     41         self.validSolarSystemIDs = []
     42 
     43     def OnSessionChanged(self, isRemote, sess, change):
     44         if 'solarsystemid' in change:
     45             self.InvalidateSystemCache()
     46 
     47     def OnAgencyFilterChanged(self, contentGroupID, filterType, value):
     48         if contentGroupID != self.contentGroup:
     49             return
     50         self.InvalidateFilter()
     51         super(ContentProviderColonyResourcesAgency, self).OnAgencyFilterChanged(contentGroupID, filterType, value)
     52 
     53     def InvalidateFilter(self):
     54         self.validSolarSystemIDs = []
     55         for _, planetLoookup in self._solarSystemAndPlanetValues.itervalues():
     56             planetLoookup.ClearMeetCriteria()
     57 
     58     @Memoize
     59     def GetPlanetItemIDsInSystem(self, solarSystemID):
     60         solarSystemInfo = cfg.mapSystemCache.Get(solarSystemID)
     61         return solarSystemInfo.planetItemIDs
     62 
     63     def _GetValidSolarSystemIDs(self):
     64         self.PrimeNullSecSystems()
     65         self.PrimeAllianceSolarsystems()
     66         theftVulnerableSystemIDs = self.sovereigntyResourceSvc.GetSolarSystemsWithTheftVulnerableSkyhooks()
     67         validSolarSystems = []
     68         distanceFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_DISTANCE)
     69         regionFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_REGION)
     70         skyhookFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_SKYHOOK_THEFT_VULNERABILITY)
     71         if distanceFilter == agencyConst.DISTANCE_CURRSYSTEM:
     72             currentSystemID = session.solarsystemid2
     73             if currentSystemID in self.nullSecSolarsystems and self.CheckSystemCriteria(currentSystemID):
     74                 return [currentSystemID]
     75             return []
     76         for ssID, solarSystem in self.nullSecSolarsystems.iteritems():
     77             if distanceFilter == agencyConst.DISTANCE_REGION and solarSystem.regionID != regionFilter:
     78                 continue
     79             if skyhookFilter == agencyConst.SKYHOOKS_THEFT_VULNERABLE and ssID not in theftVulnerableSystemIDs:
     80                 continue
     81             if self.CheckSystemCriteria(ssID):
     82                 validSolarSystems.append(ssID)
     83 
     84         return validSolarSystems
     85 
     86     @telemetry.ZONE_METHOD
     87     def PrimeNullSecSystems(self):
     88         if self.nullSecSolarsystems is None:
     89             factionService = sm.GetService('faction')
     90             self.nullSecSolarsystems = {ssID:solarSystem for ssID, solarSystem in cfg.mapSystemCache.iteritems() if factionService.GetFactionOfSolarSystem(ssID) is None and not idCheckers.IsWormholeSystem(ssID) and idCheckers.IsKnownSpaceSystem(ssID)}
     91 
     92     def GetValidSolarSystemIDs(self):
     93         self.validSolarSystemIDs = sorted(self._GetValidSolarSystemIDs(), key=lambda systemID: GetNumberOfJumps(systemID))
     94         return self.validSolarSystemIDs
     95 
     96     @telemetry.ZONE_METHOD
     97     def GetColonyResources(self, solarSystemID):
     98         if solarSystemID in self._solarSystemAndPlanetValues:
     99             return self._solarSystemAndPlanetValues[solarSystemID]
    100         with TempLock('GetColonyResources_%s' % solarSystemID):
    101             if solarSystemID in self._solarSystemAndPlanetValues:
    102                 return self._solarSystemAndPlanetValues[solarSystemID]
    103             systemResourceValues, planetResourceValues = self._GetReasourceValuesForSystemAndPlanets(solarSystemID)
    104             planetLoookup = PlanetLookupPerSolarSystem(self, solarSystemID, planetResourceValues)
    105             self._solarSystemAndPlanetValues[solarSystemID] = (systemResourceValues, planetLoookup)
    106             return (systemResourceValues, planetLoookup)
    107 
    108     @telemetry.ZONE_METHOD
    109     def _GetColonyResources(self, solarSystemID):
    110         systemResourceValues, planetResourceValues = self._GetReasourceValuesForSystemAndPlanets(solarSystemID)
    111         if systemResourceValues is None:
    112             return
    113         return (systemResourceValues, planetResourceValues)
    114 
    115     @telemetry.ZONE_METHOD
    116     def _GetReasourceValuesForSystemAndPlanets(self, solarSystemID):
    117         planetIDs = self.GetPlanetItemIDsInSystem(solarSystemID)
    118         if not planetIDs:
    119             return (None, None)
    120         accumulatedMagmaticGas = 0
    121         accumulatedSuperionicIce = 0
    122         accumulatedPowerOuput = 0
    123         accumulatedWorkforce = 0
    124         hasSuperionicIce = False
    125         hasMagmaticGas = False
    126         planetValuesInSystem = []
    127         starResourceValues = self.GetResourceValuesForStar(solarSystemID)
    128         if starResourceValues:
    129             planetValuesInSystem.append(starResourceValues)
    130             accumulatedPowerOuput += starResourceValues.powerOutput
    131         for planetID in planetIDs:
    132             planetResourceValues = self.GetResourceValuesForPlanet(planetID)
    133             accumulatedPowerOuput += planetResourceValues.powerOutput
    134             accumulatedWorkforce += planetResourceValues.workforceOutput
    135             if planetResourceValues.reagentsTypes:
    136                 if planetResourceValues.reagentsTypes.hasMagmaticGas:
    137                     hasMagmaticGas = True
    138                     accumulatedMagmaticGas += planetResourceValues.reagentsTypes.magmaticGasAmount
    139                 if planetResourceValues.reagentsTypes.hasSuperionicIce:
    140                     hasSuperionicIce = True
    141                     accumulatedSuperionicIce += planetResourceValues.reagentsTypes.superionicIceAmount
    142             planetValuesInSystem.append(planetResourceValues)
    143 
    144         lavaRichnessSystem = resourceRichness.GetLavaRichnessForSystem(accumulatedMagmaticGas)
    145         iceRichnessSystem = resourceRichness.GetIceRichnessForSystem(accumulatedSuperionicIce)
    146         powerRichnessSystem = resourceRichness.GetPowerRichnessForSystem(accumulatedPowerOuput)
    147         workforceRichnessSystem = resourceRichness.GetWorkforceRichnessForSystem(accumulatedWorkforce)
    148         systemResourceValues = ColonyResourcesValues(itemID=solarSystemID, powerOutput=accumulatedPowerOuput, powerRichness=powerRichnessSystem, workforceOutput=accumulatedWorkforce, workforceRichness=workforceRichnessSystem, reagentsTypes=ReagentsTypes(hasMagmaticGas=hasMagmaticGas, magmaticGasAmount=accumulatedMagmaticGas, magmaticGasRichness=lavaRichnessSystem, hasSuperionicIce=hasSuperionicIce, superionicIceAmount=accumulatedSuperionicIce, superionicIceRichness=iceRichnessSystem))
    149         return (systemResourceValues, planetValuesInSystem)
    150 
    151     def GetResourceValuesForStar(self, solarSystemID):
    152         starID = cfg.mapSolarSystemContentCache[solarSystemID].star.id
    153         starPower = self.sovereigntyResourceSvc.planetProductionStaticData.get_power_production_for_star(starID)
    154         if not starPower:
    155             return
    156         starPowerMax = max(starPower, 0)
    157         powerRichnessPlanet = resourceRichness.GetPowerRichnessForPlanet(starPowerMax)
    158         colonyResourcesValues = ColonyResourcesValues(itemID=starID, powerOutput=starPowerMax, powerRichness=powerRichnessPlanet, workforceOutput=None, workforceRichness=resourceRichness.RICHNESS_NONE, reagentsTypes=None)
    159         return colonyResourcesValues
    160 
    161     def GetResourceValuesForPlanet(self, planetID):
    162         planetHasSuperionicIce = False
    163         planetHasMagmaticGas = False
    164         reagentType, reagentAmountsInfo, powerOutput, workforceOutput = self.sovereigntyResourceSvc.GetPlanetResourceInfo(planetID)
    165         powerOutput = powerOutput or 0
    166         workforceOutput = workforceOutput or 0
    167         hourlyPerPlanet = 0
    168         magmaticGasHourly = 0
    169         superionicIceHourly = 0
    170         if reagentAmountsInfo:
    171             amountPerPeriod, period = reagentAmountsInfo
    172             secsInHour = 3600
    173             amountPerHour = round(float(amountPerPeriod) / (float(period) / secsInHour), 1)
    174             hourlyPerPlanet = amountPerHour
    175         if reagentType == agencyConst.REAGENTS_MAGMATIC_GAS:
    176             planetHasMagmaticGas = True
    177             magmaticGasHourly = hourlyPerPlanet
    178         elif reagentType == agencyConst.REAGENTS_SUPERIONIC_ICE:
    179             planetHasSuperionicIce = True
    180             superionicIceHourly = hourlyPerPlanet
    181         lavaRichnessPlanet = resourceRichness.GetLavaRichnessForPlanet(magmaticGasHourly)
    182         iceRichnessPlanet = resourceRichness.GetIceRichnessForPlanet(superionicIceHourly)
    183         powerRichnessPlanet = resourceRichness.GetPowerRichnessForPlanet(powerOutput)
    184         workforceRichnessPlanet = resourceRichness.GetWorkforceRichnessForPlanet(workforceOutput)
    185         reagentsTypes = ReagentsTypes(hasMagmaticGas=planetHasMagmaticGas, magmaticGasAmount=magmaticGasHourly, magmaticGasRichness=lavaRichnessPlanet, hasSuperionicIce=planetHasSuperionicIce, superionicIceAmount=superionicIceHourly, superionicIceRichness=iceRichnessPlanet)
    186         planetColonyResourcesValues = ColonyResourcesValues(itemID=planetID, powerOutput=powerOutput, powerRichness=powerRichnessPlanet, workforceOutput=workforceOutput, workforceRichness=workforceRichnessPlanet, reagentsTypes=reagentsTypes)
    187         return planetColonyResourcesValues
    188 
    189     def CheckSystemCriteria(self, solarSystemID):
    190         systemResourceValues, planetLookupPerSolarSystem = self.GetColonyResources(solarSystemID)
    191         distance = self.CheckDistanceCriteria(solarSystemID)
    192         if not distance:
    193             return False
    194         sovereignty = self.CheckSystemSovereignty(solarSystemID)
    195         if not sovereignty:
    196             return False
    197         perSystemPlanetFilter = self.GetPerSystemPlanetFilter()
    198         if perSystemPlanetFilter == agencyConst.OPTION_PER_PLANET_VALUE:
    199             if planetLookupPerSolarSystem.CheckSomePlanetMeetsCriteria():
    200                 return True
    201             return False
    202         powerOutput = self.CheckSystemPowerOutput(systemResourceValues)
    203         if not powerOutput:
    204             return False
    205         workforceOutput = self.CheckSystemWorkforceoutput(systemResourceValues)
    206         if not workforceOutput:
    207             return False
    208         reagentsMagmaticGasRichness = self.CheckSystemMagmaticGasRichness(systemResourceValues)
    209         if not reagentsMagmaticGasRichness:
    210             return False
    211         reagentsSuperionicIceRichness = self.CheckSystemSuperionicIceRichness(systemResourceValues)
    212         if not reagentsSuperionicIceRichness:
    213             return False
    214         return True
    215 
    216     def GetPerSystemPlanetFilter(self):
    217         perSystemPlanetFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_PER_SYSTEM_PLANET)
    218         return perSystemPlanetFilter
    219 
    220     def CheckSystemSovereignty(self, solarSystemID):
    221         sovereigntyFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_SOVEREIGNTY)
    222         if sovereigntyFilter == agencyConst.SOVEREIGNTY_ALL:
    223             return True
    224         if sovereigntyFilter == agencyConst.SOVEREIGNTY_CLAIMED and not self.allianceSolarSystems.get(solarSystemID):
    225             return False
    226         if sovereigntyFilter == agencyConst.SOVEREIGNTY_UNCLAIMED and self.allianceSolarSystems.get(solarSystemID):
    227             return False
    228         return True
    229 
    230     def PrimeAllianceSolarsystems(self):
    231         if self.allianceSolarSystems is None:
    232             self.allianceSolarSystems = self.starMapSvc.GetAllianceSolarSystems()
    233 
    234     def CheckSystemMagmaticGasRichness(self, systemResourceValues):
    235         reagentsMagmaticGasFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_REAGENTS_MAGMATIC_GAS_RICHNESS)
    236         if reagentsMagmaticGasFilter == agencyConst.REAGENTS_RICHNESS_ALL:
    237             return True
    238         return systemResourceValues.reagentsTypes.IsSameIceRicheness(reagentsMagmaticGasFilter)
    239 
    240     def CheckSystemSuperionicIceRichness(self, systemResourceValues):
    241         reagentsSuperionicIceFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_REAGENTS_SUPERIONIC_ICE_RICHNESS)
    242         if reagentsSuperionicIceFilter == agencyConst.REAGENTS_RICHNESS_ALL:
    243             return True
    244         return systemResourceValues.reagentsTypes.IsSameIceRicheness(reagentsSuperionicIceFilter)
    245 
    246     def CheckSystemPowerOutput(self, systemResourceValues):
    247         powerOutputFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_POWEROUTPUT)
    248         return systemResourceValues.powerOutput >= powerOutputFilter
    249 
    250     def CheckSystemWorkforceoutput(self, systemResourceValues):
    251         workforceOutputFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_WORKFORCEOUTPUT)
    252         return systemResourceValues.workforceOutput >= workforceOutputFilter
    253 
    254     def CheckPlanetCriteria(self, colonyResourcesValues):
    255         if not self.CheckPlanetWorkforceOutput(colonyResourcesValues.workforceOutput):
    256             return False
    257         if not self.CheckPlanetPowerOutput(colonyResourcesValues.powerOutput):
    258             return False
    259         if not self.CheckPlanetMagmaticGasRichness(colonyResourcesValues.reagentsTypes):
    260             return False
    261         if not self.CheckPlanetSuperionicIceRichness(colonyResourcesValues.reagentsTypes):
    262             return False
    263         return True
    264 
    265     def CheckPlanetSovereignty(self, sovereignty):
    266         sovereigntyFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_SOVEREIGNTY)
    267         if sovereigntyFilter == agencyConst.SOVEREIGNTY_ALL:
    268             return True
    269         if sovereigntyFilter == agencyConst.SOVEREIGNTY_CLAIMED:
    270             return sovereignty
    271         if sovereigntyFilter == agencyConst.SOVEREIGNTY_UNCLAIMED:
    272             if sovereignty:
    273                 return False
    274             else:
    275                 return True
    276 
    277     def CheckPlanetWorkforceOutput(self, workforceOutput):
    278         workforceFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_WORKFORCEOUTPUT)
    279         if not workforceFilter:
    280             return True
    281         return workforceOutput >= workforceFilter
    282 
    283     def CheckPlanetPowerOutput(self, powerOutput):
    284         powerOutputFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_POWEROUTPUT)
    285         if not powerOutputFilter:
    286             return True
    287         return powerOutput >= powerOutputFilter
    288 
    289     def CheckPlanetMagmaticGasRichness(self, reagentsTypes):
    290         magmaticGasRichnessFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_REAGENTS_MAGMATIC_GAS_RICHNESS)
    291         if magmaticGasRichnessFilter == agencyConst.REAGENTS_RICHNESS_ALL:
    292             return True
    293         if reagentsTypes is None:
    294             return False
    295         return reagentsTypes.IsSameMagmaRicheness(magmaticGasRichnessFilter)
    296 
    297     def CheckPlanetSuperionicIceRichness(self, reagentsTypes):
    298         superionicIceRichnessFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_REAGENTS_SUPERIONIC_ICE_RICHNESS)
    299         if superionicIceRichnessFilter == agencyConst.REAGENTS_RICHNESS_ALL:
    300             return True
    301         if reagentsTypes is None:
    302             return False
    303         return reagentsTypes.IsSameIceRicheness(superionicIceRichnessFilter)
    304 
    305     def CheckPlanetReagentsType(self, planetID, reagentsTypes):
    306         reagentsTypeFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_REAGENTS_TYPE)
    307         if reagentsTypeFilter == agencyConst.REAGENTS_ALL:
    308             return True
    309         if reagentsTypeFilter == agencyConst.REAGENTS_MAGMATIC_GAS:
    310             return reagentsTypes.hasMagmaticGas
    311         if reagentsTypeFilter == agencyConst.REAGENTS_SUPERIONIC_ICE:
    312             return reagentsTypes.hasSuperionicIce
    313 
    314     def CheckPlanetReagentsRichness(self, planetID, reagentsTypes):
    315         reagentsTypeFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_REAGENTS_TYPE)
    316         reagentsRichnessFilter = agencyFilters.GetFilterValue(self.contentGroup, agencyConst.FILTERTYPE_REAGENTS_RICHNESS)
    317         if reagentsRichnessFilter == agencyConst.REAGENTS_RICHNESS_ALL:
    318             return True
    319         if reagentsRichnessFilter == agencyConst.REAGENTS_RICHNESS_MODEST:
    320             if reagentsTypeFilter == agencyConst.REAGENTS_ALL:
    321                 return reagentsTypes.magmaticGasRichness.modest or reagentsTypes.superionicIceRichness.modest
    322             if reagentsTypeFilter == agencyConst.REAGENTS_MAGMATIC_GAS:
    323                 return reagentsTypes.magmaticGasRichness.modest
    324             if reagentsTypeFilter == agencyConst.REAGENTS_SUPERIONIC_ICE:
    325                 return reagentsTypes.superionicIceRichness.modest
    326         elif reagentsRichnessFilter == agencyConst.REAGENTS_RICHNESS_AVERAGE:
    327             if reagentsTypeFilter == agencyConst.REAGENTS_ALL:
    328                 return reagentsTypes.magmaticGasRichness.average or reagentsTypes.superionicIceRichness.average
    329             if reagentsTypeFilter == agencyConst.REAGENTS_MAGMATIC_GAS:
    330                 return reagentsTypes.magmaticGasRichness.average
    331             if reagentsTypeFilter == agencyConst.REAGENTS_SUPERIONIC_ICE:
    332                 return reagentsTypes.superionicIceRichness.average
    333         elif reagentsRichnessFilter == agencyConst.REAGENTS_RICHNESS_ABUNDANT:
    334             if reagentsTypeFilter == agencyConst.REAGENTS_ALL:
    335                 return reagentsTypes.magmaticGasRichness.abundant or reagentsTypes.superionicIceRichness.abundant
    336             if reagentsTypeFilter == agencyConst.REAGENTS_MAGMATIC_GAS:
    337                 return reagentsTypes.magmaticGasRichness.abundant
    338             if reagentsTypeFilter == agencyConst.REAGENTS_SUPERIONIC_ICE:
    339                 return reagentsTypes.superionicIceRichness.abundant
    340 
    341     @telemetry.ZONE_METHOD
    342     def _ConstructContentPieces(self):
    343         if not self.validSolarSystemIDs:
    344             self.validSolarSystemIDs = self.GetValidSolarSystemIDs()[:agencyConst.COLONY_RESOURCE_AGENCY_PIECES_MAX]
    345         self.ExtendContentPieces([ self.ConstructSystemContentPiece(solarSystemID) for solarSystemID in self.validSolarSystemIDs ])
    346 
    347     def ConstructSystemContentPiece(self, solarSystemID):
    348         systemResourceValues, planetLookupPerSolarSystem = self.GetColonyResources(solarSystemID)
    349         self.PrimeAllianceSolarsystems()
    350         sovAllianceID = self.allianceSolarSystems.get(solarSystemID, None)
    351         return ColonyResourcesAgencySystemContentPiece(planetLookupPerSolarSystem, systemResourceValues, sovAllianceID=sovAllianceID, solarSystemID=solarSystemID, typeID=appConst.typeSolarSystem, itemID=solarSystemID)
    352 
    353 
    354 class ColonyResourcesValues(object):
    355 
    356     def __init__(self, itemID, powerOutput, powerRichness, workforceOutput, workforceRichness, reagentsTypes):
    357         self._itemID = itemID
    358         self._powerOutput = powerOutput
    359         self._powerRichness = powerRichness
    360         self._workforceOutput = workforceOutput
    361         self._workforceRichness = workforceRichness
    362         self._reagentsTypes = reagentsTypes
    363 
    364     @property
    365     def itemID(self):
    366         return self._itemID
    367 
    368     @property
    369     def powerOutput(self):
    370         return self._powerOutput
    371 
    372     @property
    373     def powerRichness(self):
    374         return self._powerRichness
    375 
    376     @property
    377     def workforceOutput(self):
    378         return self._workforceOutput
    379 
    380     @property
    381     def workforceRichness(self):
    382         return self._workforceRichness
    383 
    384     @property
    385     def reagentsTypes(self):
    386         return self._reagentsTypes
    387 
    388     def __repr__(self):
    389         return '<ColonyResourcesValues %s>, %s' % (self.__dict__, id(self))
    390 
    391 
    392 class ReagentsTypes(object):
    393 
    394     def __init__(self, hasMagmaticGas, magmaticGasAmount, magmaticGasRichness, hasSuperionicIce, superionicIceAmount, superionicIceRichness):
    395         self._hasMagmaticGas = hasMagmaticGas
    396         self._magmaticGasAmount = magmaticGasAmount
    397         self._magmaticGasRichness = magmaticGasRichness
    398         self._hasSuperionicIce = hasSuperionicIce
    399         self._superionicIceAmount = superionicIceAmount
    400         self._superionicIceRichness = superionicIceRichness
    401 
    402     @property
    403     def hasMagmaticGas(self):
    404         return self._hasMagmaticGas
    405 
    406     @property
    407     def magmaticGasAmount(self):
    408         return self._magmaticGasAmount
    409 
    410     @property
    411     def magmaticGasRichness(self):
    412         return self._magmaticGasRichness
    413 
    414     @property
    415     def hasSuperionicIce(self):
    416         return self._hasSuperionicIce
    417 
    418     @property
    419     def superionicIceAmount(self):
    420         return self._superionicIceAmount
    421 
    422     @property
    423     def superionicIceRichness(self):
    424         return self._superionicIceRichness
    425 
    426     @property
    427     def magmaIsModest(self):
    428         return self.magmaticGasRichness == resourceRichness.RICHNESS_MODEST
    429 
    430     @property
    431     def magmaIsAverage(self):
    432         return self.magmaticGasRichness == resourceRichness.RICHNESS_AVG
    433 
    434     @property
    435     def magmaIsAbundant(self):
    436         return self.magmaticGasRichness == resourceRichness.RICHNESS_ABUNDANT
    437 
    438     @property
    439     def iceIsModest(self):
    440         return self.superionicIceRichness == resourceRichness.RICHNESS_MODEST
    441 
    442     @property
    443     def iceIsAverage(self):
    444         return self.superionicIceRichness == resourceRichness.RICHNESS_AVG
    445 
    446     @property
    447     def iceIsAbundant(self):
    448         return self.superionicIceRichness == resourceRichness.RICHNESS_ABUNDANT
    449 
    450     def IsSameMagmaRicheness(self, richnessToCheck):
    451         return self.magmaticGasRichness == richnessToCheck
    452 
    453     def IsSameIceRicheness(self, richnessToCheck):
    454         return self.superionicIceRichness == richnessToCheck
    455 
    456     def __repr__(self):
    457         return '<ReagentsTypes %s>, %s' % (self.__dict__, id(self))
    458 
    459 
    460 class PlanetLookupPerSolarSystem(object):
    461 
    462     def __init__(self, contentProvider, solarSystemID, planetResourceValues):
    463         self._contentProvider = contentProvider
    464         self._solarSystemID = solarSystemID
    465         self._planetResourceValuesByPlanetID = {x.itemID:x for x in planetResourceValues}
    466         self._meetCriteria = {}
    467 
    468     def CheckSomePlanetMeetsCriteria(self):
    469         for planetValue in self._planetResourceValuesByPlanetID.itervalues():
    470             meetsCriteria = self._MeetsPlanetCriteria(planetValue)
    471             if meetsCriteria:
    472                 return True
    473 
    474         return False
    475 
    476     @telemetry.ZONE_METHOD
    477     def _MeetsPlanetCriteria(self, planetValue):
    478         if planetValue.itemID in self._meetCriteria:
    479             return self._meetCriteria[planetValue.itemID]
    480         meetsCriteria = self._contentProvider.CheckPlanetCriteria(planetValue)
    481         self._meetCriteria[planetValue.itemID] = meetsCriteria
    482         return meetsCriteria
    483 
    484     def GetValidPlanetResourceValues(self):
    485         perSystemPlanetFilter = self._contentProvider.GetPerSystemPlanetFilter()
    486         filteringPerSolarSystem = perSystemPlanetFilter == agencyConst.OPTION_PER_SYSTEM_VALUE
    487         validResourceValues = []
    488         for planetValue in self._planetResourceValuesByPlanetID.itervalues():
    489             if filteringPerSolarSystem:
    490                 validResourceValues.append(planetValue)
    491                 continue
    492             meetsCriteria = self._MeetsPlanetCriteria(planetValue)
    493             if meetsCriteria:
    494                 validResourceValues.append(planetValue)
    495 
    496         return validResourceValues
    497 
    498     def ClearMeetCriteria(self):
    499         self._meetCriteria.clear()