overriddenCoordinates.py (4726B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\evemap\map2d\overriddenCoordinates.py 2 from __future__ import print_function 3 from collections import defaultdict 4 from player_messaging.client.ui_message import prompt_player_fsd_dialog 5 import os 6 import json 7 try: 8 from blue import pyos, paths 9 except ImportError: 10 pyos = None 11 paths = None 12 13 def SaveCoordinates(coordinateDict): 14 override_file = get_override_file_path() 15 newDict = {} 16 for sID, coordinates in coordinateDict.iteritems(): 17 sInfo = cfg.mapSystemCache[sID] 18 newDict[sID] = {'region': cfg.evelocations.Get(sInfo.regionID).name, 19 'regionID': sInfo.regionID, 20 'solarsystem': cfg.evelocations.Get(sID).name, 21 'pos': coordinates} 22 23 try: 24 with open(override_file, 'w') as f: 25 json.dump(newDict, f, indent=4, sort_keys=True) 26 except Exception: 27 text = 'You failed to save the data.. have you checked out %s' % override_file 28 prompt_player_fsd_dialog('CustomInfo', {'info': text}) 29 raise 30 31 print('saving done') 32 33 34 def GetCoordinates(): 35 override_file = get_override_file_path() 36 resultDict = {} 37 if os.path.exists(override_file): 38 with open(override_file, 'r') as f: 39 resultDict = json.load(f) 40 solarSystemCoordinates = {int(sID):v['pos'] for sID, v in resultDict.iteritems()} 41 allCoordinatesByRegionID = defaultdict(list) 42 for sID, v in resultDict.iteritems(): 43 allCoordinatesByRegionID[v['regionID']].append(v['pos']) 44 45 regionCoordinates = {} 46 for regionID, coordList in allCoordinatesByRegionID.iteritems(): 47 allX = [ x[0] for x in coordList ] 48 allY = [ x[1] for x in coordList ] 49 averageX = float(sum(allX)) / len(allX) 50 averageY = float(sum(allY)) / len(allY) 51 regionCoordinates[regionID] = (averageX, averageY) 52 53 return (solarSystemCoordinates, regionCoordinates) 54 55 56 def get_override_file_path(): 57 return os.path.join(get_root(), 'overriddenCoordinates.json') 58 59 60 def get_root(): 61 root = os.path.dirname(__file__) 62 if pyos: 63 if pyos.packaged: 64 root = paths.ResolvePath(u'bin:/') + 'packages/evemap/' 65 return root 66 67 68 def MoveRegions(movingDict): 69 override_file = get_override_file_path() 70 resultDict = {} 71 if os.path.exists(override_file): 72 with open(override_file, 'r') as f: 73 resultDict = {int(sID):v for sID, v in json.load(f).iteritems()} 74 if not resultDict: 75 raise RuntimeError("No coordinates found, may file doesn't exist") 76 dictToSave = {} 77 byRegion = defaultdict(dict) 78 for sID, v in resultDict.iteritems(): 79 sInfo = cfg.mapSystemCache[sID] 80 byRegion[sInfo.regionID][sID] = v 81 82 for rID, rV in movingDict.iteritems(): 83 anchorID, newCoordinates = rV 84 solarSystemsInRegion = byRegion[rID] 85 if not solarSystemsInRegion: 86 continue 87 orignalInfo = solarSystemsInRegion[anchorID] 88 orignalPos = orignalInfo['pos'] 89 diffX = newCoordinates[0] - orignalPos[0] 90 diffY = newCoordinates[1] - orignalPos[1] 91 for sID, systemInfo in solarSystemsInRegion.iteritems(): 92 prevPos = systemInfo['pos'] 93 dictToSave[sID] = (prevPos[0] + diffX, prevPos[1] + diffY) 94 95 return dictToSave 96 97 98 class CoordinateOverrider(object): 99 100 def __init__(self): 101 self.overriddenCoordinates = {} 102 self.overriddenRegionCoordinates = {} 103 self.LoadOverriddenCoordindatesFileName() 104 105 def LoadOverriddenCoordindatesFileName(self): 106 solarSystemCoordinates, regionCoordinates = GetCoordinates() 107 self.overriddenCoordinates = solarSystemCoordinates 108 self.overriddenRegionCoordinates = regionCoordinates 109 110 def LoadOverriddenCoordinates(self): 111 self.LoadOverriddenCoordindatesFileName() 112 sm.ScatterEvent('On2dMapLayoutChange') 113 114 def SetOverridenCoordinates(self, solarSystemID, x, z): 115 self.overriddenCoordinates[solarSystemID] = (x, z) 116 117 def GetOverridenCoordinates(self, solarSystemID): 118 return self.overriddenCoordinates.get(solarSystemID, None) 119 120 def SaveOverriddenCoordinates(self): 121 SaveCoordinates(self.overriddenCoordinates) 122 123 def ResetCoordinates(self): 124 self.overriddenCoordinates.clear() 125 sm.ScatterEvent('On2dMapLayoutChange') 126 127 def GetOverridenCoordinatesForRegion(self, regionID): 128 return self.overriddenRegionCoordinates.get(regionID, None) 129 130 def MoveRegions(self, moveDict): 131 newCoordinates = MoveRegions(moveDict) 132 self.overriddenCoordinates.update(newCoordinates) 133 self.SaveOverriddenCoordinates() 134 sm.ScatterEvent('On2dMapLayoutChange')