mapViewSolarSystem.py (32296B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\mapView\mapViewSolarSystem.py 2 import logging 3 import carbonui.const as uiconst 4 import eve.client.script.ui.shared.pointerTool.pointerToolConst as pConst 5 import evecamera 6 import geo2 7 import localization 8 import trinity 9 import uthread 10 from brennivin.itertoolsext import Bundle 11 from carbon.client.script.environment.AudioUtil import PlaySound 12 from carbon.common.script.util.timerstuff import AutoTimer 13 from carbonui.control.buttonIcon import ButtonIcon 14 from carbonui.control.dragResizeCont import DragResizeCont 15 from carbonui.primitives.fill import Fill 16 from carbonui.window.segment.underlay import WindowSegmentUnderlay 17 from carbonui.primitives.container import Container 18 from carbonui.primitives.containerAutoSize import ContainerAutoSize 19 from carbonui.uicore import uicore 20 from carbonui.util.various_unsorted import IsUnder 21 from eve.client.script.ui.control import eveLabel 22 from eve.client.script.ui.control.eveLabel import EveLabelSmall 23 from eve.client.script.ui.control.infoIcon import MoreInfoIcon 24 from eve.client.script.ui.control.themeColored import FillThemeColored, FrameThemeColored 25 from eve.client.script.ui.inflight.probeScannerWindow import ProbeScannerWindow 26 from eve.client.script.ui.inflight.scannerFiles.directionalScanUtil import SetScanModeTarget, IsDscanConeShown 27 from eve.client.script.ui.inflight.scannerFiles.directionalScannerPalette import DirectionalScannerPalette 28 from eve.client.script.ui.inflight.scannerFiles.directionalScannerWindow import DirectionalScanner 29 from eve.client.script.ui.inflight.scannerFiles.probeScannerPalette import ProbeScannerPalette 30 from eve.client.script.ui.inflight.scannerFiles.scanHologramHandler import ScanHologramHandler 31 from eve.client.script.ui.inflight.scannerFiles.scannerUtil import SetProbeScanPanelWindowed, SetDirectionalScanPanelWindowed, IsSolarSystemMapFullscreen, IsShortuctExecutionAllowed, SetProbeScanEmbeddedPanelOpen, SetProbeScanEmbeddedPanelClosed, IsProbeScanEmbeddedPanelOpen, SetDirectionalScanEmbeddedPanelClosed, IsDirectionalScanEmbeddedPanelOpen, SetDirectionalScanEmbeddedPanelOpen 32 from eve.client.script.ui.shared.mapView.mapViewBookmarkHandler import MapViewBookmarkHandler 33 from eve.client.script.ui.shared.mapView.mapViewConst import MARKERID_MYPOS, MARKERID_MYHOME, VIEWMODE_MARKERS_SETTINGS, SETTING_PREFIX, MIN_CAMERA_DISTANCE_SOLARSYSTEMVIEW, MAX_CAMERA_DISTANCE_SOLARSYSTEMVIEW 34 from eve.client.script.ui.shared.mapView.mapViewScannerNavigationStandalone import MapViewScannerNavigation 35 from eve.client.script.ui.shared.mapView.mapViewSceneContainer import MapViewSceneContainer 36 from eve.client.script.ui.shared.mapView.mapViewUtil import SolarSystemPosToMapPos, ScaleSolarSystemValue, GetTranslationFromParentWithRadius, UpdateDebugOutput, TryGetPosFromItemID 37 from eve.client.script.ui.shared.mapView.markers.mapMarkerMyHome import MarkerMyHome 38 from eve.client.script.ui.shared.mapView.markers.mapMarkersHandler import MapViewMarkersHandler 39 from eve.client.script.ui.shared.mapView.markers.markerMyLocationSolarSystem import MarkerMyLocationSolarSystem 40 from eve.client.script.ui.shared.mapView.systemMapHandler import SystemMapHandler, SolarSystemInfoBox 41 from eve.common.script.sys.idCheckers import IsSolarSystem, IsStation, IsKnownSpaceSystem 42 from evegraphics import effects 43 from eveservices.menu import GetMenuService 44 from localization import GetByLabel 45 from menu import MenuList 46 from probescanning.tooltips.DScanHelpTooltip import DScanHelpTooltip 47 from probescanning.tooltips.ProbeScanHelpTooltip import ProbeScanHelpTooltip 48 log = logging.getLogger(__name__) 49 SUNBASE = 7.5 50 LINE_EFFECT = 'res:/Graphics/Effect/Managed/Space/SpecialFX/Lines3DStarMapNew.fx' 51 PARTICLE_EFFECT = 'res:/Graphics/Effect/Managed/Space/SpecialFX/Particles/StarmapNew.fx' 52 PARTICLE_SPRITE_TEXTURE = 'res:/Texture/Particle/mapStarNew5.dds' 53 PARTICLE_SPRITE_HEAT_TEXTURE = 'res:/Texture/Particle/mapStarNewHeat.dds' 54 DISTANCE_RANGE = 'distanceRange' 55 NEUTRAL_COLOR = (0.25, 56 0.25, 57 0.25, 58 1.0) 59 HEX_TILE_SIZE = 60 60 61 class MapViewSolarSystem(Container): 62 __notifyevents__ = ['OnUIScalingChange', 63 'OnAutopilotUpdated', 64 'OnDestinationSet', 65 'OnSessionChanged', 66 'OnBallparkSetState', 67 'DoBallClear', 68 'DoBallsAdded', 69 'OnDirectionalScanComplete', 70 'OnDirectionalScannerClosed', 71 'OnDirectionalScannerOpened', 72 'OnDirectionalScannerDocked', 73 'OnDirectionalScannerUndocked', 74 'OnDscanEntryMouseEnter', 75 'OnDscanEntryMouseExit', 76 'OnProbeScannerClosed', 77 'OnProbeScannerDocked', 78 'OnProbeScannerUndocked'] 79 curveSet = None 80 systemMap = None 81 mapRoot = None 82 infoBox = None 83 markersHandler = None 84 bookmarkHandler = None 85 layoutHandler = None 86 markersAlwaysVisible = set() 87 inFocus = False 88 currentSolarsystem = None 89 hilightID = None 90 mapViewID = None 91 sceneBlendMode = None 92 showSolarSystemNebula = True 93 showStarfield = False 94 showDebugInfo = False 95 showInfobox = False 96 cameraID = evecamera.CAM_SOLARSYSTEMMAP 97 98 def ApplyAttributes(self, attributes): 99 Container.ApplyAttributes(self, attributes) 100 self.mapViewID = attributes.mapViewID 101 self.innerPadding = attributes.Get('innerPadding', 0) 102 self.mapSvc = sm.GetService('map') 103 self.autoFocusEnabled = settings.char.ui.Get('%s_autoFocusEnabled_%s' % (SETTING_PREFIX, self.mapViewID), True) 104 self.mainCont = Container(name='mainCont', parent=self) 105 self.infoLayer = Container(parent=self, clipChildren=True, name='infoLayer', padding=self.innerPadding) 106 if attributes.showCloseButton: 107 ButtonIcon(parent=self.infoLayer, hint=localization.GetByLabel('UI/Generic/Close'), texturePath='res:/UI/Texture/classes/DockPanel/closeButton.png', func=attributes.closeFunction or self.Close, align=uiconst.TOPRIGHT) 108 self.showInfobox = attributes.Get('showInfobox', self.showInfobox) 109 if self.showInfobox: 110 self.infoBox = SolarSystemInfoBox(parent=self.infoLayer, align=uiconst.TOPLEFT, left=32, top=32) 111 navigationClass = attributes.Get('navigationClass', MapViewScannerNavigation) 112 navigationPadding = attributes.Get('navigationPadding', (0, 32, 0, 0)) 113 self.mapNavigation = navigationClass(parent=self, align=uiconst.TOALL, state=uiconst.UI_NORMAL, mapView=self, padding=navigationPadding) 114 self.ConstructScene(attributes) 115 self.ConstructViewButtonCont() 116 117 def ConstructViewButtonCont(self): 118 self.viewButtonCont = ContainerAutoSize(name='viewButtonCont', parent=Container(parent=self.mainCont), align=uiconst.CENTERBOTTOM, top=12) 119 btn = ButtonIcon(parent=self.viewButtonCont, align=uiconst.TOPLEFT, iconSize=50, pos=(45, 0, 46, 46), texturePath='res:/UI/Texture/Classes/MapView/sideView.png', func=self.OnSideViewButton) 120 btn.LoadTooltipPanel = self.LoadSideViewBtnTooltipPanel 121 btn = ButtonIcon(parent=self.viewButtonCont, align=uiconst.TOPLEFT, iconSize=50, pos=(0, 0, 46, 46), texturePath='res:/UI/Texture/Classes/MapView/topView.png', func=self.OnTopViewButton) 122 btn.LoadTooltipPanel = self.LoadTopViewBtnTooltipPanel 123 124 def OnTopViewButton(self): 125 self.mapNavigation.cameraController.SetTopView() 126 127 def OnSideViewButton(self): 128 self.mapNavigation.cameraController.SetSideView() 129 130 def LoadSideViewBtnTooltipPanel(self, tooltipPanel, *args): 131 self._LoadBtnTooltipPanel(tooltipPanel, 'UI/Inflight/Scanner/ViewFromSide') 132 133 def LoadTopViewBtnTooltipPanel(self, tooltipPanel, *args): 134 self._LoadBtnTooltipPanel(tooltipPanel, 'UI/Inflight/Scanner/ViewFromTop') 135 136 def _LoadBtnTooltipPanel(self, tooltipPanel, txt): 137 tooltipPanel.LoadGeneric2ColumnTemplate() 138 tooltipPanel.AddLabelMedium(text=GetByLabel(txt), colSpan=tooltipPanel.columns, bold=True) 139 tooltipPanel.AddLabelShortcut(GetByLabel('UI/Inflight/Scanner/ToggleView'), GetByLabel('UI/Inflight/Scanner/DoubleClickScene'), bold=False) 140 141 def CheckExecuteFilterShortcut(self, vkey): 142 if IsShortuctExecutionAllowed(self): 143 dScanHasFocus = IsDirectionalScanEmbeddedPanelOpen() and IsUnder(uicore.registry.GetFocus(), self.directionalScannerPalette) 144 if IsProbeScanEmbeddedPanelOpen() and not dScanHasFocus: 145 return self.probeScannerPalette.ToggleFilterShortcut(vkey) 146 if IsDirectionalScanEmbeddedPanelOpen(): 147 return self.directionalScannerPalette.ToggleFitlerShortcut(vkey) 148 return False 149 150 def ConstructScene(self, attributes): 151 sceneContainer = MapViewSceneContainer(parent=self, align=uiconst.TOALL, state=uiconst.UI_DISABLED, padding=self.innerPadding, cameraID=self.cameraID) 152 sceneContainer.Startup() 153 self.sceneContainer = sceneContainer 154 self.sceneContainer.display = False 155 scene = trinity.EveSpaceScene() 156 self.showSolarSystemNebula = attributes.Get('showSolarSystemNebula', self.showSolarSystemNebula) 157 if self.showSolarSystemNebula: 158 scene.backgroundRenderingEnabled = True 159 self.showStarfield = attributes.Get('showStarfield', self.showStarfield) 160 if self.showStarfield: 161 scene.starfield = trinity.Load('res:/dx9/scene/starfield/spritestars.red') 162 scene.backgroundRenderingEnabled = True 163 self.mapRoot = trinity.EveRootTransform() 164 self.mapRoot.name = 'mapRoot' 165 scene.objects.append(self.mapRoot) 166 self.sceneBlendMode = attributes.Get('sceneBlendMode', self.sceneBlendMode) 167 self.sceneContainer.scene = scene 168 self.sceneContainer.DisplaySpaceScene(blendMode=self.sceneBlendMode) 169 if self.destroyed: 170 return 171 self.markersHandler = MapViewMarkersHandler(self, self.sceneContainer.bracketCurveSet, self.infoLayer, eventHandler=self.mapNavigation, stackMarkers=attributes.Get('stackMarkers', True)) 172 self.bookmarkHandler = MapViewBookmarkHandler(self) 173 self.showDebugInfo = attributes.Get('showDebugInfo', self.showDebugInfo) 174 if self.showDebugInfo: 175 self.debugOutput = EveLabelSmall(parent=self, align=uiconst.BOTTOMLEFT, left=6, top=6, idx=0) 176 self.debugOutputTimer = AutoTimer(5, self.UpdateDebugOutput) 177 self.camera.fov = 0.7 178 self.camera.maxZoom = MIN_CAMERA_DISTANCE_SOLARSYSTEMVIEW 179 self.camera.minZoom = MAX_CAMERA_DISTANCE_SOLARSYSTEMVIEW 180 self.camera.nearClip = 0.1 181 self.camera.farClip = 50000.0 182 self.camera.SetUpdateCallback(self.OnCameraUpdate) 183 uthread.new(uicore.registry.SetFocus, self) 184 self.ConstructScanPanels() 185 self.scanHologramHandler = ScanHologramHandler(scene=self.sceneContainer.scene, camera=self.camera) 186 sm.RegisterNotify(self) 187 188 def ConstructScanPanels(self): 189 self.horizontalDragCont = DragResizeCont(name='HorizontalDragContainer', parent=self.mainCont, idx=0, align=uiconst.TORIGHT, minSize=362, defaultSize=362, maxSize=600, onResizeCallback=self.OnHorizontalDragContResize, settingsID='solarSystemViewHorizontal', state=uiconst.UI_HIDDEN) 190 self.panelsCont = DragResizeCont(name='PanelsContainer', parent=self.horizontalDragCont.mainCont, align=uiconst.TOTOP_PROP, minSize=0.32, defaultSize=0.5, maxSize=1.0, padding=(0, 26, 0, 0), settingsID='solarSystemViewVertical') 191 self.secondPanelContainer = Container(name='secondPanelContainer', parent=self.horizontalDragCont.mainCont, align=uiconst.TOALL, state=uiconst.UI_HIDDEN) 192 self.secondPanelMainCont = Container(parent=self.secondPanelContainer, padding=4) 193 FillThemeColored(bgParent=self.panelsCont.mainCont, colorType=uiconst.COLORTYPE_UIBASECONTRAST, opacity=0.6) 194 FillThemeColored(bgParent=self.secondPanelContainer, colorType=uiconst.COLORTYPE_UIBASECONTRAST, opacity=0.6) 195 FillThemeColored(bgParent=self.horizontalDragCont, colorType=uiconst.COLORTYPE_UIBASECONTRAST, opacity=0.2) 196 self.firstPanelMainCont = Container(name='firstPanelMainCont', parent=self.panelsCont.mainCont, padding=4) 197 self.horizontalDragCont.mainCont.padding = 4 198 self.panelsCont.OnMouseWheel = lambda *args: None 199 self.directionalScannerPalette = None 200 self.probeScannerPalette = None 201 self.UpdateScanPanels() 202 203 def UpdateScanPanels(self): 204 if IsSolarSystemMapFullscreen(): 205 self.horizontalDragCont.padding = (0, 0, 18, 55) 206 else: 207 self.horizontalDragCont.padding = 0 208 if not IsProbeScanEmbeddedPanelOpen() and not IsDirectionalScanEmbeddedPanelOpen(): 209 self.horizontalDragCont.Hide() 210 elif not session.solarsystemid: 211 self.horizontalDragCont.Hide() 212 else: 213 self.horizontalDragCont.Show() 214 self._UpdateScanPanelsEmbedded() 215 self.OnHorizontalDragContResize() 216 217 def _UpdateScanPanelsEmbedded(self): 218 parent = self.firstPanelMainCont 219 if IsProbeScanEmbeddedPanelOpen() or IsDirectionalScanEmbeddedPanelOpen(): 220 if IsProbeScanEmbeddedPanelOpen(): 221 if self.probeScannerPalette: 222 self.probeScannerHeader.SetParent(parent) 223 self.probeScannerPalette.SetParent(parent) 224 else: 225 self.ConstructScannerPalette(parent) 226 parent = self.secondPanelMainCont 227 if IsDirectionalScanEmbeddedPanelOpen(): 228 if self.directionalScannerPalette: 229 self.directionalScannerHeader.SetParent(parent) 230 self.directionalScannerPalette.SetParent(parent) 231 else: 232 self.ConstructDirectionalScannerPalette(parent) 233 if IsProbeScanEmbeddedPanelOpen() and IsDirectionalScanEmbeddedPanelOpen(): 234 self.panelsCont.SetMaxSize(0.8) 235 self.secondPanelContainer.SetState(uiconst.UI_NORMAL) 236 else: 237 self.panelsCont.SetMaxSize(1.0) 238 self.secondPanelContainer.SetState(uiconst.UI_HIDDEN) 239 240 def OpenDirectionalScanPanelEmbedded(self): 241 if IsDirectionalScanEmbeddedPanelOpen(): 242 return 243 if self.currentSolarsystem: 244 self.currentSolarsystem.EnableDirectionalScanHandler() 245 SetDirectionalScanEmbeddedPanelOpen() 246 self.UpdateScanPanels() 247 248 def OpenProbeScanPanelEmbedded(self): 249 if self.currentSolarsystem: 250 self.currentSolarsystem.EnableProbeHandlerStandalone() 251 SetProbeScanEmbeddedPanelOpen() 252 self.UpdateScanPanels() 253 254 def OnDirectionalScannerDocked(self): 255 self.OpenDirectionalScanPanelEmbedded() 256 257 def OnDirectionalScannerUndocked(self): 258 SetDirectionalScanEmbeddedPanelClosed() 259 260 def OnProbeScannerUndocked(self): 261 SetProbeScanEmbeddedPanelClosed() 262 263 def OnProbeScannerDocked(self): 264 self.OpenProbeScanPanelEmbedded() 265 266 def OnDockModeChanged(self, isFullScreen = False): 267 self.horizontalDragCont.Close() 268 self.mapNavigation.OnDockModeChanged() 269 self.ConstructScanPanels() 270 if isFullScreen: 271 self.camera.EnableCenterOffset() 272 else: 273 self.camera.DisableCenterOffset() 274 275 def ConstructDirectionalScannerPalette(self, parent): 276 DirectionalScanner.CloseIfOpen() 277 self.directionalScannerHeader = ScannerPaletteHeader(parent=parent, align=uiconst.TOTOP, text=GetByLabel('UI/Inflight/Scanner/DirectionalScanner'), floatCallback=self.SetDirectionalScannerWindowed, helpTooltip=DScanHelpTooltip, closeCallback=self.CloseDirectionalScannerPalette) 278 self.directionalScannerPalette = DirectionalScannerPalette(parent=parent, padTop=2, scanOnOpen=False, state=uiconst.UI_NORMAL, uniqueUiName=pConst.UNIQUE_NAME_DIRECTIONAL_SCANNER) 279 280 def CloseDirectionalScanWindow(self): 281 dScanWindow = DirectionalScanner.GetIfOpen() 282 if dScanWindow: 283 dScanWindow.CloseByUser() 284 285 def ConstructScannerPalette(self, parent): 286 ProbeScannerWindow.CloseIfOpen() 287 self.probeScannerHeader = ScannerPaletteHeader(parent=parent, align=uiconst.TOTOP, text=GetByLabel('UI/Inflight/Scanner/ProbeScanner'), floatCallback=self.SetProbeScannerWindowed, helpTooltip=ProbeScanHelpTooltip, closeCallback=self.CloseProbeScannerPalette) 288 self.probeScannerPalette = ProbeScannerPalette(name='ProbeScannerPalette', parent=parent, align=uiconst.TOALL, state=uiconst.UI_NORMAL, padTop=2, uniqueUiName=pConst.UNIQUE_NAME_PROBE_SCANNER) 289 290 def CloseProbeScannerWindow(self): 291 probeScanWindow = ProbeScannerWindow.GetIfOpen() 292 if probeScanWindow: 293 probeScanWindow.CloseByUser() 294 295 def CloseDirectionalScannerPalette(self): 296 if self.currentSolarsystem: 297 self.currentSolarsystem.StopDirectionalScanHandler() 298 SetDirectionalScanEmbeddedPanelClosed() 299 self.directionalScannerPalette.Close() 300 self.directionalScannerHeader.Close() 301 self.directionalScannerPalette = None 302 self.UpdateScanPanels() 303 304 def CloseProbeScannerPalette(self): 305 if self.currentSolarsystem: 306 self.currentSolarsystem.StopProbeHandler() 307 SetProbeScanEmbeddedPanelClosed() 308 self.probeScannerPalette.Close() 309 self.probeScannerHeader.Close() 310 self.probeScannerPalette = None 311 self.UpdateScanPanels() 312 313 def ToggleDirectionalScanner(self, wasMinimized = False): 314 if IsDirectionalScanEmbeddedPanelOpen(): 315 if not wasMinimized: 316 self.CloseDirectionalScannerPalette() 317 else: 318 self.OpenDirectionalScanPanelEmbedded() 319 320 def ToggleProbeScanner(self, wasMinimized = False): 321 if IsProbeScanEmbeddedPanelOpen(): 322 if not wasMinimized: 323 self.CloseProbeScannerPalette() 324 else: 325 self.OpenProbeScanPanelEmbedded() 326 327 def SetDirectionalScannerWindowed(self): 328 self.CloseDirectionalScannerPalette() 329 SetDirectionalScanPanelWindowed() 330 DirectionalScanner.Open() 331 self.UpdateScanPanels() 332 333 def SetProbeScannerWindowed(self): 334 self.CloseProbeScannerPalette() 335 SetProbeScanPanelWindowed() 336 ProbeScannerWindow.Open() 337 self.UpdateScanPanels() 338 339 def OnHorizontalDragContResize(self, *args): 340 if not hasattr(self, 'horizontalDragCont'): 341 return 342 if self.horizontalDragCont.display: 343 w, _ = self.GetAbsoluteSize() 344 offset = self.horizontalDragCont.width / float(w) 345 else: 346 offset = 0.0 347 self.camera.SetCenterOffsetPanels(offset) 348 349 def _OnSizeChange_NoBlock(self, *args): 350 self.OnHorizontalDragContResize() 351 352 def Close(self, *args, **kwds): 353 sm.UnregisterNotify(self) 354 if hasattr(self, 'mapRoot') and self.mapRoot is not None: 355 del self.mapRoot.children[:] 356 self.mapRoot = None 357 if self.currentSolarsystem: 358 self.currentSolarsystem.RemoveFromScene() 359 self.currentSolarsystem = None 360 if self.camera: 361 self.camera.OnDeactivated() 362 sm.GetService('sceneManager').UnregisterCamera(self.camera.cameraID) 363 self.camera = None 364 if self.markersHandler: 365 self.markersHandler.StopHandler() 366 self.markersHandler = None 367 if self.bookmarkHandler: 368 self.bookmarkHandler.StopHandler() 369 self.bookmarkHandler = None 370 self.mapNavigation = None 371 self.debugOutputTimer = None 372 Container.Close(self) 373 374 def UpdateDebugOutput(self): 375 if self.destroyed: 376 return 377 UpdateDebugOutput(self.debugOutput, camera=self.camera, mapView=self) 378 379 def SetFocusState(self, focusState): 380 self.inFocus = focusState 381 382 def OnMarkerHovered(self, itemID): 383 hilightID = itemID 384 if self.hilightID != hilightID: 385 self.hilightID = hilightID 386 if hilightID: 387 self.markersHandler.HilightMarkers([hilightID]) 388 else: 389 self.markersHandler.HilightMarkers([]) 390 391 def OnMapViewSettingChanged(self, settingKey, *args, **kwds): 392 if settingKey == VIEWMODE_MARKERS_SETTINGS: 393 if self.currentSolarsystem: 394 self.currentSolarsystem.LoadMarkers(showChanges=True) 395 396 def FocusSelf(self, *args, **kwds): 397 self.EnableAutoFocus() 398 self.SetActiveItemID(self.GetEgoMarkerID()) 399 400 def EnableAutoFocus(self): 401 settings.char.ui.Set('%s_autoFocusEnabled_%s' % (SETTING_PREFIX, self.mapViewID), True) 402 self.autoFocusEnabled = True 403 404 def DisableAutoFocus(self): 405 settings.char.ui.Set('%s_autoFocusEnabled_%s' % (SETTING_PREFIX, self.mapViewID), False) 406 self.autoFocusEnabled = False 407 408 @apply 409 def solarSystemTransform(): 410 411 def fget(self): 412 if self.currentSolarsystem: 413 return self.currentSolarsystem.systemMapTransform 414 415 return property(**locals()) 416 417 @apply 418 def solarSystemSunID(): 419 420 def fget(self): 421 if self.currentSolarsystem: 422 return self.currentSolarsystem.sunID 423 424 return property(**locals()) 425 426 @apply 427 def camera(): 428 429 def fget(self): 430 if getattr(self, 'sceneContainer', None): 431 return self.sceneContainer.camera 432 433 def fset(self, value): 434 pass 435 436 return property(**locals()) 437 438 @apply 439 def scene(): 440 441 def fget(self): 442 return self.sceneContainer.scene 443 444 return property(**locals()) 445 446 @apply 447 def solarSystemID(): 448 449 def fget(self): 450 if self.currentSolarsystem: 451 return self.currentSolarsystem.solarsystemID 452 453 def fset(self, value): 454 pass 455 456 return property(**locals()) 457 458 def LogError(self, *args, **kwds): 459 log.error('MAPVIEW ' + repr(args)) 460 461 def LogInfo(self, *args, **kwds): 462 log.info('MAPVIEW ' + repr(args)) 463 464 def LogWarn(self, *args, **kwds): 465 log.warning('MAPVIEW ' + repr(args)) 466 467 def OnUIScalingChange(self, *args): 468 self.markersHandler.ReloadAll() 469 470 def GetItemMenu(self, itemID): 471 item = self.mapSvc.GetItem(itemID, retall=True) 472 if not item: 473 return MenuList() 474 m = MenuList([None]) 475 m += GetMenuService().CelestialMenu(itemID, mapItem=item) 476 return m.filter('UI/Commands/ShowLocationOnMap') 477 478 def ShowMyHomeStation(self): 479 if self.destroyed: 480 return 481 markerID = (MARKERID_MYHOME, session.charid) 482 self.markersHandler.RemoveMarker(markerID) 483 try: 484 self.markersAlwaysVisible.remove(markerID) 485 except: 486 pass 487 488 homeStationRow = sm.GetService('charactersheet').GetHomeStationRow() 489 homeStationID = homeStationRow.stationID 490 if not homeStationID or self.destroyed: 491 return 492 if self.destroyed: 493 return 494 solarsystemID = homeStationRow.solarSystemID 495 if solarsystemID != self.currentSolarsystem.solarsystemID: 496 return 497 if IsStation(homeStationID): 498 stationInfo = sm.GetService('ui').GetStationStaticInfo(homeStationID) 499 pos = (stationInfo.x, stationInfo.y, stationInfo.z) 500 else: 501 stationInfo = Bundle(stationID=homeStationID, stationTypeID=homeStationRow.stationTypeID) 502 pos = TryGetPosFromItemID(homeStationID, solarsystemID) 503 localPosition = SolarSystemPosToMapPos(pos) 504 markerObject = self.markersHandler.AddSolarSystemBasedMarker(markerID, MarkerMyHome, stationInfo=stationInfo, solarSystemID=solarsystemID, mapPositionLocal=localPosition, mapPositionSolarSystem=(0, 0, 0)) 505 self.markersAlwaysVisible.add(markerID) 506 507 def RemoveMyLocation(self): 508 markerID = self.GetEgoMarkerID() 509 self.markersHandler.RemoveMarker(markerID, fadeOut=False) 510 511 def ShowMyLocation(self): 512 if self.destroyed: 513 return 514 if self.mapRoot is None: 515 return 516 self.RemoveMyLocation() 517 markerID = self.GetEgoMarkerID() 518 try: 519 self.markersAlwaysVisible.remove(markerID) 520 except: 521 pass 522 523 if self.solarSystemID == session.solarsystemid2: 524 if session.stationid: 525 stationInfo = sm.GetService('ui').GetStationStaticInfo(session.stationid) 526 if self.destroyed: 527 return 528 localPosition = SolarSystemPosToMapPos((stationInfo.x, stationInfo.y, stationInfo.z)) 529 trackObjectID = None 530 elif session.structureid: 531 structureInfo = self.mapSvc.GetMapDataForStructure(session.solarsystemid2, session.structureid) 532 localPosition = SolarSystemPosToMapPos((structureInfo.x, structureInfo.y, structureInfo.z)) 533 trackObjectID = None 534 else: 535 localPosition = (0, 0, 0) 536 trackObjectID = session.shipid or session.stationid 537 self.markersHandler.AddSolarSystemBasedMarker(markerID, MarkerMyLocationSolarSystem, trackObjectID=trackObjectID, solarSystemID=session.solarsystemid2, mapPositionLocal=localPosition, mapPositionSolarSystem=(0, 0, 0)) 538 self.markersAlwaysVisible.add(markerID) 539 if self.autoFocusEnabled: 540 self.FocusSelf() 541 542 def GetEgoMarkerID(self): 543 return (MARKERID_MYPOS, session.charid) 544 545 def OnCameraUpdate(self): 546 camera = self.camera 547 if camera is None or self.destroyed: 548 return 549 if self.currentSolarsystem: 550 self.currentSolarsystem.OnCameraUpdate() 551 cameraDistance = camera.GetZoomDistanceForMap() 552 if self.markersHandler: 553 self.markersHandler.RegisterCameraTranslationFromParent(cameraDistance) 554 555 def SetCameraPointOfInterestSolarSystemPosition(self, solarSystemID, position): 556 if solarSystemID != self.solarSystemID: 557 return 558 self.DisableAutoFocus() 559 self.camera.LookAtPoint(SolarSystemPosToMapPos(position)) 560 561 def SetActiveItemID(self, itemID, *args, **kwds): 562 markerObject = self.markersHandler.GetMarkerByID(itemID) 563 if markerObject: 564 self.SetSelectedMarker(markerObject) 565 566 def SetSelectedMarker(self, markerObject, *args, **kwds): 567 PlaySound('msg_newscan_explore_click_play') 568 SetScanModeTarget() 569 self.camera.LookAtMarker(markerObject) 570 571 def LookAtEgoMarker(self, duration = None): 572 pos = self.GetEgoPosition() 573 if pos: 574 self.camera.LookAtPoint(pos, duration) 575 576 def GetEgoPosition(self): 577 markerObject = self.markersHandler.GetMarkerByID(self.GetEgoMarkerID()) 578 if markerObject: 579 return markerObject.GetDisplayPosition() 580 581 def LoadSolarSystemDetails(self, solarSystemID): 582 current = getattr(self, 'currentSolarsystem', None) 583 if current: 584 resetSolarsystemID = current.solarsystemID 585 else: 586 resetSolarsystemID = None 587 if resetSolarsystemID != solarSystemID: 588 if current: 589 current.Close() 590 self.currentSolarsystem = None 591 self.currentSolarsystem = SystemMapHandler(self, solarSystemID, position=(0, 0, 0)) 592 self.currentSolarsystem.LoadSolarSystemMap() 593 self.currentSolarsystem.EnableProbeHandlerStandalone() 594 if self.destroyed: 595 return 596 self.currentSolarsystem.LoadMarkers() 597 if self.destroyed: 598 return 599 scaling = ScaleSolarSystemValue(1.0) 600 self.currentSolarsystem.systemMapTransform.scaling = (scaling, scaling, scaling) 601 if not IsKnownSpaceSystem(solarSystemID) and self.scene.starfield: 602 self.scene.starfield.numStars = 0 603 uthread.new(self.ShowMyHomeStation) 604 uthread.new(self.ShowMyLocation) 605 if self.infoBox: 606 self.infoBox.LoadSolarSystemID(solarSystemID) 607 608 def FrameSolarSystem(self): 609 radius = ScaleSolarSystemValue(self.currentSolarsystem.solarSystemRadius) 610 cameraDistanceFromInterest = GetTranslationFromParentWithRadius(radius, self.camera) 611 if not self.autoFocusEnabled: 612 self.SetCameraPointOfInterestSolarSystemPosition(session.solarsystemid2, (0, 0, 0)) 613 if cameraDistanceFromInterest: 614 self.camera.SetZoomDistance(1.3 * cameraDistanceFromInterest) 615 self.sceneContainer.display = True 616 617 def GetPickObjects(self, *args, **kwds): 618 return None 619 620 def OnAutopilotUpdated(self): 621 pass 622 623 def OnDestinationSet(self, *args, **kwds): 624 self.ShowMyLocation() 625 626 def OnBallparkSetState(self, *args): 627 if self.currentSolarsystem: 628 self.currentSolarsystem.LoadMarkers() 629 self.ShowMyHomeStation() 630 631 def OnSessionChanged(self, isRemote, session, change): 632 if self.destroyed: 633 return 634 if self.currentSolarsystem: 635 if 'locationid' in change and not IsSolarSystem(change['locationid'][1]): 636 self.currentSolarsystem.StopDirectionalScanHandler() 637 self.currentSolarsystem.StopProbeHandler() 638 self.currentSolarsystem.HideRangeIndicator() 639 self.currentSolarsystem.LoadMarkers() 640 self.ShowMyHomeStation() 641 uthread.new(self.ShowMyLocation) 642 if not session.solarsystemid: 643 self.UpdateScanPanels() 644 645 def DoBallClear(self, solitem): 646 self.RemoveMyLocation() 647 648 def DoBallsAdded(self, balls_slimItems, *args, **kw): 649 for ball, slimItem in balls_slimItems: 650 if ball.id == session.shipid: 651 uthread.new(self.ShowMyLocation) 652 break 653 654 def UpdateViewPort(self): 655 if self.sceneContainer: 656 self.sceneContainer.UpdateViewPort() 657 658 def OnDirectionalScanComplete(self, angle, range, direction, results): 659 egoPos = self.GetEgoPosition() 660 if IsDscanConeShown() and egoPos and not self.destroyed: 661 self.scanHologramHandler.RenderHolograms(results, egoPos, direction) 662 663 def OnDscanEntryMouseEnter(self, typeID): 664 if IsDscanConeShown(): 665 egoPos = self.GetEgoPosition() 666 if egoPos: 667 camera = sm.GetService('sceneManager').GetActivePrimaryCamera() 668 direction = geo2.Vec3Scale(camera.GetLookAtDirection(), -1) 669 self.scanHologramHandler.RenderHologram(typeID, egoPos, direction) 670 671 def OnDscanEntryMouseExit(self): 672 self.scanHologramHandler.HideHologram() 673 674 def OnDirectionalScannerOpened(self): 675 if self.currentSolarsystem: 676 self.currentSolarsystem.EnableDirectionalScanHandler() 677 678 def OnDirectionalScannerClosed(self): 679 SetDirectionalScanEmbeddedPanelClosed() 680 if self.currentSolarsystem: 681 self.currentSolarsystem.StopDirectionalScanHandler() 682 683 def OnProbeScannerClosed(self): 684 SetProbeScanEmbeddedPanelClosed() 685 686 687 class ScannerPaletteHeader(Container): 688 name = 'ScannerPaletteHeader' 689 default_height = 26 690 691 def ApplyAttributes(self, attributes): 692 Container.ApplyAttributes(self, attributes) 693 text = attributes.text 694 floatCallback = attributes.floatCallback 695 helpTooltip = attributes.helpTooltip 696 self.closeCallback = attributes.closeCallback 697 WindowSegmentUnderlay(bgParent=self) 698 headerLabel = eveLabel.EveLabelMedium(parent=self, align=uiconst.CENTERLEFT, text=text, left=5) 699 MoreInfoIcon(name='helpIcon', parent=self, align=uiconst.CENTERLEFT, left=headerLabel.width + 10).tooltipPanelClassInfo = helpTooltip() 700 ButtonIcon(name='openInWindow', parent=self, iconSize=16, pos=(24, 0, 16, 16), texturePath='res:/UI/Texture/classes/DockPanel/floatButton.png', align=uiconst.CENTERRIGHT, func=floatCallback, hint=localization.GetByLabel('UI/Inflight/Scanner/OpenInWindow')) 701 ButtonIcon(name='closePanel', parent=self, pos=(4, 0, 16, 16), texturePath='res:/UI/Texture/classes/DockPanel/closeButton.png', align=uiconst.CENTERRIGHT, func=self.close) 702 703 def close(self): 704 super(ScannerPaletteHeader, self).Close() 705 self.closeCallback()