Example #1
0
    def __init__(self, event_handler, world, screen, mouse, spinner, keyboard):
        self.event_handler = event_handler
        self.world = world
        self.screen = screen
        self.mouse = mouse
        self.spinner = spinner
        self.keyboard = keyboard

        self.steering_entities = []
        self.entity_list = [
            self.world.add_entity((100, 100), (100, 0)) for i in xrange(1)
        ]
        [
            self.screen.add_entity(entity,
                                   trace=False,
                                   shape='s',
                                   color='b',
                                   size=5) for entity in self.entity_list
        ]
        [
            self.world.apply_relative_force(entity, pi / 2, 100)
            for entity in self.entity_list
        ]
        from Controller.Cameras import FollowCamera
        self.camera = FollowCamera(screen, world)
        self.camera.set_target(self.entity_list[0])

        # Seek entites are green
        self.AddSteeringEntity(SteerForPursuit, 'g')
        arrive_id = self.AddSteeringEntity(SteerForArrive, color=[0, 255, 150])
        self.steering_entities[arrive_id].set_slowing_distance(100.0)

        #Evade entities are red
        evade_id = self.AddSteeringEntity(SteerForEvasion, 'r')
        self.steering_entities[evade_id].set_safe_distance(5.0)
        flee_id = self.AddSteeringEntity(SteerForFlee, 'r')
        self.steering_entities[flee_id].set_safe_distance(10.0)

        #Track entites are Yellow
        yellow = (255, 255, 1)
        track_id = self.AddSteeringEntity(SteerForTrack, yellow)

        offset_id = self.AddSteeringEntity(SteerForOffset, yellow)
        self.steering_entities[offset_id].set_offset(100.0)

        #Left click ends app
        event_handler.bind(self.on_mouse_left_up, mouse.MOUSE_BTN3_UP)

        # Debug information
        event_handler.bind(self.on_toggle_id,
                           keyboard.register_event_type('i', 'UP'))

        for listener_obj in [
                self.mouse, self.world, self.screen, self.keyboard, self.camera
        ]:
            event_handler.bind(listener_obj.on_update, self.spinner.TICK)
Example #2
0
    def __init__(self, event_handler, world, screen, mouse, spinner, keyboard):
        self.event_handler = event_handler
        self.world = world
        self.screen = screen
        self.mouse = mouse
        self.spinner = spinner
        self.keyboard = keyboard

        self.steering_entities = []
        self.entity_list = []

        # Add circling entity
        v = (50.0, 0)
        self.entity_list.append(self.world.add_entity((300, 300), v))
        self.screen.add_entity(self.entity_list[0],
                               trace=False,
                               shape='s',
                               color='b',
                               size=5)
        f = 20.0
        w = f / 50.0
        self.world.apply_relative_force(self.entity_list[0], pi / 2, f)
        self.world.set_angspeed(self.entity_list[0], w)

        # Seek entity
        mc_entity = self.AddSteeringEntity(SteerForMC, 'g', (-10, 0))
        self.steering_entities[mc_entity].set_gain(160)
        # Not working
        #        mch_entity = self.AddSteeringEntity(SteerForMCHeading,'r',(-10,0))
        #        self.steering_entities[mch_entity].set_gain(160)

        # Camera
        from Controller.Cameras import FollowCamera
        self.camera = FollowCamera(screen, world)
        self.camera.set_target(self.entity_list[0])
        #        self.camera.set_target(self.steering_entities[1].entity_id)

        #Left click ends app
        event_handler.bind(self.on_mouse_left_up, mouse.MOUSE_BTN3_UP)

        # Space pauses
        event_handler.bind(self.on_pause,
                           keyboard.register_event_type('Space', 'UP'))
        # Debug information
        event_handler.bind(self.on_toggle_id,
                           keyboard.register_event_type('i', 'UP'))

        # Drag and Drop
        self.grabbed = None
        event_handler.bind(self.on_mouse_down, mouse.MOUSE_BTN1_DOWN)
        event_handler.bind(self.on_mouse_up, mouse.MOUSE_BTN1_UP)
        event_handler.bind(self.on_mouse_move, mouse.MOUSE_MOVE)

        for listener_obj in \
             [self.mouse, self.world, self.screen, self.keyboard, self.camera]:
            event_handler.bind(listener_obj.on_update, self.spinner.TICK)
Example #3
0
 def __init__(self, event_handler, world, screen, mouse, spinner, keyboard):
     self.event_handler=event_handler
     self.world=world
     self.screen=screen
     self.mouse=mouse
     self.spinner=spinner
     self.keyboard=keyboard
     
     self.steering_entities=set()
     self.entities=list()
     #self.add_in_square(SteerForFlock)
     self.AddSteeringEntity(SteerForFlock,number=10,color='g')
     self.AddSteeringEntity(SteerForFlock,number=6,color='r')
     PJ=self.entities[0]
     
     
     #Creates camera
     from Controller.Cameras import FollowCamera
     self.camera=FollowCamera(screen, world)
     self.camera.set_target(PJ)
     
     #Shows target
     from Controller.Labelers import ConstantLabel
     label=ConstantLabel(world, screen, PJ, color=(255,0,0))
     label.set_text("Target")
     self.label=label
     
     #Left click ends app
     event_handler.bind(self.on_mouse_left_up, mouse.MOUSE_BTN3_UP)
      
     for listener_obj in [self.mouse, self.keyboard, self.world, label, self.screen,self.camera]:
         event_handler.bind(listener_obj.on_update, self.spinner.TICK)
      
      
     self.text_entity_id=screen.add_text_entity("Flocking app (with follow cam!)", (0,0), size=20, color=(200,200,200))
Example #4
0
    def __init__(self, event_handler, world, screen, mouse, spinner, keyboard):
        self.event_handler=event_handler
        self.world=world
        self.screen=screen
        self.mouse=mouse
        self.spinner=spinner
        self.keyboard=keyboard
        
        self.steering_entities=[]
        self.entity_list=[]
        
        # Add circling entity
        v=(50.0,0)
        self.entity_list.append(self.world.add_entity((300,300),v))
        self.screen.add_entity(self.entity_list[0],
                                         trace=False,shape='s',color='b',size=5)
        f=20.0
        w=f/50.0
        self.world.apply_relative_force(self.entity_list[0], pi/2, f)
        self.world.set_angspeed(self.entity_list[0], w)       
        
        # Seek entity
        mc_entity = self.AddSteeringEntity(SteerForMC,'g',(-10,0))
        self.steering_entities[mc_entity].set_gain(160)
        # Not working
#        mch_entity = self.AddSteeringEntity(SteerForMCHeading,'r',(-10,0))
#        self.steering_entities[mch_entity].set_gain(160)
        
        # Camera
        from Controller.Cameras import FollowCamera
        self.camera = FollowCamera(screen, world)
        self.camera.set_target(self.entity_list[0])
#        self.camera.set_target(self.steering_entities[1].entity_id)
        
        #Left click ends app
        event_handler.bind(self.on_mouse_left_up, mouse.MOUSE_BTN3_UP)

        # Space pauses
        event_handler.bind(self.on_pause, 
                                    keyboard.register_event_type('Space', 'UP'))
        # Debug information
        event_handler.bind(self.on_toggle_id, 
                                 keyboard.register_event_type('i', 'UP'))

        # Drag and Drop
        self.grabbed=None
        event_handler.bind(self.on_mouse_down, mouse.MOUSE_BTN1_DOWN)
        event_handler.bind(self.on_mouse_up, mouse.MOUSE_BTN1_UP)
        event_handler.bind(self.on_mouse_move, mouse.MOUSE_MOVE)
                                
        for listener_obj in \
             [self.mouse, self.world, self.screen, self.keyboard, self.camera]:
            event_handler.bind(listener_obj.on_update, self.spinner.TICK)
Example #5
0
    def __init__(self, event_handler, world, screen, mouse, spinner, keyboard):
        self.event_handler = event_handler
        self.world = world
        self.screen = screen
        self.mouse = mouse
        self.spinner = spinner
        self.keyboard = keyboard

        self.steering_entities = set()
        self.entities = list()
        #self.add_in_square(SteerForFlock)
        self.AddSteeringEntity(SteerForFlock, number=10, color='g')
        self.AddSteeringEntity(SteerForFlock, number=6, color='r')
        PJ = self.entities[0]

        #Creates camera
        from Controller.Cameras import FollowCamera
        self.camera = FollowCamera(screen, world)
        self.camera.set_target(PJ)

        #Shows target
        from Controller.Labelers import ConstantLabel
        label = ConstantLabel(world, screen, PJ, color=(255, 0, 0))
        label.set_text("Target")
        self.label = label

        #Left click ends app
        event_handler.bind(self.on_mouse_left_up, mouse.MOUSE_BTN3_UP)

        for listener_obj in [
                self.mouse, self.keyboard, self.world, label, self.screen,
                self.camera
        ]:
            event_handler.bind(listener_obj.on_update, self.spinner.TICK)

        self.text_entity_id = screen.add_text_entity(
            "Flocking app (with follow cam!)", (0, 0),
            size=20,
            color=(200, 200, 200))
Example #6
0
    def __init__(self, event_handler, world, screen, mouse, spinner, keyboard):
        self.event_handler=event_handler
        self.world=world
        self.screen=screen
        self.mouse=mouse
        self.spinner=spinner
        self.keyboard=keyboard
        
        self.steering_entities=[]
        self.entity_list=[self.world.add_entity((100,100),(100, 0)) for i in xrange(1)]
        [self.screen.add_entity(entity, trace=False,shape='s',color='b',size=5)
                                                 for entity in self.entity_list]
        [self.world.apply_relative_force(entity, pi/2, 100) for entity in
                                                               self.entity_list]
        from Controller.Cameras import FollowCamera
        self.camera = FollowCamera(screen, world)
        self.camera.set_target(self.entity_list[0])
       
        # Seek entites are green
        self.AddSteeringEntity(SteerForPursuit,'g')
        arrive_id = self.AddSteeringEntity(SteerForArrive,color=[0,255,150])
        self.steering_entities[arrive_id].set_slowing_distance(100.0)

        #Evade entities are red
        evade_id = self.AddSteeringEntity(SteerForEvasion,'r')
        self.steering_entities[evade_id].set_safe_distance(5.0)        
        flee_id = self.AddSteeringEntity(SteerForFlee,'r')
        self.steering_entities[flee_id].set_safe_distance(10.0)
        
        #Track entites are Yellow
        yellow=(255,255,1)
        track_id=self.AddSteeringEntity(SteerForTrack,yellow)
        
        offset_id = self.AddSteeringEntity(SteerForOffset,yellow)
        self.steering_entities[offset_id].set_offset(100.0)
        
        #Left click ends app
        event_handler.bind(self.on_mouse_left_up, mouse.MOUSE_BTN3_UP)

        # Debug information
        event_handler.bind(self.on_toggle_id, 
                                 keyboard.register_event_type('i', 'UP'))
                                 
        for listener_obj in [self.mouse, self.world, self.screen, self.keyboard,
                                                                   self.camera]:
            event_handler.bind(listener_obj.on_update, self.spinner.TICK)
Example #7
0
class FlockTestApp():
    def __init__(self, event_handler, world, screen, mouse, spinner, keyboard):
        self.event_handler=event_handler
        self.world=world
        self.screen=screen
        self.mouse=mouse
        self.spinner=spinner
        self.keyboard=keyboard
        
        self.steering_entities=set()
        self.entities=list()
        #self.add_in_square(SteerForFlock)
        self.AddSteeringEntity(SteerForFlock,number=10,color='g')
        self.AddSteeringEntity(SteerForFlock,number=6,color='r')
        PJ=self.entities[0]
        
        
        #Creates camera
        from Controller.Cameras import FollowCamera
        self.camera=FollowCamera(screen, world)
        self.camera.set_target(PJ)
        
        #Shows target
        from Controller.Labelers import ConstantLabel
        label=ConstantLabel(world, screen, PJ, color=(255,0,0))
        label.set_text("Target")
        self.label=label
        
        #Left click ends app
        event_handler.bind(self.on_mouse_left_up, mouse.MOUSE_BTN3_UP)
         
        for listener_obj in [self.mouse, self.keyboard, self.world, label, self.screen,self.camera]:
            event_handler.bind(listener_obj.on_update, self.spinner.TICK)
         
         
        self.text_entity_id=screen.add_text_entity("Flocking app (with follow cam!)", (0,0), size=20, color=(200,200,200))
            
    def AddSteeringEntity(self, Behavior,number=1,color='r'):
      
        #Create and apply Seeking Behavior controller to entity
        for i in xrange(1,number,1):
            pos=round((rnd.uniform(0,640),rnd.uniform(0,480)))
            vel=round((rnd.uniform(-100,100),rnd.uniform(-0,0)))
            seeking_entity=self.world.add_entity(pos,vel)
            self.world.set_neighbour_sensor(seeking_entity, 500,pi)            
            self.screen.add_entity(seeking_entity, 
                                      trace=False,size=5,color=color, shape='s')
                                      
            flock=Behavior(self.world, seeking_entity)
            self.steering_entities.add(flock)
            self.event_handler.bind(flock.update, self.spinner.TICK)
            
            self.entities.append(seeking_entity)

    def add_in_square(self, Behavior, color='r', shape='s'):
        side=50.0
        for pos in [(side,side),(2*side,side),(side,2*side),(2*side,2*side)]:
            seeking_entity=self.world.add_entity(pos,(100.0,100.0))
            self.world.set_neighbour_sensor(seeking_entity,500,pi)      
            self.screen.add_entity(seeking_entity, 
                                    trace=False,size=8,color=color, shape=shape)
            flock=Behavior(self.world, seeking_entity)
            self.steering_entities.add(flock)
            self.event_handler.bind(flock.update, self.spinner.TICK)
            
    def run(self):
        self.spinner.run()

    def on_mouse_left_up(self, event):
        self.spinner.stop()    	
Example #8
0
class PursuitTestApp():
    def __init__(self, event_handler, world, screen, mouse, spinner, keyboard):
        self.event_handler=event_handler
        self.world=world
        self.screen=screen
        self.mouse=mouse
        self.spinner=spinner
        self.keyboard=keyboard
        
        self.steering_entities=[]
        self.entity_list=[self.world.add_entity((100,100),(100, 0)) for i in xrange(1)]
        [self.screen.add_entity(entity, trace=False,shape='s',color='b',size=5)
                                                 for entity in self.entity_list]
        [self.world.apply_relative_force(entity, pi/2, 100) for entity in
                                                               self.entity_list]
        from Controller.Cameras import FollowCamera
        self.camera = FollowCamera(screen, world)
        self.camera.set_target(self.entity_list[0])
       
        # Seek entites are green
        self.AddSteeringEntity(SteerForPursuit,'g')
        arrive_id = self.AddSteeringEntity(SteerForArrive,color=[0,255,150])
        self.steering_entities[arrive_id].set_slowing_distance(100.0)

        #Evade entities are red
        evade_id = self.AddSteeringEntity(SteerForEvasion,'r')
        self.steering_entities[evade_id].set_safe_distance(5.0)        
        flee_id = self.AddSteeringEntity(SteerForFlee,'r')
        self.steering_entities[flee_id].set_safe_distance(10.0)
        
        #Track entites are Yellow
        yellow=(255,255,1)
        track_id=self.AddSteeringEntity(SteerForTrack,yellow)
        
        offset_id = self.AddSteeringEntity(SteerForOffset,yellow)
        self.steering_entities[offset_id].set_offset(100.0)
        
        #Left click ends app
        event_handler.bind(self.on_mouse_left_up, mouse.MOUSE_BTN3_UP)

        # Debug information
        event_handler.bind(self.on_toggle_id, 
                                 keyboard.register_event_type('i', 'UP'))
                                 
        for listener_obj in [self.mouse, self.world, self.screen, self.keyboard,
                                                                   self.camera]:
            event_handler.bind(listener_obj.on_update, self.spinner.TICK)
            
    def AddSteeringEntity(self, Behavior,color='r',vel=(0.0,0.0,)):
        spinner=self.spinner
        #Create and apply Seeking Behavior controller to entity
        seeking_entity=self.world.add_entity((200,200),vel)
        self.screen.add_entity(seeking_entity, trace=False,size=3,color=color)
        seek=Behavior(self.world, seeking_entity)
        seek.target_entity(self.entity_list[0])
        self.steering_entities.append(seek)
        
        self.event_handler.bind(seek.update, spinner.TICK)
        return len(self.steering_entities)-1
        
    def run(self):
        self.spinner.run()

    def on_mouse_left_up(self, event):
        self.spinner.stop()    	
    
    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.steering_entities:
                ent_id=entity.get_slave_id()
                label=DynamicLabel(self.world,self.screen,ent_id,
                                                            color=(255,255,255))
                label.set_getter_callback(pretty_rep)
                self.labels.add(label)
                label.set_text(str(ent_id))
                self.event_handler.bind(label.update, self.spinner.TICK)
                
        else:
            del self.labels
Example #9
0
class FlockTestApp():
    def __init__(self, event_handler, world, screen, mouse, spinner, keyboard):
        self.event_handler = event_handler
        self.world = world
        self.screen = screen
        self.mouse = mouse
        self.spinner = spinner
        self.keyboard = keyboard

        self.steering_entities = set()
        self.entities = list()
        #self.add_in_square(SteerForFlock)
        self.AddSteeringEntity(SteerForFlock, number=10, color='g')
        self.AddSteeringEntity(SteerForFlock, number=6, color='r')
        PJ = self.entities[0]

        #Creates camera
        from Controller.Cameras import FollowCamera
        self.camera = FollowCamera(screen, world)
        self.camera.set_target(PJ)

        #Shows target
        from Controller.Labelers import ConstantLabel
        label = ConstantLabel(world, screen, PJ, color=(255, 0, 0))
        label.set_text("Target")
        self.label = label

        #Left click ends app
        event_handler.bind(self.on_mouse_left_up, mouse.MOUSE_BTN3_UP)

        for listener_obj in [
                self.mouse, self.keyboard, self.world, label, self.screen,
                self.camera
        ]:
            event_handler.bind(listener_obj.on_update, self.spinner.TICK)

        self.text_entity_id = screen.add_text_entity(
            "Flocking app (with follow cam!)", (0, 0),
            size=20,
            color=(200, 200, 200))

    def AddSteeringEntity(self, Behavior, number=1, color='r'):

        #Create and apply Seeking Behavior controller to entity
        for i in xrange(1, number, 1):
            pos = round((rnd.uniform(0, 640), rnd.uniform(0, 480)))
            vel = round((rnd.uniform(-100, 100), rnd.uniform(-0, 0)))
            seeking_entity = self.world.add_entity(pos, vel)
            self.world.set_neighbour_sensor(seeking_entity, 500, pi)
            self.screen.add_entity(seeking_entity,
                                   trace=False,
                                   size=5,
                                   color=color,
                                   shape='s')

            flock = Behavior(self.world, seeking_entity)
            self.steering_entities.add(flock)
            self.event_handler.bind(flock.update, self.spinner.TICK)

            self.entities.append(seeking_entity)

    def add_in_square(self, Behavior, color='r', shape='s'):
        side = 50.0
        for pos in [(side, side), (2 * side, side), (side, 2 * side),
                    (2 * side, 2 * side)]:
            seeking_entity = self.world.add_entity(pos, (100.0, 100.0))
            self.world.set_neighbour_sensor(seeking_entity, 500, pi)
            self.screen.add_entity(seeking_entity,
                                   trace=False,
                                   size=8,
                                   color=color,
                                   shape=shape)
            flock = Behavior(self.world, seeking_entity)
            self.steering_entities.add(flock)
            self.event_handler.bind(flock.update, self.spinner.TICK)

    def run(self):
        self.spinner.run()

    def on_mouse_left_up(self, event):
        self.spinner.stop()
Example #10
0
class PursuitTestApp():
    def __init__(self, event_handler, world, screen, mouse, spinner, keyboard):
        self.event_handler = event_handler
        self.world = world
        self.screen = screen
        self.mouse = mouse
        self.spinner = spinner
        self.keyboard = keyboard

        self.steering_entities = []
        self.entity_list = [
            self.world.add_entity((100, 100), (100, 0)) for i in xrange(1)
        ]
        [
            self.screen.add_entity(entity,
                                   trace=False,
                                   shape='s',
                                   color='b',
                                   size=5) for entity in self.entity_list
        ]
        [
            self.world.apply_relative_force(entity, pi / 2, 100)
            for entity in self.entity_list
        ]
        from Controller.Cameras import FollowCamera
        self.camera = FollowCamera(screen, world)
        self.camera.set_target(self.entity_list[0])

        # Seek entites are green
        self.AddSteeringEntity(SteerForPursuit, 'g')
        arrive_id = self.AddSteeringEntity(SteerForArrive, color=[0, 255, 150])
        self.steering_entities[arrive_id].set_slowing_distance(100.0)

        #Evade entities are red
        evade_id = self.AddSteeringEntity(SteerForEvasion, 'r')
        self.steering_entities[evade_id].set_safe_distance(5.0)
        flee_id = self.AddSteeringEntity(SteerForFlee, 'r')
        self.steering_entities[flee_id].set_safe_distance(10.0)

        #Track entites are Yellow
        yellow = (255, 255, 1)
        track_id = self.AddSteeringEntity(SteerForTrack, yellow)

        offset_id = self.AddSteeringEntity(SteerForOffset, yellow)
        self.steering_entities[offset_id].set_offset(100.0)

        #Left click ends app
        event_handler.bind(self.on_mouse_left_up, mouse.MOUSE_BTN3_UP)

        # Debug information
        event_handler.bind(self.on_toggle_id,
                           keyboard.register_event_type('i', 'UP'))

        for listener_obj in [
                self.mouse, self.world, self.screen, self.keyboard, self.camera
        ]:
            event_handler.bind(listener_obj.on_update, self.spinner.TICK)

    def AddSteeringEntity(self, Behavior, color='r', vel=(
        0.0,
        0.0,
    )):
        spinner = self.spinner
        #Create and apply Seeking Behavior controller to entity
        seeking_entity = self.world.add_entity((200, 200), vel)
        self.screen.add_entity(seeking_entity,
                               trace=False,
                               size=3,
                               color=color)
        seek = Behavior(self.world, seeking_entity)
        seek.target_entity(self.entity_list[0])
        self.steering_entities.append(seek)

        self.event_handler.bind(seek.update, spinner.TICK)
        return len(self.steering_entities) - 1

    def run(self):
        self.spinner.run()

    def on_mouse_left_up(self, event):
        self.spinner.stop()

    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.steering_entities:
                ent_id = entity.get_slave_id()
                label = DynamicLabel(self.world,
                                     self.screen,
                                     ent_id,
                                     color=(255, 255, 255))
                label.set_getter_callback(pretty_rep)
                self.labels.add(label)
                label.set_text(str(ent_id))
                self.event_handler.bind(label.update, self.spinner.TICK)

        else:
            del self.labels
Example #11
0
class MCTestApp():
    def __init__(self, event_handler, world, screen, mouse, spinner, keyboard):
        self.event_handler = event_handler
        self.world = world
        self.screen = screen
        self.mouse = mouse
        self.spinner = spinner
        self.keyboard = keyboard

        self.steering_entities = []
        self.entity_list = []

        # Add circling entity
        v = (50.0, 0)
        self.entity_list.append(self.world.add_entity((300, 300), v))
        self.screen.add_entity(self.entity_list[0],
                               trace=False,
                               shape='s',
                               color='b',
                               size=5)
        f = 20.0
        w = f / 50.0
        self.world.apply_relative_force(self.entity_list[0], pi / 2, f)
        self.world.set_angspeed(self.entity_list[0], w)

        # Seek entity
        mc_entity = self.AddSteeringEntity(SteerForMC, 'g', (-10, 0))
        self.steering_entities[mc_entity].set_gain(160)
        # Not working
        #        mch_entity = self.AddSteeringEntity(SteerForMCHeading,'r',(-10,0))
        #        self.steering_entities[mch_entity].set_gain(160)

        # Camera
        from Controller.Cameras import FollowCamera
        self.camera = FollowCamera(screen, world)
        self.camera.set_target(self.entity_list[0])
        #        self.camera.set_target(self.steering_entities[1].entity_id)

        #Left click ends app
        event_handler.bind(self.on_mouse_left_up, mouse.MOUSE_BTN3_UP)

        # Space pauses
        event_handler.bind(self.on_pause,
                           keyboard.register_event_type('Space', 'UP'))
        # Debug information
        event_handler.bind(self.on_toggle_id,
                           keyboard.register_event_type('i', 'UP'))

        # Drag and Drop
        self.grabbed = None
        event_handler.bind(self.on_mouse_down, mouse.MOUSE_BTN1_DOWN)
        event_handler.bind(self.on_mouse_up, mouse.MOUSE_BTN1_UP)
        event_handler.bind(self.on_mouse_move, mouse.MOUSE_MOVE)

        for listener_obj in \
             [self.mouse, self.world, self.screen, self.keyboard, self.camera]:
            event_handler.bind(listener_obj.on_update, self.spinner.TICK)

    ##########
    # Seeking Entities Methods
    def AddSteeringEntity(self, Behavior, color='r', vel=(
        0.0,
        0.0,
    )):
        spinner = self.spinner

        #Create and apply Seeking Behavior controller to entity
        seeking_entity = self.world.add_entity((0, 0), vel)
        self.screen.add_entity(seeking_entity,
                               trace=False,
                               size=3,
                               color=color)
        seek = Behavior(self.world, seeking_entity)
        seek.target_entity(self.entity_list[0])
        self.steering_entities.append(seek)

        self.event_handler.bind(seek.update, spinner.TICK)
        return len(self.steering_entities) - 1

    #############
    # User events methods

    # Drag and Drop
    def on_mouse_down(self, event):
        entity = self.screen.get_entity_at(event['Pos'])
        if entity != None:
            self.grabbed = entity.id
            self.world.grab_entity(entity.id)

    def on_mouse_up(self, event):
        if self.grabbed != None:
            self.world.drop_entity(self.grabbed)
            self.grabbed = None

    def on_mouse_move(self, event):
        if self.grabbed != None:
            self.world.move_entity(
                self.grabbed, self.screen.get_world_position(event['Pos']))

    def on_pause(self, event):
        self.spinner.pause()

    def on_mouse_left_up(self, event):
        self.spinner.stop()

    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.steering_entities:
                ent_id = entity.get_slave_id()
                label = DynamicLabel(self.world,
                                     self.screen,
                                     ent_id,
                                     color=(255, 255, 255))
                label.set_getter_callback(pretty_rep)
                self.labels.add(label)
                label.set_text(str(ent_id))
                self.event_handler.bind(label.update, self.spinner.TICK)

        else:
            del self.labels

    #########
    def run(self):
        self.spinner.run()
Example #12
0
class MCTestApp():
    def __init__(self, event_handler, world, screen, mouse, spinner, keyboard):
        self.event_handler=event_handler
        self.world=world
        self.screen=screen
        self.mouse=mouse
        self.spinner=spinner
        self.keyboard=keyboard
        
        self.steering_entities=[]
        self.entity_list=[]
        
        # Add circling entity
        v=(50.0,0)
        self.entity_list.append(self.world.add_entity((300,300),v))
        self.screen.add_entity(self.entity_list[0],
                                         trace=False,shape='s',color='b',size=5)
        f=20.0
        w=f/50.0
        self.world.apply_relative_force(self.entity_list[0], pi/2, f)
        self.world.set_angspeed(self.entity_list[0], w)       
        
        # Seek entity
        mc_entity = self.AddSteeringEntity(SteerForMC,'g',(-10,0))
        self.steering_entities[mc_entity].set_gain(160)
        # Not working
#        mch_entity = self.AddSteeringEntity(SteerForMCHeading,'r',(-10,0))
#        self.steering_entities[mch_entity].set_gain(160)
        
        # Camera
        from Controller.Cameras import FollowCamera
        self.camera = FollowCamera(screen, world)
        self.camera.set_target(self.entity_list[0])
#        self.camera.set_target(self.steering_entities[1].entity_id)
        
        #Left click ends app
        event_handler.bind(self.on_mouse_left_up, mouse.MOUSE_BTN3_UP)

        # Space pauses
        event_handler.bind(self.on_pause, 
                                    keyboard.register_event_type('Space', 'UP'))
        # Debug information
        event_handler.bind(self.on_toggle_id, 
                                 keyboard.register_event_type('i', 'UP'))

        # Drag and Drop
        self.grabbed=None
        event_handler.bind(self.on_mouse_down, mouse.MOUSE_BTN1_DOWN)
        event_handler.bind(self.on_mouse_up, mouse.MOUSE_BTN1_UP)
        event_handler.bind(self.on_mouse_move, mouse.MOUSE_MOVE)
                                
        for listener_obj in \
             [self.mouse, self.world, self.screen, self.keyboard, self.camera]:
            event_handler.bind(listener_obj.on_update, self.spinner.TICK)

    ##########        
    # Seeking Entities Methods
    def AddSteeringEntity(self, Behavior,color='r',vel=(0.0,0.0,)):
        spinner=self.spinner

        #Create and apply Seeking Behavior controller to entity
        seeking_entity=self.world.add_entity((0,0),vel)
        self.screen.add_entity(seeking_entity, trace=False,size=3,color=color)
        seek=Behavior(self.world, seeking_entity)
        seek.target_entity(self.entity_list[0])
        self.steering_entities.append(seek)
        
        self.event_handler.bind(seek.update, spinner.TICK)
        return len(self.steering_entities)-1
            
    #############
    # User events methods

    # Drag and Drop
    def on_mouse_down(self, event):
    	entity=self.screen.get_entity_at(event['Pos'])
    	if entity!=None:
    		self.grabbed=entity.id
    		self.world.grab_entity(entity.id)
    		
    def on_mouse_up(self, event):
    	if self.grabbed!=None:
    		self.world.drop_entity(self.grabbed)
    		self.grabbed=None
    		
    def on_mouse_move(self, event):
    	if self.grabbed!=None:
    		self.world.move_entity(self.grabbed,
    		                   self.screen.get_world_position(event['Pos']))
			                   
    def on_pause(self, event):
    	self.spinner.pause()

    def on_mouse_left_up(self, event):
        self.spinner.stop()    	
    
    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.steering_entities:
                ent_id=entity.get_slave_id()
                label=DynamicLabel(self.world,self.screen,ent_id,
                                                            color=(255,255,255))
                label.set_getter_callback(pretty_rep)
                self.labels.add(label)
                label.set_text(str(ent_id))
                self.event_handler.bind(label.update, self.spinner.TICK)
                
        else:
            del self.labels

    #########
    def run(self):
        self.spinner.run()