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

liveIconRenderer.py (4475B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\cosmetics\client\liveIconRenderer.py
      2 from __future__ import absolute_import
      3 import logging
      4 from carbonui import Align, SpriteEffect, PickState
      5 from cosmetics.client.liveIconRendererQueue import LiveIconRenderQueue
      6 from carbonui.primitives.container import Container
      7 from carbonui.primitives.sprite import RenderTargetSprite, Sprite
      8 import trinity
      9 from signals import Signal
     10 from .liveIconCacheUtils import cached_render_available, get_unique_filename, is_low_spec
     11 log = logging.getLogger(__name__)
     12 
     13 class LiveIconSprite(Container):
     14     __guid__ = 'form.LiveIconSprite'
     15     default_glow = True
     16     default_mask_texture_path = 'res:/UI/Texture/classes/Cosmetics/Ship/cards/skin_design/mask.png'
     17 
     18     def ApplyAttributes(self, attributes):
     19         super(LiveIconSprite, self).ApplyAttributes(attributes)
     20         self._viewport_width = attributes.viewportWidth
     21         self._viewport_height = attributes.viewportHeight
     22         self.bg_texture_path = attributes.bg_texture_path
     23         self._glow = attributes.get('glow', self.default_glow)
     24         mask_texture_path = attributes.get('mask_texture_path', self.default_mask_texture_path)
     25         self.queued_function_call = None
     26         self.on_rendered = Signal('on_rendered')
     27         self.last_skin_design = None
     28         self.space_object = None
     29         self.sprite = Sprite(name='LiveIconSprite_Cached', parent=self, align=Align.CENTER, width=self._viewport_width, height=self._viewport_height, spriteEffect=trinity.TR2_SFX_MASK, texturePath=None, textureSecondaryPath=mask_texture_path)
     30 
     31     def _construct_fallback_sprite(self):
     32         self.sprite = Sprite(name='LiveIconSprite_Backup', parent=self, align=Align.CENTER, width=32, height=32, texturePath='res:/UI/Texture/WindowIcons/paint_tool.png')
     33 
     34     def apply_skin_design(self, skin_design, bg_texture_path = None, skip_queue = False):
     35         if bg_texture_path:
     36             self.bg_texture_path = bg_texture_path
     37         log.info('LIVE ICONS - Apply SKIN design {name}, skip_queue={skip_queue}'.format(name=skin_design.name.encode('utf-8'), skip_queue=skip_queue))
     38         if cached_render_available(skin_design, self.bg_texture_path):
     39             skip_queue = True
     40         self.queued_function_call = lambda : self._apply_skin_design(skin_design, self.bg_texture_path)
     41         if skip_queue:
     42             self.queued_function_call()
     43         else:
     44             LiveIconRenderQueue.get_instance().add_to_queue(self.queued_function_call)
     45 
     46     def Close(self):
     47         self.space_object = None
     48         try:
     49             if self.queued_function_call:
     50                 LiveIconRenderQueue.get_instance().remove_from_queue(self.queued_function_call)
     51         finally:
     52             super(LiveIconSprite, self).Close()
     53 
     54     def _apply_skin_design(self, skin_design, bg_texture_path):
     55         self.bg_texture_path = bg_texture_path
     56         design_name = skin_design.name.encode('utf-8')
     57         icon_generator = LiveIconRenderQueue.get_instance().get_icon_generator(self._viewport_width, self._viewport_height, skin_design, bg_texture_path)
     58         if cached_render_available(skin_design, bg_texture_path):
     59             texturePath = get_unique_filename(skin_design, bg_texture_path)
     60             self.sprite.LoadTexture(texturePath)
     61             self.on_rendered()
     62             return
     63         icon_generator.construct_render_job()
     64         icon_generator.set_skin_design(skin_design)
     65         log.info('LIVE ICONS - Rendering SKIN design {name}: icon generator created'.format(name=design_name))
     66         log.info('LIVE ICONS - Rendering SKIN design {name}: started'.format(name=design_name))
     67         self.queued_function_call = None
     68         if not self.IsVisible():
     69             return
     70         if self.last_skin_design != skin_design or not self.space_object:
     71             log.info('LIVE ICONS - Rendering SKIN design {name}: DNA update required'.format(name=design_name))
     72             log.info('LIVE ICONS - Rendering SKIN design {name}: DNA update done'.format(name=design_name))
     73         self.last_skin_design = skin_design
     74         cachedTexturePath = icon_generator.render_icon(skin_design, bg_texture_path, self._glow)
     75         self.sprite.texturePath = cachedTexturePath
     76         log.info('LIVE ICONS - Rendering SKIN design {name}: icon rendering done'.format(name=design_name))
     77         self.on_rendered()
     78         log.info('LIVE ICONS - Rendering SKIN design {name}: finished'.format(name=design_name))