model.py (5791B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\eveclientqatools\sofpreviewer\model.py 2 from __future__ import absolute_import 3 import blue 4 import evetypes 5 from fsdBuiltData.client.groupGraphics import GetGraphicIdsFromTypeID 6 from sofDnaLibrary.query import GetDnaStringsMatchingQuery 7 from .modelconst import ModelConst 8 9 class SofPreviewerModel(object): 10 11 def __init__(self): 12 sofDB = blue.resMan.LoadObject('res:/dx9/model/spaceobjectfactory/data.red') 13 self.const = ModelConst() 14 self.sofFactions = [] 15 for faction in sofDB.faction: 16 self.sofFactions.append(faction.name) 17 18 self.sofFactions.sort() 19 self.sofHulls = [] 20 self.multihulls = {} 21 for hull in sofDB.hull: 22 hull = hull.name 23 if self.IsMultiHull(hull): 24 baseHullName, subpart, variation = self.GetMultiHullInfo(hull) 25 if baseHullName not in self.multihulls: 26 self.multihulls[baseHullName] = [] 27 self.multihulls[baseHullName].append((hull, subpart, variation)) 28 if subpart == 1: 29 self.sofHulls.append(hull) 30 else: 31 self.sofHulls.append(hull) 32 33 self.sofHulls.sort() 34 self.sofRaces = [] 35 for race in sofDB.race: 36 self.sofRaces.append(race.name) 37 38 self.sofRaces.sort() 39 self.sofMaterials = [] 40 for material in sofDB.material: 41 self.sofMaterials.append(material.name) 42 43 self.sofMaterials.sort() 44 self.sofMaterials.insert(0, 'None') 45 self.sofVariants = [] 46 for i in xrange(len(sofDB.generic.variants)): 47 self.sofVariants.append(sofDB.generic.variants[i].name) 48 49 self.sofVariants.sort() 50 self.sofVariants.insert(0, 'None') 51 self.sofPatterns = [] 52 self.patternToHulls = {} 53 for pattern in sofDB.pattern: 54 self.sofPatterns.append(pattern.name) 55 self.patternToHulls[pattern.name] = [ hull.name for hull in pattern.projections ] 56 57 self.sofPatterns.sort() 58 self.sofPatterns.insert(0, 'None') 59 self._hullToTurretCount = self.CreateHullToTurretLocatorCountMap(sofDB) 60 self._hiSlotItems = None 61 62 def CreateHullToTurretLocatorCountMap(self, sofDB): 63 hullToTurretCount = {} 64 hulls = sofDB.hull 65 for hull in hulls: 66 uniqueTurretLocations = set() 67 for turret in hull.locatorTurrets: 68 turretNumber = int(filter(str.isdigit, turret.name)) 69 uniqueTurretLocations.add(turretNumber) 70 71 hullToTurretCount[hull.name] = len(uniqueTurretLocations) 72 73 return hullToTurretCount 74 75 def IsMultiHull(self, hull): 76 return len(self.const.MULTI_HULL_REGEX.findall(hull)) > 0 77 78 def GetMultiHullInfo(self, hull): 79 results = self.const.MULTI_HULL_REGEX.findall(hull) 80 if len(results) > 0: 81 return (hull.replace(results[0], ''), self.GetMultiHullSpecification(hull), self.GetMultiHullVariation(hull)) 82 return (None, None, None) 83 84 def GetMultiHullVariation(self, hull): 85 return int(self.const.MULTI_HULL_VARIATION_REGEX.findall(hull)[0].replace('v', '')) 86 87 def GetMultiHullSpecification(self, hull): 88 return int(self.const.MULTI_HULL_SPECIFICATION_REGEX.findall(hull)[0].replace('_s', '')) 89 90 def GetMultiHullBaseName(self, hull): 91 results = self.const.MULTI_HULL_REGEX.findall(hull) 92 if len(results) > 0: 93 result = results[0] 94 return hull.replace(result, '') 95 return '' 96 97 @staticmethod 98 def _GetDefaultFactionForT1Hull(hullName): 99 dnaList = GetDnaStringsMatchingQuery(hullName) 100 if len(dnaList) == 0: 101 return '' 102 race = dnaList[0].split(':')[2] 103 return race + 'base' 104 105 def _GetDefaultFactionForT2Hull(self, hullName): 106 for factionName, hullList in self.const.DEFAULT_FACTION_FOR_T2HULLS.iteritems(): 107 if hullName in hullList: 108 return factionName 109 110 return '' 111 112 @staticmethod 113 def GetDnaFromPlayerShip(): 114 michelle = sm.GetService('michelle') 115 ship = michelle.GetBall(session.shipid) 116 if ship is None: 117 return 'ab1_t1:amarrbase:amarr' 118 dna = ship.GetDNA() 119 if dna is None: 120 return 'ab1_t1:amarrbase:amarr' 121 return dna 122 123 @property 124 def highSlotTypeIDs(self): 125 dogmalocation = sm.GetService('clientDogmaIM').GetFittingDogmaLocation(force=True) 126 dogmastaticMgr = dogmalocation.dogmaStaticMgr 127 typeIds = evetypes.GetAllTypeIDs() 128 if self._hiSlotItems is not None: 129 return self._hiSlotItems 130 self._hiSlotItems = [] 131 for type in typeIds: 132 effectTypes = dogmastaticMgr.TypeGetEffects(type) 133 for effectType in effectTypes: 134 if effectType == const.effectHiPower: 135 self._hiSlotItems.append(type) 136 137 return self._hiSlotItems 138 139 def GetHighSlotItemName(self, typeID): 140 return evetypes.GetNameOrNone(typeID) 141 142 def GetGraphicIdFromTypeId(self, typeID): 143 return GetGraphicIdsFromTypeID(typeID) 144 145 def GetTurretLocatorCountFromName(self, hullName): 146 return self._hullToTurretCount.get(hullName, 0) 147 148 def GetTurretLocatorCount(self, dna): 149 try: 150 from platformtools.compatibility.exposure import dnahelper 151 parts = dnahelper.DNAParts(dna) 152 hullName = parts.hull 153 return self.GetTurretLocatorCountFromName(hullName) 154 except ImportError: 155 if ':' in dna: 156 return self.GetTurretLocatorCountFromName(dna.split(':')[0]) 157 else: 158 return 0