schedulingController.py (3426B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\moonmining\schedulingController.py 2 import gametime 3 from carbon.common.lib.const import SEC, MIN, HOUR 4 from carbon.common.script.util.mathCommon import FloatCloseEnough 5 from eve.client.script.ui.moonmining import GetRangeTimeForSlider 6 from moonmining.const import MAXIMUM_EXTRACTION_DURATION, MINIMUM_EXTRACTION_DURATION 7 from signals import Signal 8 import mathext 9 10 class SchedulingController(object): 11 12 def __init__(self, fuelExpiryTime): 13 self.fuelExpiryTime = fuelExpiryTime 14 self.startTime, maxValidTime = GetRangeTimeForSlider() 15 self.maxValidTime = long(maxValidTime / HOUR) * HOUR 16 self.currentTime = self.startTime 17 self.validTimeRange = self.maxValidTime - self.startTime 18 self.fullRange = MAXIMUM_EXTRACTION_DURATION * SEC 19 self.maxValidPercentage = self.validTimeRange / float(self.fullRange) 20 self.on_hours_changed = Signal(signalName='on_hours_changed') 21 self.on_fuel_changed = Signal(signalName='on_fuel_changed') 22 23 @property 24 def minValidTime(self): 25 now = gametime.GetWallclockTime() 26 return now + MINIMUM_EXTRACTION_DURATION * SEC + 2 * MIN 27 28 def GetSliderStartTime(self): 29 return self.startTime 30 31 def GetMinValidTime(self): 32 return self.minValidTime 33 34 def GetMaxValidTime(self): 35 return self.maxValidTime 36 37 def GetCurrentTime(self): 38 return self.currentTime 39 40 def SetTimestamp(self, timestamp, numParts = 1): 41 self.SetCurrentTimestamp(timestamp, numParts=numParts) 42 43 def GetCurrentTimeAsPercentage(self): 44 return float(self.currentTime - self.startTime) / self.fullRange 45 46 def SetTimestampFromPercentage(self, value): 47 value = min(value, self.maxValidPercentage) 48 newTimestamp = self._GetClampedTimestamp(value * self.fullRange + self.startTime) 49 self.SetCurrentTimestamp(newTimestamp) 50 51 def AddHour(self): 52 self.AddNumHours(1) 53 54 def SubtractHour(self): 55 self.AddNumHours(-1) 56 57 def AddNumHours(self, numHours, numParts = 1): 58 self.SetCurrentTimestamp(self.GetCurrentTime() + numHours * HOUR, numParts=numParts) 59 60 def SetCurrentTimestamp(self, timestamp, numParts = 1): 61 timestamp = self._RoundTimestampToPartsOfHour(timestamp, numParts) 62 timestamp = self._GetClampedTimestamp(timestamp) 63 wasChange = self.currentTime != timestamp 64 self.currentTime = long(self._GetClampedTimestamp(timestamp)) 65 self.on_hours_changed(wasChange) 66 67 def _GetClampedTimestamp(self, timestamp): 68 return mathext.clamp(timestamp, self.minValidTime, self.maxValidTime) 69 70 def GetMaxTime(self): 71 return self.maxValidTime 72 73 def _RoundTimestampToPartsOfHour(self, timestamp, numParts): 74 partOfHour = float(timestamp) % HOUR / HOUR 75 if FloatCloseEnough(partOfHour, 1.0): 76 numHours = 0 77 else: 78 numHours = self._RoundToParts(partOfHour, numParts) 79 newTimestamp = long(timestamp / HOUR) * HOUR + numHours * HOUR 80 return newTimestamp 81 82 def _RoundToParts(self, hourValue, numParts): 83 return round(hourValue * numParts) / float(numParts) 84 85 def SetFuelExpiryTime(self, timestamp): 86 self.fuelExpiryTime = timestamp 87 self.on_fuel_changed() 88 89 def GetFuelExpiryTime(self): 90 return self.fuelExpiryTime