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()