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

space_container.py (3822B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\dynamicresources\client\ess\bracket\space_container.py
      2 import math
      3 import eveui
      4 import geo2
      5 import mathext
      6 import threadutils
      7 from carbon.common.script.sys.serviceManager import ServiceManager
      8 from carbonui import uiconst
      9 from carbonui.primitives.container import Container
     10 from carbonui.ui3d import InSceneContainer
     11 from carbonui.uicore import uicore
     12 
     13 class EssSpaceContainer(InSceneContainer):
     14     __next_container_id = 0
     15 
     16     def __init__(self, transform, width, height, scene_manager = None, offset_y = 0.0, scale = 1.0):
     17         self._offset_y = float(offset_y)
     18         self._real_opacity = 1.0
     19         self._scale = float(scale)
     20         self._content = None
     21         self._scene_manager = scene_manager
     22         if self._scene_manager is None:
     23             self._scene_manager = ServiceManager.Instance().GetService('sceneManager')
     24         scene = self._scene_manager.GetRegisteredScene('default')
     25         super(EssSpaceContainer, self).__init__(name='EssSpaceContainer_{}'.format(self._get_next_id()), state=uiconst.UI_DISABLED, scene=scene, sceneParent=scene.uiObjects, trackType=self.TRACKTYPE_TRANSFORM, parentTransform=transform, width=width, height=height, clearBackground=True, backgroundColor=(0.0, 0.0, 0.0, 0.0), renderJob=uicore.uilib.GetRenderJob(), isFullscreen=False)
     26         self._opacity_wrapper = Container(parent=self, align=uiconst.TOALL, opacity=self._real_opacity)
     27         self._content = Container(parent=self._opacity_wrapper, align=uiconst.TOALL)
     28         self.transform.scaling = (self._scale, self._scale, self._scale)
     29         self.transform.translation = (0.0, self.offset_y, 0.0)
     30         self.transform.rotation = geo2.QuaternionRotationSetYawPitchRoll(0, -math.pi / 2.0, 0)
     31         self._start_update_loop()
     32 
     33     @property
     34     def content(self):
     35         return self._content
     36 
     37     @property
     38     def offset_y(self):
     39         return float(self._offset_y)
     40 
     41     @offset_y.setter
     42     def offset_y(self, offset_y):
     43         self._offset_y = offset_y
     44 
     45     @property
     46     def opacity(self):
     47         return self._real_opacity
     48 
     49     @opacity.setter
     50     def opacity(self, opacity):
     51         self._real_opacity = opacity
     52         if hasattr(self, '_opacity_wrapper'):
     53             self._opacity_wrapper.opacity = opacity
     54 
     55     @property
     56     def scale(self):
     57         return float(self._scale)
     58 
     59     @scale.setter
     60     def scale(self, scale):
     61         self._scale = scale
     62 
     63     def get_camera(self):
     64         return self._scene_manager.GetActiveCamera()
     65 
     66     @threadutils.threaded
     67     def _start_update_loop(self):
     68         while not self.destroyed:
     69             eveui.wait_for_next_frame()
     70             self.transform.scaling = (self._scale, self._scale, self._scale)
     71             self.transform.translation = (0.0, self.offset_y, 0.0)
     72             eye_position = self.get_camera().GetEyePosition()
     73             _, _, ess_position = geo2.MatrixDecompose(self.transform.worldTransform)
     74             eye_to_ess = geo2.Vec3Subtract(ess_position, eye_position)
     75             projected = (eye_to_ess[0], 0, eye_to_ess[2])
     76             dot = geo2.Vec3Dot(geo2.Vec3Normalize(eye_to_ess), geo2.Vec3Normalize(projected))
     77             angle = math.degrees(math.acos(mathext.clamp(dot, 0.0, 1.0)))
     78             opacity = mathext.lerp(0.0, 1.0, min(abs(max(angle - 1.0, 0.0)) / 3.0, 1.0))
     79             self.content.opacity = opacity
     80 
     81     @staticmethod
     82     def _get_next_id():
     83         container_id = EssSpaceContainer.__next_container_id
     84         EssSpaceContainer.__next_container_id += 1
     85         return container_id
     86 
     87     def Close(self):
     88         if self.parentTransform:
     89             self.parentTransform.children.fremove(self.transform)
     90         super(EssSpaceContainer, self).Close()
     91 
     92 
     93 from dynamicresources.client.ess.bracket.debug import __reload_update__