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

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