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

deathzoneUIController.py (5907B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\services\deathzone\deathzoneUIController.py
      2 import gametime
      3 import uthread2
      4 from eve.client.script.ui.services.deathzone.deathzoneUIConst import DEATHZONE_VIGNETTE_PARAMS, _LocalUIState
      5 from eve.common.script.mgt.buffBarConst import REMOVE_GENERIC_BUFFBAR_BUTTON_SIGNAL, ADD_GENERIC_BUFFBAR_BUTTON_SIGNAL, Slot_DeathZoneGracePeriod, Slot_DeathZoneProtected, Slot_DeathZoneDamage
      6 from eve.client.script.parklife.sceneManagerConsts import SYSTEM_WIDE_CLOUD_NAME
      7 from uthread2 import sleep_sim, StartTasklet
      8 
      9 class DeathZoneUIController(object):
     10     VIGNETTE_MIN_INTENSITY = 1.25
     11     VIGNETTE_MAX_INTENSITY = 2.35
     12     VIGNETTE_MIN_OPACITY = 1.0
     13     VIGNETTE_MAX_OPACITY = 1.0
     14 
     15     def __init__(self, heroNotification, sceneManager):
     16         self.trackingData = None
     17         self.damageTrackerTasklet = None
     18         self.vignetteIntentisy = 0.0
     19         self.opacityIntensity = 0.0
     20         self.heroNotification = heroNotification
     21         self.sceneManager = sceneManager
     22         self.controllerTaskletRunning = False
     23         self.controllerTasklet = None
     24         self.systemWideCloud = None
     25         self.commandQueue = uthread2.queue_channel()
     26 
     27     def EnterSafeZoneState(self):
     28         self.EnsureCommandTaskletIsRunning()
     29         self.commandQueue.send(self._EnterSafeZoneStateCommand)
     30         self._HandleDynamicInfiniteCloud(False)
     31 
     32     def EnterDeathZoneState(self, trackingData):
     33         self.EnsureCommandTaskletIsRunning()
     34         self.commandQueue.send(self._CreateSetTrackingDataCommand(trackingData))
     35         self._HandleDynamicInfiniteCloud(True)
     36 
     37     def _HandleDynamicInfiniteCloud(self, isInDeathZone):
     38         if self.systemWideCloud is None:
     39             if hasattr(cfg.mapSolarSystemContentCache[session.solarsystemid], 'systemWideCloud'):
     40                 scene = self.sceneManager.GetActiveScene()
     41                 if scene:
     42                     self.systemWideCloud = scene.objects.FindByName(SYSTEM_WIDE_CLOUD_NAME)
     43         if self.systemWideCloud is not None:
     44             self.systemWideCloud.SetControllerVariable('isActive', float(isInDeathZone))
     45 
     46     def Remove(self):
     47         if self.controllerTasklet is None:
     48             return
     49         self.commandQueue.send(self._RemoveCommand)
     50 
     51     def EnsureCommandTaskletIsRunning(self):
     52         if self.controllerTasklet is None:
     53             self.controllerTaskletRunning = True
     54             self.controllerTasklet = StartTasklet(self.UICommandReceiver)
     55 
     56     def _RemoveCommand(self):
     57         self.trackingData = None
     58         self.controllerTaskletRunning = False
     59         self.controllerTasklet = None
     60         self.systemWideCloud = None
     61         self._FadeVignetteIntensityAndOpacity(intensity=0, opacity=0)
     62         self._EnsureBuffBarState(_LocalUIState.UNSPECIFIED)
     63 
     64     def _EnterSafeZoneStateCommand(self):
     65         if self.trackingData:
     66             self.trackingData = None
     67         self._FadeVignetteIntensityAndOpacity(intensity=0, opacity=0)
     68         self._EnsureBuffBarState(_LocalUIState.SAFE_ZONE)
     69 
     70     def _CreateSetTrackingDataCommand(self, trackingData):
     71 
     72         def fun():
     73             self.trackingData = trackingData
     74 
     75         return fun
     76 
     77     def UICommandReceiver(self):
     78         while self.controllerTaskletRunning:
     79             if self.trackingData is None:
     80                 self.commandQueue.receive()()
     81             elif len(self.commandQueue) > 0:
     82                 self.commandQueue.receive()()
     83             if self.trackingData:
     84                 now = gametime.GetSimTime()
     85                 if self.trackingData.IsDamageActive(now):
     86                     self._EnsureBuffBarState(_LocalUIState.DEATH_ZONE)
     87                     hullDamageFraction = self.trackingData.GetHullDamageFractionPerTick(now)
     88                     vignetteIntensity = max(self.VIGNETTE_MIN_INTENSITY, min(1.0, hullDamageFraction / self.VIGNETTE_MAX_INTENSITY))
     89                     self._FadeVignetteIntensityAndOpacity(intensity=self.VIGNETTE_MAX_INTENSITY, opacity=self.VIGNETTE_MAX_OPACITY)
     90                 else:
     91                     self._FadeVignetteIntensityAndOpacity(intensity=self.VIGNETTE_MIN_INTENSITY, opacity=self.VIGNETTE_MIN_OPACITY)
     92                     self._EnsureBuffBarState(_LocalUIState.DEATH_ZONE_GRACE_PERIOD)
     93                 sleep_sim(self.trackingData.damageTickPeriod)
     94 
     95     def _FadeVignetteIntensityAndOpacity(self, intensity, opacity, duration = 1, color = (1.0, 0.0, 0.0, 1.0)):
     96         self.sceneManager.FadeVignetteToIntensityAndOpacity(duration, DEATHZONE_VIGNETTE_PARAMS, color=color, fromIntensity=self.vignetteIntentisy, toIntensity=intensity, fromOpacity=self.opacityIntensity, toOpacity=opacity)
     97         self.vignetteIntentisy = intensity
     98         self.opacityIntensity = opacity
     99 
    100     def _EnsureBuffBarState(self, localUIState):
    101         if localUIState == _LocalUIState.DEATH_ZONE:
    102             REMOVE_GENERIC_BUFFBAR_BUTTON_SIGNAL(Slot_DeathZoneGracePeriod)
    103             REMOVE_GENERIC_BUFFBAR_BUTTON_SIGNAL(Slot_DeathZoneProtected)
    104             ADD_GENERIC_BUFFBAR_BUTTON_SIGNAL(Slot_DeathZoneDamage)
    105         elif localUIState == _LocalUIState.DEATH_ZONE_GRACE_PERIOD:
    106             REMOVE_GENERIC_BUFFBAR_BUTTON_SIGNAL(Slot_DeathZoneProtected)
    107             REMOVE_GENERIC_BUFFBAR_BUTTON_SIGNAL(Slot_DeathZoneDamage)
    108             ADD_GENERIC_BUFFBAR_BUTTON_SIGNAL(Slot_DeathZoneGracePeriod)
    109         elif localUIState == _LocalUIState.SAFE_ZONE:
    110             REMOVE_GENERIC_BUFFBAR_BUTTON_SIGNAL(Slot_DeathZoneDamage)
    111             REMOVE_GENERIC_BUFFBAR_BUTTON_SIGNAL(Slot_DeathZoneGracePeriod)
    112             ADD_GENERIC_BUFFBAR_BUTTON_SIGNAL(Slot_DeathZoneProtected)
    113         elif localUIState == _LocalUIState.UNSPECIFIED:
    114             REMOVE_GENERIC_BUFFBAR_BUTTON_SIGNAL(Slot_DeathZoneDamage)
    115             REMOVE_GENERIC_BUFFBAR_BUTTON_SIGNAL(Slot_DeathZoneGracePeriod)
    116             REMOVE_GENERIC_BUFFBAR_BUTTON_SIGNAL(Slot_DeathZoneProtected)