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)