Source code for morse.core.external_object

import logging; logger = logging.getLogger("morse." + __name__)
from abc import ABCMeta, abstractmethod
import morse.core.object
from morse.helpers.components import add_data

[docs]class ExternalObject(morse.core.object.Object): """ Basic Class for all External Object Provides common attributes. """ # Make this an abstract class __metaclass__ = ABCMeta def __init__ (self, obj, parent=None): """ Constructor method. """ # Call the constructor of the parent class morse.core.object.Object.__init__(self, obj, parent) # Define lists of dynamically added functions self.input_functions = [] self.output_functions = [] self.input_modifiers = [] self.output_modifiers = []
[docs] def finalize(self): self._active = False morse.core.object.Object.finalize(self) del self.input_functions[:] del self.output_functions[:] del self.input_modifiers[:] del self.output_modifiers[:]
[docs] def action(self): """ Call the action functions that have been added to the list. """ # Do nothing if this component has been deactivated if not self._active: return # Update the component's position in the world self.position_3d.update(self.bge_object) received = False status = False # First the input functions for function in self.input_functions: status = function(self) received = received or status if received: # Data modification functions for function in self.input_modifiers: function() # Call the regular action function of the component self.default_action() # Data modification functions for function in self.output_modifiers: function() # Lastly output functions for function in self.output_functions: function(self)
[docs]class ExternalSensor(ExternalObject): add_data('timestamp', 0.0, 'float', 'number of seconds in simulated time')
[docs] def action(self): self.local_data['timestamp'] = self.robot_parent.gettime() ExternalObject.action(self)
[docs]class ExternalActuator(ExternalObject): pass