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

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