def info_int_handler(self, event): """Internal information event handler. Only accept the information of the clock is higher than from the last information Arguments: event {InfoInternal} -- Internal information event instance """ if self.info_clock >= event.clock: return self.info = event.message self.info_clock = event.clock self.info_hops = event.hops + 1 self.messages.append(( self, InfoInternal(self.id, self.info_clock, self.info, self.info_hops) )) if self.verbose: print('Fish #{} got info: {} from #{}'.format( self.id, event.message, event.source_id ))
def info_ext_handler(self, event): """External information handler Always accept the external information and spread the news. Arguments: event {InfoExternal} -- InfoExternal event """ self.info = event.message self.info_clock = self.clock self.messages.append((self, InfoInternal(self.id, self.clock, self.info))) if self.verbose: print('Fish #{} got external info {}'.format( self.id, event.message))
def homing_handler(self, event, pos): """Homing handler, i.e., make fish aggregated extremely Arguments: event {Homing} -- Homing event pos {np.array} -- Position of the homing event initialtor """ self.info = 'signal_aircraft' # Very bad practice. Needs to be fixed! self.info_clock = self.clock self.messages.append((self, InfoInternal(self.id, self.clock, self.info))) # update behavior based on external event self.status = 'wait' self.target_pos = self.interaction.perceive_object(self.id, pos) if self.verbose: print('Fish #{} got external info {}'.format( self.id, event.message))