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

beacon_ui_container.py (3046B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\analysisbeacon\client\beacon_ui_container.py
      2 import math
      3 import weakref
      4 import eveui
      5 import geo2
      6 import trinity
      7 import uthread2
      8 from analysisbeacon.client.const import SCALING_BILLBOARD_THRESHOLD
      9 from carbonui import uiconst
     10 from carbonui.primitives.transform import Transform
     11 from carbonui.ui3d import InSceneContainer
     12 from carbonui.uicore import uicore
     13 
     14 class BeaconUiContainer(InSceneContainer):
     15 
     16     def __init__(self, ball, scene, camera):
     17         self._scale = 10000
     18         self._scene_ref = weakref.ref(scene)
     19         self.run_camera_update_loop = True
     20         self._camera = camera
     21         self.transform = trinity.EveRootTransform()
     22         self.transform.translationCurve = ball
     23         scene.uiObjects.append(self.transform)
     24         self.is_showing = True
     25         super(BeaconUiContainer, self).__init__(name='CrabTimerRing', state=uiconst.UI_DISABLED, scene=scene, sceneParent=scene.uiObjects, parentTransform=self.transform, trackType=self.TRACKTYPE_TRANSFORM, width=500, height=500, clearBackground=True, backgroundColor=(0.0, 0.0, 0.0, 0.0), renderJob=uicore.uilib.GetRenderJob(), isFullscreen=False)
     26         self.transform.scaling = (self._scale, self._scale, self._scale)
     27         self.transform.translation = (0.0, 0.0, 0.0)
     28         self.transform.rotation = geo2.QuaternionRotationSetYawPitchRoll(0, -math.pi / 2.0, 0)
     29         self.mainCont = Transform(parent=self, name='mainCont', scalingCenter=(0.5, 0.5), align=uiconst.TOALL)
     30         uthread2.start_tasklet(self._camera_update_loop)
     31 
     32     def _update_loop(self):
     33         counter = 0.0
     34         while not self.destroyed:
     35             eveui.wait_for_next_frame()
     36             self.transform.translation = (0.0, 100 * math.sin(counter), 0.0)
     37             counter += 0.01
     38 
     39     def _camera_update_loop(self):
     40         while self.run_camera_update_loop:
     41             distance = self._camera.distance_from_transform(self.transform)
     42             if distance > SCALING_BILLBOARD_THRESHOLD and self.is_showing:
     43                 uicore.animations.Tr2DScaleOut(self.mainCont, startScale=(1.0, 1.0), endScale=(0.0, 0.0), duration=0.25, sleep=True)
     44                 self.mainCont.Hide()
     45                 self.is_showing = False
     46             elif distance < SCALING_BILLBOARD_THRESHOLD and not self.is_showing:
     47                 self.mainCont.Show()
     48                 uicore.animations.Tr2DScaleIn(self.mainCont, duration=0.25, sleep=True)
     49                 self.is_showing = True
     50             eveui.wait_for_next_frame()
     51 
     52     @property
     53     def scale(self):
     54         return float(self._scale)
     55 
     56     @scale.setter
     57     def scale(self, scale):
     58         self._scale = scale
     59 
     60     def remove_from_space(self):
     61         self.run_camera_update_loop = False
     62         scene = self._scene_ref()
     63         if scene is not None:
     64             scene.uiObjects.fremove(self.transform)
     65         self.Close()
     66 
     67     def __del__(self):
     68         scene = self._scene_ref()
     69         if scene is not None:
     70             scene.uiObjects.fremove(self.transform)