spacepaste

  1.  
  2. from server import logic_server
  3. class LogicNode(object):
  4. """basic node that allows the communication between logic nodes and Logic server
  5. """
  6. def __init__(self):
  7. self._logic_server = logic_server
  8. self._registered_events = {}
  9. # All base nodes will have method that will do nothing, unless defined
  10. # if you wanna remove this, due to performance, do not call LogicNode.__init__(self)
  11. # instead just register self._logic_server to logic_server and empty dict do self._registerd_events
  12. # plus other values defined here, if applicable
  13. # Or just return True from on_tick
  14. self.schedule_time_event(self.on_tick, on_event_trigger="on_logicnode_tick")
  15. self.trigEv("on_logicnode_create", self)
  16. self._logic_server.parent_object(self)
  17. # Internal methods
  18. def _resolve_event(self, event, *args, **kwargs):
  19. if event in self._registered_events:
  20. ev = self._registered_events[event]
  21. rtn = ev(event, *args, **kwargs)
  22. return rtn
  23. # API methods
  24. def register_event_responder(self, event, func):
  25. """registers event responder."""
  26. assert event not in self._registered_events, "Event already registered!"
  27. self._registered_events[event] = func
  28. def unregister_responder(self, event):
  29. del self._registered_events[event]
  30. def trigger_event(self, event, *args, **kwargs):
  31. """triggers an event on the AI scale.
  32. However, it should be note that the object who triggered will also check for it's own events!
  33. This is useful when you need to AI to give command to itself.
  34. """
  35. self._logic_server.trigger(event, *args, **kwargs)
  36. def schedule_time_event(self, func, delay=None, on_event_trigger=None, pass_args=(), pass_keywords={}):
  37. """schedules time event on the server. Can be either one time only, or reoccuring."""
  38. self._logic_server.schedule(self, func, delay, on_event_trigger, *pass_args, **pass_keywords)
  39. def unschedule_time_event(self, func):
  40. """unschedules time event on the server"""
  41. self._logic_server.unschedule(self, func)
  42. # Short forms of API methods
  43. def regEv(self, event, func):
  44. self.register_event_responder(event, func)
  45. def unregEv(self, event):
  46. self.unregister_responder(event)
  47. def trigEv(self, event, *args, **kwargs):
  48. self.trigger_event(event, *args, **kwargs)
  49. def schedEv(self, func, d=None, trigger=None, p_args=(), p_kwargs={}):
  50. self.schedule_time_event(func, d, trigger, p_args, p_kwargs)
  51. def unschedEv(self, func):
  52. self.unschedule_time_event(func)
  53. # Abstract methods
  54. # These should be filled with relevant data by the subclass
  55. def on_tick(self, *args, **kwargs):
  56. return True
  57.