modularHangarCapitalCamera.py (7318B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\camera\modularHangarCapitalCamera.py 2 import math 3 import evecamera 4 import uthread 5 import logging 6 import blue 7 import geo2 8 import random as rnd 9 from eve.client.script.ui.camera.baseSpaceCamera import BaseSpaceCamera 10 from gametime import GetSecondsSinceSimTime, GetSimTime 11 import eve.client.script.ui.view.hangarBehaviours.modularHangarBehavioursConstants as hc 12 from carbonui.uicore import uicore 13 import evegraphics.settings as gfxsettings 14 from evetypes import GetGroupID 15 logger = logging.getLogger(__name__) 16 17 class ModularHangarCapitalCamera(BaseSpaceCamera): 18 cameraID = evecamera.CAM_MODULARHANGAR_CAPITAL 19 isBobbingCamera = False 20 name = 'ModularHangarCapitalCamera' 21 minFov = 0.3 22 maxFov = 1.0 23 24 def __init__(self): 25 BaseSpaceCamera.__init__(self) 26 self.model = None 27 self.atPosition = (0.0, 0.0, 0.0) 28 self.camStartPos = (0.0, 0.0, 0.0) 29 self.camStartPoi = (0.0, 0.0, 0.0) 30 self.poiTarget = (0.0, 0.0, 0.0) 31 self.camStartAngle = [0.0, 0.0] 32 self.typeID = 0 33 self.camSpeed = 1.0 34 self.fov = 1.0 35 self.isRotating = 0 36 self.kMinYaw = -100.0 37 self.kMaxYaw = 100 38 self.kMinPitch = -100.0 39 self.kMaxPitch = 100 40 self.maxFov = 2.0 41 self.yawTargetMapped = 0.0 42 self.pitchTargetMapped = 0.0 43 self.lerpingIntoPosition = False 44 self.firstShip = True 45 46 def SetCurrentShipSizeClass(self, sizeClass): 47 pass 48 49 def SetRotating(self, isTrue): 50 self.isRotating = isTrue 51 52 def SetFlightValueMap(self, exit1, hallway1, hallway2, exit2, dockPos): 53 pass 54 55 def ClearRefs(self): 56 self.model = None 57 58 def SetShip(self, model, typeID): 59 self.lerpingIntoPosition = True 60 uicore.animations.StopAllAnimations(self) 61 self.model = model 62 self.typeID = typeID 63 self._configureCameraStartLocations(typeID) 64 if not self.orbitUpdateThread: 65 self.orbitUpdateThread = uthread.new(self.CapitalOrbitUpdateThread) 66 67 def _configureCameraStartLocations(self, typeID, wasOrbiting = False): 68 pos = hc.CAPITAL_CAMERA_DEFAULT_START_POSITION 69 startSettings = (pos, pos, 1.0) 70 groupID = GetGroupID(typeID) 71 if groupID in hc.CAPITAL_CAMERA_POSITION_MAP: 72 settingsVector = hc.CAPITAL_CAMERA_POSITION_MAP[groupID] 73 if not wasOrbiting: 74 startSettings = rnd.choice(settingsVector) 75 else: 76 normalizedPointVectors = [] 77 modelPos = self.model.modelWorldPosition 78 for each in settingsVector: 79 normalizedPointVectors.append(geo2.Vec3Normalize((each[0][0] - modelPos[0], each[0][1] - modelPos[1], 0.0))) 80 81 closestDist = 10 82 mouseTargetMapNormalized = geo2.Vec3Normalize((self.yawTargetMapped, self.pitchTargetMapped, 0.0)) 83 startSettingIndex = 0 84 for i, each in enumerate(normalizedPointVectors): 85 dist = geo2.Vec3DistanceSq(mouseTargetMapNormalized, each) 86 if dist < closestDist: 87 closestDist = dist 88 startSettingIndex = i 89 90 startSettings = settingsVector[startSettingIndex] 91 pos = startSettings[0] 92 poi = startSettings[1] 93 self.SetFovTarget(startSettings[2]) 94 self.kFovSpeed = 1.5 95 self.camStartPoi = poi 96 self.poiTarget = poi 97 self.camStartPos = pos 98 self.orbitTarget = pos 99 100 def PlaceShip(self, pos): 101 pass 102 103 def AnimEnterHangar(self, model, startPos, endPos, duration = 5.0): 104 self.CalculateOrbitTarget() 105 self.SetEyePosition(self.orbitTarget) 106 107 def Orbit(self, dx = 0, dy = 0): 108 self.lerpingIntoPosition = False 109 if gfxsettings.Get(gfxsettings.UI_CAMERA_INVERT_Y): 110 dy *= -1 111 self.yawTargetMapped = max(min(self.yawTargetMapped - dx, 0.5), -1.0) 112 self.pitchTargetMapped = max(min(self.pitchTargetMapped + dy / 2.0, 1.0), -0.5) 113 self.orbitTarget = self.CalculateOrbitTarget() 114 self.poiTarget = self.model.modelWorldPosition 115 self.camSpeed = 1.0 116 self.kFovSpeed = 5.0 117 self.SetFovTarget(1.0) 118 if not self.orbitUpdateThread: 119 self.orbitUpdateThread = uthread.new(self.CapitalOrbitUpdateThread) 120 121 def ResetRotate(self): 122 if self.orbitUpdateThread: 123 self._configureCameraStartLocations(self.typeID, wasOrbiting=True) 124 self.lerpingIntoPosition = True 125 self.yawTargetMapped = 0 126 self.pitchTargetMapped = 0 127 self.camSpeed = 0.1 128 129 def CalculateOrbitTarget(self): 130 boundingSphereSize = self.model.GetBoundingSphereRadius() or 5000.0 131 offset = geo2.Vec3Add((0.0, 0.0, 1.4 * boundingSphereSize), (0.0, 0.0, 500.0)) 132 quaternionRotation = geo2.QuaternionRotationArc((0.0, 0.0, 1.0), geo2.Vec3Normalize((0.38 * self.yawTargetMapped, 0.26 * self.pitchTargetMapped, 1.0))) 133 finalPos = geo2.QuaternionTransformVector(quaternionRotation, offset) 134 camVector = geo2.Vec3Add(self.model.modelWorldPosition, finalPos) 135 return camVector 136 137 def CapitalOrbitUpdateThread(self): 138 try: 139 while True: 140 if self.orbitTarget is None: 141 break 142 lerpSpeed = 0.01 if self.lerpingIntoPosition else 0.1 143 self.SetEyePosition(geo2.Vec3Lerp(self._eyePosition, self.orbitTarget, lerpSpeed)) 144 if not self.lerpingIntoPosition: 145 self.poiTarget = self.model.modelWorldPosition 146 self.atPosition = geo2.Vec3Lerp(self.atPosition, self.poiTarget, lerpSpeed) 147 dist1 = geo2.Vec3DistanceSqD(self.atPosition, self.poiTarget) 148 dist2 = geo2.Vec3DistanceSqD(self._eyePosition, self.orbitTarget) 149 if dist1 < 5.0 and dist2 < 5.0: 150 break 151 blue.synchro.Yield() 152 153 finally: 154 self.orbitUpdateThread = None 155 156 def OnDeactivated(self): 157 BaseSpaceCamera.OnDeactivated(self) 158 self.model = None 159 160 def Update(self): 161 BaseSpaceCamera.Update(self) 162 163 def SkipLerp(self): 164 self.atPosition = self.poiTarget 165 self.SetEyePosition(self.orbitTarget) 166 167 def GetIsChangingShip(self): 168 return False 169 170 def SetMinMaxZoomDefaults(self, minZoom, maxZoom): 171 pass 172 173 def SetHangarAnimationParameters(self, yaw, pitch, zoom, fov): 174 pass 175 176 def Zoom(self, dz): 177 pass 178 179 def SetZoomTarget(self, proportion): 180 pass 181 182 def _AnimEnterHangarFOV(self, duration): 183 pass 184 185 def _AnimEnterHangarZoom(self, duration, model): 186 pass 187 188 def _AnimSwitchShipsZoom(self, duration, model): 189 pass 190 191 def _AnimZoom(self, duration, zoom0, zoom1): 192 pass 193 194 def UpdateMinMaxZoom(self): 195 pass 196 197 def SetZoom(self, proportion): 198 pass 199 200 def EnforceMaxZoom(self): 201 pass 202 203 def _AnimEnterHangarYaw(self, duration): 204 pass 205 206 def _AnimEnterHangarPitch(self, duration): 207 pass 208 209 def AnimSwitchShips(self, model, startPos, endPos, duration = 5.0): 210 pass