Source code for morse.services.time_services
import logging; logger = logging.getLogger("morse." + __name__)
from morse.core.services import service, async_service
from morse.core import status, blenderapi
from morse.core.abstractobject import AbstractObject
from morse.core.morse_time import time_isafter
[docs]class TimeServices(AbstractObject):
def __init__(self):
AbstractObject.__init__(self)
self.time = blenderapi.persistantstorage().time
self._alarm_time = None
[docs] def name(self):
return "time"
@service
[docs] def mode(self):
""" Return the current time management mode """
return self.time.name()
@service
[docs] def now(self):
""" Return the simulator time, in seconds, since Epoch """
return self.time.time
@service
[docs] def statistics(self):
"""
Return various statistics associated to the specific time
management mode
"""
return self.time.statistics()
@async_service
[docs] def sleep(self, time):
"""
Sleep for time seconds
:param: a float representing the time to wait (in second)
"""
self._alarm_time = self.time.time + float(time)
logger.debug('alarm registered for %f' % self._alarm_time)
[docs] def action(self):
if self._alarm_time and time_isafter(self.time.time, self._alarm_time):
logger.debug('alarm fired at %f difference %f' % (self.time.time, self._alarm_time - self.time.time))
self._alarm_time = None
self.completed(status.SUCCESS)