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

targetTrackingState.py (3287B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\deathzone\targetTrackingState.py
      2 from uthread import SEC
      3 
      4 class TargetTrackingState(object):
      5 
      6     def __init__(self, trackedSinceTimestamp, damageTickPeriod, safetyDuration, peakHullDamageFractionPerTick, hullDamageFractionIncreasePerTick):
      7         if trackedSinceTimestamp is None:
      8             raise ValueError('trackedSinceTimestamp cannot be None')
      9         if damageTickPeriod is None or damageTickPeriod <= 0:
     10             raise ValueError('damageTickPeriod must be positive number')
     11         if safetyDuration is None or safetyDuration <= 0:
     12             raise ValueError('safetyDuration must be positive number')
     13         if peakHullDamageFractionPerTick is None or peakHullDamageFractionPerTick <= 0:
     14             raise ValueError('peakHullDamageFractionPerTick must be positive number')
     15         if hullDamageFractionIncreasePerTick is None or hullDamageFractionIncreasePerTick <= 0:
     16             raise ValueError('hullDamageFractionIncreasePerTick must be positive number')
     17         self._trackedSinceTimestamp = trackedSinceTimestamp
     18         self._damageTickPeriod = damageTickPeriod
     19         self._safetyDuration = safetyDuration
     20         self._peakHullDamageFractionPerTick = peakHullDamageFractionPerTick
     21         self._hullDamageFractionIncreasePerTick = hullDamageFractionIncreasePerTick
     22 
     23     def __repr__(self):
     24         return 'TargetTrackingState(trackedSinceTimestamp=%r, safetyDuration=%r)' % (self._trackedSinceTimestamp, self._safetyDuration)
     25 
     26     def __eq__(self, other):
     27         if isinstance(other, TargetTrackingState):
     28             return self._trackedSinceTimestamp == other._trackedSinceTimestamp and self._damageTickPeriod == other._damageTickPeriod and self._safetyDuration == other._safetyDuration and self._peakHullDamageFractionPerTick == other._peakHullDamageFractionPerTick and self._hullDamageFractionIncreasePerTick == other._hullDamageFractionIncreasePerTick
     29         return False
     30 
     31     def __ne__(self, other):
     32         return not self.__eq__(other)
     33 
     34     @property
     35     def trackedSinceTimestamp(self):
     36         return self._trackedSinceTimestamp
     37 
     38     @property
     39     def damageTickPeriod(self):
     40         return self._damageTickPeriod
     41 
     42     @property
     43     def safetyDuration(self):
     44         return self._safetyDuration
     45 
     46     @property
     47     def peakHullDamageFractionPerTick(self):
     48         return self._peakHullDamageFractionPerTick
     49 
     50     @property
     51     def hullDamageFractionIncreasePerTick(self):
     52         return self._hullDamageFractionIncreasePerTick
     53 
     54     def IsDamageActive(self, timestamp):
     55         return timestamp > self._trackedSinceTimestamp + self._safetyDuration * SEC
     56 
     57     def GetSafetyTimeRemaining(self, timestamp):
     58         return max(0, (self._trackedSinceTimestamp - timestamp) / SEC + self._safetyDuration)
     59 
     60     def GetHullDamageFractionPerTick(self, timestamp):
     61         if not self.IsDamageActive(timestamp):
     62             return 0.0
     63         timeSinceDamageStart = timestamp - (self._trackedSinceTimestamp + self._safetyDuration * SEC)
     64         ticksSinceDamageStart = timeSinceDamageStart / (self._damageTickPeriod * SEC)
     65         tickDamage = ticksSinceDamageStart * self._hullDamageFractionIncreasePerTick
     66         return min(tickDamage, self._peakHullDamageFractionPerTick)