-
- from server import logic_server
-
- class LogicNode(object):
- """basic node that allows the communication between logic nodes and Logic server
- """
-
- def __init__(self):
- self._logic_server = logic_server
- self._registered_events = {}
-
- # All base nodes will have method that will do nothing, unless defined
- # if you wanna remove this, due to performance, do not call LogicNode.__init__(self)
- # instead just register self._logic_server to logic_server and empty dict do self._registerd_events
- # plus other values defined here, if applicable
- # Or just return True from on_tick
- self.schedule_time_event(self.on_tick, on_event_trigger="on_logicnode_tick")
- self.trigEv("on_logicnode_create", self)
- self._logic_server.parent_object(self)
-
-
- # Internal methods
- def _resolve_event(self, event, *args, **kwargs):
- if event in self._registered_events:
- ev = self._registered_events[event]
- rtn = ev(event, *args, **kwargs)
- return rtn
-
-
- # API methods
- def register_event_responder(self, event, func):
- """registers event responder."""
- assert event not in self._registered_events, "Event already registered!"
- self._registered_events[event] = func
-
-
- def unregister_responder(self, event):
- del self._registered_events[event]
-
-
- def trigger_event(self, event, *args, **kwargs):
- """triggers an event on the AI scale.
-
- However, it should be note that the object who triggered will also check for it's own events!
- This is useful when you need to AI to give command to itself.
- """
- self._logic_server.trigger(event, *args, **kwargs)
-
-
- def schedule_time_event(self, func, delay=None, on_event_trigger=None, pass_args=(), pass_keywords={}):
- """schedules time event on the server. Can be either one time only, or reoccuring."""
- self._logic_server.schedule(self, func, delay, on_event_trigger, *pass_args, **pass_keywords)
-
- def unschedule_time_event(self, func):
- """unschedules time event on the server"""
- self._logic_server.unschedule(self, func)
-
-
- # Short forms of API methods
- def regEv(self, event, func):
- self.register_event_responder(event, func)
-
-
- def unregEv(self, event):
- self.unregister_responder(event)
-
-
- def trigEv(self, event, *args, **kwargs):
- self.trigger_event(event, *args, **kwargs)
-
-
- def schedEv(self, func, d=None, trigger=None, p_args=(), p_kwargs={}):
- self.schedule_time_event(func, d, trigger, p_args, p_kwargs)
-
- def unschedEv(self, func):
- self.unschedule_time_event(func)
-
- # Abstract methods
- # These should be filled with relevant data by the subclass
- def on_tick(self, *args, **kwargs):
- return True
-