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

camera.py (1493B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\dynamicresources\client\ess\bracket\camera.py
      2 import geo2
      3 
      4 class CameraReference(object):
      5 
      6     def get_camera(self):
      7         raise NotImplementedError()
      8 
      9     @property
     10     def is_valid(self):
     11         return self.get_camera() is not None
     12 
     13     @property
     14     def world_position(self):
     15         if not self.is_valid:
     16             return (0, 0, 0)
     17         return self.get_camera().GetEyePosition()
     18 
     19     @property
     20     def up(self):
     21         if not self.is_valid:
     22             return (0, 1.0, 0)
     23         return geo2.Vec3Normalize(self.get_camera().GetYAxis())
     24 
     25     @property
     26     def forward(self):
     27         if not self.is_valid:
     28             return (0, 0, 1.0)
     29         return self.get_camera().GetLookAtDirection()
     30 
     31     @property
     32     def left(self):
     33         return geo2.Vec3Cross(self.up, geo2.Vec3Scale(self.forward, -1.0))
     34 
     35     @property
     36     def right(self):
     37         return geo2.Vec3Cross(self.up, self.forward)
     38 
     39     def distance_from(self, position):
     40         return geo2.Vec3Length(geo2.Vec3Subtract(position, self.world_position))
     41 
     42     def distance_from_transform(self, transform):
     43         _, _, position = geo2.MatrixDecompose(transform.worldTransform)
     44         return self.distance_from(position)
     45 
     46 
     47 class InFlightCameraReference(CameraReference):
     48 
     49     def __init__(self, scene_manager):
     50         self._scene_manager = scene_manager
     51 
     52     def get_camera(self):
     53         return self._scene_manager.GetActiveSpaceCamera()