def __init__(self, world, view, spinner, event_handler, mouse, keyboard): from Controller.Steering.SteerForOffset import SteerForOffset as Beh mouse.hide() self.crosshair = Crosshair(view, world, event_handler) self.spinner = spinner self.view = view self.world = world self.event_handler = event_handler flies = set() for i in range(10): flies.add( self.add_steering_entity(Beh, self.crosshair.get_entity_id())) self.flies = flies #self.add_flee_behavior(flies) event_handler.bind(self.crosshair.mouse_move_cb, mouse.MOUSE_MOVE) event_handler.bind(self.crosshair.fire_cb, keyboard.register_event_type('Space', 'UP')) event_handler.bind(self.on_quit, keyboard.register_event_type('Left Ctrl-Q', 'DOWN')) event_handler.bind(self.on_toggle_id, keyboard.register_event_type('i', 'UP')) for listener_obj in [world, view, mouse, keyboard]: event_handler.bind(listener_obj.on_update, self.spinner.TICK) text_entity_id = view.add_text_entity("Shooting app", (0, 0), size=20)
def __init__(self, world, view, spinner, event_handler, mouse, keyboard): from Controller.Steering.SteerForOffset import SteerForOffset as Beh mouse.hide() self.crosshair=Crosshair(view, world, event_handler) self.spinner=spinner self.view=view self.world=world self.event_handler=event_handler flies=set() for i in range(10): flies.add(self.add_steering_entity(Beh, self.crosshair.get_entity_id())) self.flies=flies #self.add_flee_behavior(flies) event_handler.bind(self.crosshair.mouse_move_cb, mouse.MOUSE_MOVE) event_handler.bind(self.crosshair.fire_cb, keyboard.register_event_type('Space', 'UP')) event_handler.bind(self.on_quit, keyboard.register_event_type('Left Ctrl-Q', 'DOWN')) event_handler.bind(self.on_toggle_id, keyboard.register_event_type('i', 'UP')) for listener_obj in [world, view, mouse, keyboard]: event_handler.bind(listener_obj.on_update, self.spinner.TICK) text_entity_id=view.add_text_entity("Shooting app", (0,0), size=20)
class ShootTheFliesApp(object): ''' Shoot the flies! Use the mouse to move and space to shoot Why space bar? just to showcase the keyboard controller. ''' def __init__(self, world, view, spinner, event_handler, mouse, keyboard): from Controller.Steering.SteerForOffset import SteerForOffset as Beh mouse.hide() self.crosshair = Crosshair(view, world, event_handler) self.spinner = spinner self.view = view self.world = world self.event_handler = event_handler flies = set() for i in range(10): flies.add( self.add_steering_entity(Beh, self.crosshair.get_entity_id())) self.flies = flies #self.add_flee_behavior(flies) event_handler.bind(self.crosshair.mouse_move_cb, mouse.MOUSE_MOVE) event_handler.bind(self.crosshair.fire_cb, keyboard.register_event_type('Space', 'UP')) event_handler.bind(self.on_quit, keyboard.register_event_type('Left Ctrl-Q', 'DOWN')) event_handler.bind(self.on_toggle_id, keyboard.register_event_type('i', 'UP')) for listener_obj in [world, view, mouse, keyboard]: event_handler.bind(listener_obj.on_update, self.spinner.TICK) text_entity_id = view.add_text_entity("Shooting app", (0, 0), size=20) def on_toggle_id(self, event): try: showing_id = self.showing_id = not self.showing_id except AttributeError: showing_id = self.showing_id = True if showing_id: from Controller.Labelers import DynamicLabel self.labels = set() def pretty_rep(entity_id): return str(self.world.get_entity(entity_id).total_force) for entity in self.flies: label = DynamicLabel(self.world, self.view, entity) label.set_getter_callback(pretty_rep) self.labels.add(label) label.set_text(str(entity)) self.event_handler.bind(label.update, self.spinner.TICK) else: del self.labels def add_flee_behavior(self, group): from Controller.Steering.SteerForFlee import SteerForFlee import random for flie in group: second_flie = flie while flie == second_flie: second_flie = random.randint(0, len(group)) seek = SteerForFlee(self.world, flie) seek.target_entity(second_flie) self.steering_entities.add(seek) self.event_handler.bind(seek.update, spinner.TICK) def add_steering_entity(self, Behavior, target): import random spinner = self.spinner #Create and apply Seeking Behavior controller to entity seeking_entity = self.world.add_entity( (random.randint(0, 640), random.randint(0, 480)), (100, 100)) self.view.add_entity(seeking_entity, trace=False, size=8, shape='s', color='r') seek = Behavior(self.world, seeking_entity) # Only works with Offset seek.set_side(-1.0) seek.target_entity(target) try: self.steering_entities.add(seek) except: self.steering_entities = set() self.steering_entities.add(seek) self.event_handler.bind(seek.update, spinner.TICK) return seeking_entity def run(self): self.spinner.run() def on_quit(self, event): self.spinner.stop()
class ShootTheFliesApp(object): ''' Shoot the flies! Use the mouse to move and space to shoot Why space bar? just to showcase the keyboard controller. ''' def __init__(self, world, view, spinner, event_handler, mouse, keyboard): from Controller.Steering.SteerForOffset import SteerForOffset as Beh mouse.hide() self.crosshair=Crosshair(view, world, event_handler) self.spinner=spinner self.view=view self.world=world self.event_handler=event_handler flies=set() for i in range(10): flies.add(self.add_steering_entity(Beh, self.crosshair.get_entity_id())) self.flies=flies #self.add_flee_behavior(flies) event_handler.bind(self.crosshair.mouse_move_cb, mouse.MOUSE_MOVE) event_handler.bind(self.crosshair.fire_cb, keyboard.register_event_type('Space', 'UP')) event_handler.bind(self.on_quit, keyboard.register_event_type('Left Ctrl-Q', 'DOWN')) event_handler.bind(self.on_toggle_id, keyboard.register_event_type('i', 'UP')) for listener_obj in [world, view, mouse, keyboard]: event_handler.bind(listener_obj.on_update, self.spinner.TICK) text_entity_id=view.add_text_entity("Shooting app", (0,0), size=20) def on_toggle_id(self, event): try: showing_id=self.showing_id=not self.showing_id except AttributeError: showing_id=self.showing_id=True if showing_id: from Controller.Labelers import DynamicLabel self.labels=set() def pretty_rep(entity_id): return str(self.world.get_entity(entity_id).total_force) for entity in self.flies: label=DynamicLabel(self.world, self.view,entity) label.set_getter_callback(pretty_rep) self.labels.add(label) label.set_text(str(entity)) self.event_handler.bind(label.update, self.spinner.TICK) else: del self.labels def add_flee_behavior(self, group): from Controller.Steering.SteerForFlee import SteerForFlee import random for flie in group: second_flie=flie while flie==second_flie: second_flie=random.randint(0,len(group)) seek=SteerForFlee(self.world,flie) seek.target_entity(second_flie) self.steering_entities.add(seek) self.event_handler.bind(seek.update, spinner.TICK) def add_steering_entity(self, Behavior, target): import random spinner=self.spinner #Create and apply Seeking Behavior controller to entity seeking_entity=self.world.add_entity((random.randint(0,640) ,random.randint(0,480)),(100, 100)) self.view.add_entity(seeking_entity, trace=False,size=8,shape='s', color='r') seek=Behavior(self.world, seeking_entity) # Only works with Offset seek.set_side(-1.0) seek.target_entity(target) try: self.steering_entities.add(seek) except: self.steering_entities=set() self.steering_entities.add(seek) self.event_handler.bind(seek.update, spinner.TICK) return seeking_entity def run(self): self.spinner.run() def on_quit(self, event): self.spinner.stop()