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

tacticalCameraController.py (6604B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\camera\tacticalCameraController.py
      2 import math
      3 from eve.client.script.ui.camera.cameraUtil import SetShipDirection, GetZoomDz, CheckInvertZoom, GetPanVectorForZoomToCursor
      4 from eve.client.script.ui.camera.baseCameraController import BaseCameraController
      5 from eve.client.script.ui.camera.cameraAchievementEventTracker import CameraAchievementEventTracker
      6 import evecamera
      7 import carbonui.const as uiconst
      8 from carbonui.uicore import uicore
      9 import evespacemouse
     10 from evespacemouse.controller import SpaceMouseController
     11 import evegraphics.settings as gfxsettings
     12 DIST_ORBIT_SWITCH = 20000
     13 
     14 class TacticalCameraController(BaseCameraController):
     15     cameraID = evecamera.CAM_TACTICAL
     16 
     17     def __init__(self, *args, **kwargs):
     18         super(TacticalCameraController, self).__init__(*args, **kwargs)
     19         self.cameraAchievementEventTracker = CameraAchievementEventTracker()
     20         self.spaceMouseController = None
     21 
     22     def Activate(self):
     23         actions = evespacemouse.ActionSet('tacticalCamera', 'Tooltips/Hud/TacticalCamera', [evespacemouse.Action('track', 'UI/Commands/CmdToggleCameraTracking'), evespacemouse.Action('lookAt', 'UI/Commands/CmdToggleLookAtItem'), evespacemouse.Action('CmdHideUI', 'UI/Commands/CmdHideUI')])
     24         evespacemouse.StartListening(actions, self._OnSpaceMousePosition, self._OnSpaceMouseAction)
     25         if evespacemouse.IsEnabled():
     26             self.spaceMouseController = SpaceMouseController(gfxsettings.Get(gfxsettings.UI_CAMERA_SPACEMOUSE_ACCELERATION_COEFFICIENT), gfxsettings.Get(gfxsettings.UI_CAMERA_SPACEMOUSE_SPEED_COEFFICIENT))
     27         sm.RegisterForNotifyEvent(self, 'OnSpaceMouseAccelerationCoefficientChanged')
     28         sm.RegisterForNotifyEvent(self, 'OnSpaceMouseSpeedCoefficientChanged')
     29 
     30     def Deactivate(self):
     31         evespacemouse.StopListening(self._OnSpaceMousePosition, self._OnSpaceMouseAction)
     32         self.spaceMouseController = None
     33         sm.UnregisterForNotifyEvent(self, 'OnSpaceMouseAccelerationCoefficientChanged')
     34         sm.UnregisterForNotifyEvent(self, 'OnSpaceMouseSpeedCoefficientChanged')
     35 
     36     def StopSpaceMouse(self):
     37         if self.spaceMouseController is not None:
     38             self.spaceMouseController.Stop()
     39 
     40     def OnMouseMove(self, *args):
     41         camera = self.GetCamera()
     42         if uicore.uilib.leftbtn and uicore.uilib.rightbtn:
     43             self.StopSpaceMouse()
     44             if camera.IsAttached() and math.fabs(uicore.uilib.dx) > 1:
     45                 camera.Orbit(0.01 * self.GetMouseDX(), 0.0)
     46             dz = CheckInvertZoom(uicore.uilib.dy)
     47             self._Zoom(dz, -0.005, zoomToCursor=False)
     48             self.RecordOrbitForAchievements()
     49         elif uicore.uilib.rightbtn:
     50             self.StopSpaceMouse()
     51             k = 3.0
     52             camera.Pan(-k * self.GetMouseDX(), k * self.GetMouseDY(), 0)
     53         elif uicore.uilib.leftbtn:
     54             self.StopSpaceMouse()
     55             k = evecamera.ORBIT_MOVE_DIST if camera.IsAttached() else 0.006
     56             camera.Orbit(k * self.GetMouseDX(), k * self.GetMouseDY())
     57             self.RecordOrbitForAchievements()
     58 
     59     def OnMouseWheel(self, *args):
     60         self.StopSpaceMouse()
     61         dz = GetZoomDz()
     62         k = 0.0005
     63         self._Zoom(dz, k, zoomToCursor=True)
     64 
     65     def _OnSpaceMousePosition(self, dt, translation, rotation):
     66         if self.spaceMouseController:
     67             translation, rotation = self.spaceMouseController.CalculateTranslationAndRotation(dt, translation, rotation)
     68         camera = self.GetCamera()
     69         if any(rotation):
     70             camera.OrbitImmediate(rotation[1], rotation[0])
     71         if any(translation):
     72             if camera.IsAttached() or camera.IsTracking():
     73                 camera.Zoom(translation[2] * 0.01 * dt)
     74             else:
     75                 camera.PanImmediate(*translation)
     76 
     77     def _GetActionItemID(self):
     78         _, pickobject = self.GetPick()
     79         if pickobject and hasattr(pickobject, 'translationCurve') and hasattr(pickobject.translationCurve, 'id'):
     80             return pickobject.translationCurve.id
     81 
     82     def _OnSpaceMouseAction(self, name):
     83         camera = self.GetCamera()
     84         if name == 'track':
     85             itemID = self._GetActionItemID()
     86             if itemID:
     87                 camera.Track(itemID)
     88             elif camera.IsTracking() or camera.IsAttached():
     89                 camera.StopTracking()
     90                 camera.Detach()
     91             self.StopSpaceMouse()
     92             raise evespacemouse.StopPropagation()
     93         elif name == 'lookAt':
     94             itemID = self._GetActionItemID()
     95             if itemID:
     96                 camera.LookAt(itemID, smooth=True)
     97             elif camera.IsTracking() or camera.IsAttached():
     98                 camera.StopTracking()
     99                 camera.Detach()
    100             self.StopSpaceMouse()
    101             raise evespacemouse.StopPropagation()
    102 
    103     def OnDblClick(self, *args):
    104         if uicore.uilib.rightbtn or uicore.uilib.mouseTravel > 6:
    105             return
    106         SetShipDirection(self.GetCamera())
    107 
    108     def RecordZoomForAchievements(self, amount):
    109         self.cameraAchievementEventTracker.RecordZoomForAchievements(amount)
    110 
    111     def RecordOrbitForAchievements(self):
    112         camera = self.GetCamera()
    113         self.cameraAchievementEventTracker.RecordOrbitForAchievements(self, camera)
    114 
    115     def OnMouseUp(self, button, *args):
    116         super(TacticalCameraController, self).OnMouseUp(button, *args)
    117         self.cameraAchievementEventTracker.StopRecordingOrbitForAchievements()
    118 
    119     def _Zoom(self, dz, k, zoomToCursor):
    120         self.RecordZoomForAchievements(dz)
    121         camera = self.GetCamera()
    122         if uicore.uilib.Key(uiconst.VK_MENU):
    123             camera.FovZoom(k * dz)
    124         elif camera.IsAttached() or camera.IsTracking():
    125             camera.Zoom(k * dz)
    126         elif zoomToCursor:
    127             x, y, z = GetPanVectorForZoomToCursor(self.GetViewport(), camera.fov)
    128             k = 1.5 * dz
    129             camera.Pan(k * x, k * y, k * z)
    130         else:
    131             k = 20.0
    132             camera.Pan(0, 0, -k * dz)
    133 
    134     def OnSpaceMouseAccelerationCoefficientChanged(self):
    135         coefficient = gfxsettings.Get(gfxsettings.UI_CAMERA_SPACEMOUSE_ACCELERATION_COEFFICIENT, None)
    136         if coefficient is not None:
    137             self.spaceMouseController.SetAccelerationCoefficient(coefficient)
    138 
    139     def OnSpaceMouseSpeedCoefficientChanged(self):
    140         coefficient = gfxsettings.Get(gfxsettings.UI_CAMERA_SPACEMOUSE_SPEED_COEFFICIENT, None)
    141         if coefficient is not None:
    142             self.spaceMouseController.SetSpeedCoefficient(coefficient)