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__