jumpCamera.py (2977B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\camera\jumpCamera.py 2 import blue 3 from eve.client.script.ui.camera.baseSpaceCamera import BaseSpaceCamera 4 from eve.client.script.ui.camera.cameraUtil import IsValidSpaceCameraPosition 5 import evecamera 6 import geo2 7 import logging 8 logger = logging.getLogger(__name__) 9 10 class JumpCamera(BaseSpaceCamera): 11 name = 'JumpCamera' 12 cameraID = evecamera.CAM_JUMP 13 default_fov = 1.0 14 15 def __init__(self): 16 BaseSpaceCamera.__init__(self) 17 self.bp = None 18 self.oldCameraZoom = 0 19 self.egoPos = None 20 21 def OnActivated(self, lastCamera = None, itemID = None, **kwargs): 22 BaseSpaceCamera.OnActivated(self, **kwargs) 23 self.bp = sm.GetService('michelle').GetBallpark() 24 if lastCamera and lastCamera.cameraID in evecamera.INSPACE_CAMERAS: 25 lastAtPos = lastCamera.atPosition 26 if lastCamera.cameraID == evecamera.CAM_TACTICAL: 27 lastAtPos = lastCamera.GetAtPositionClosestToShip() 28 if not self.SetEyeAndAtPosition(lastCamera.eyePosition, lastAtPos): 29 logger.warning('JumpCamera: Previous camera has invalid positions, keeping current ones. %s', lastCamera) 30 self.oldCameraZoom = super(JumpCamera, self).GetZoom() 31 self.fov = lastCamera.fov 32 self.SetFovTarget(self.default_fov) 33 self.egoPos = self.bp.GetCurrentEgoPos() if self.bp else None 34 35 def SetEyeAndAtPosition(self, eyePos, atPos): 36 if eyePos == atPos or not IsValidSpaceCameraPosition(eyePos) or not IsValidSpaceCameraPosition(atPos): 37 return False 38 self._atPosition = atPos 39 self.eyePosition = eyePos 40 return True 41 42 def GetZoom(self): 43 return self.oldCameraZoom 44 45 @property 46 def transitionDelay(self): 47 if sm.GetService('subway').Enabled(): 48 return 0.7 / blue.os.simDilation 49 else: 50 return 0.1 51 52 def GetItemID(self): 53 return self.ego 54 55 def IsLocked(self): 56 return True 57 58 def Track(self, itemID, **kwargs): 59 pass 60 61 def LookAt(self, itemID, radius = None, **kwargs): 62 if kwargs.get('force', False): 63 super(BaseSpaceCamera, self).LookAt(itemID, radius, **kwargs) 64 65 def OnBallRemoved(self, ball): 66 if ball.id == self.ego: 67 self.bp = None 68 69 def Update(self): 70 BaseSpaceCamera.Update(self) 71 if not self.bp: 72 return 73 newPos = self.bp.GetCurrentEgoPos() 74 if self.egoPos is None: 75 self.egoPos = newPos 76 return 77 diff = geo2.Vec3SubtractD(newPos, self.egoPos) 78 self.egoPos = newPos 79 atPos = geo2.Vec3SubtractD(self._atPosition, diff) 80 eyePos = geo2.Vec3SubtractD(self._eyePosition, diff) 81 if not self.SetEyeAndAtPosition(eyePos, atPos): 82 logger.warning('JumpCamera: Ignoring ego position jump of %r, %s', diff, self)