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)