Exemplo n.º 1
0
    def __init__(self, level):
        self.level = level
        pyglet.window.Window.__init__(self, fullscreen=True,
                                      caption="Cannonball")
        self.set_mouse_visible(False)

        glEnable(GL_BLEND)
        glEnable(GL_LINE_SMOOTH)
        glHint(GL_LINE_SMOOTH_HINT, GL_NICEST)
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

        glEnable(GL_LIGHTING)
        glEnable(GL_NORMALIZE)
        glEnable(GL_COLOR_MATERIAL)
        glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE)
        Float3 = ctypes.c_float * 3
        Float4 = ctypes.c_float * 4

        # Set up key light.
        glEnable(GL_LIGHT0)
        glLightfv(GL_LIGHT0, GL_POSITION, Float4(-1, 1, 1, 0))
        glLightfv(GL_LIGHT0, GL_DIFFUSE, Float3(1, 1, 1))

        # Set up fill light.
        glEnable(GL_LIGHT1)
        glLightfv(GL_LIGHT1, GL_POSITION, Float4(1, 0, 1, 0))
        glLightfv(GL_LIGHT1, GL_DIFFUSE, Float3(0.2, 0.2, 0.2))

        start = self.level.actors['start']
        start_shapes = start.body.shapeList
        start_position = b2Vec2()
        for shape in start_shapes:
            start_position += shape.GetCentroid()
        start_position *= 1 / len(start_shapes)
        self.create_cannonball(start_position)

        self.camera = Camera(self, self.level)

        self.time = 0
        self.physics_time = 0
        self.physics_dt = 1 / 60 
        pyglet.clock.schedule_interval(self.step, self.physics_dt)
Exemplo n.º 2
0
class CannonballWindow(pyglet.window.Window):
    def __init__(self, level):
        self.level = level
        pyglet.window.Window.__init__(self, fullscreen=True,
                                      caption="Cannonball")
        self.set_mouse_visible(False)

        glEnable(GL_BLEND)
        glEnable(GL_LINE_SMOOTH)
        glHint(GL_LINE_SMOOTH_HINT, GL_NICEST)
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

        glEnable(GL_LIGHTING)
        glEnable(GL_NORMALIZE)
        glEnable(GL_COLOR_MATERIAL)
        glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE)
        Float3 = ctypes.c_float * 3
        Float4 = ctypes.c_float * 4

        # Set up key light.
        glEnable(GL_LIGHT0)
        glLightfv(GL_LIGHT0, GL_POSITION, Float4(-1, 1, 1, 0))
        glLightfv(GL_LIGHT0, GL_DIFFUSE, Float3(1, 1, 1))

        # Set up fill light.
        glEnable(GL_LIGHT1)
        glLightfv(GL_LIGHT1, GL_POSITION, Float4(1, 0, 1, 0))
        glLightfv(GL_LIGHT1, GL_DIFFUSE, Float3(0.2, 0.2, 0.2))

        start = self.level.actors['start']
        start_shapes = start.body.shapeList
        start_position = b2Vec2()
        for shape in start_shapes:
            start_position += shape.GetCentroid()
        start_position *= 1 / len(start_shapes)
        self.create_cannonball(start_position)

        self.camera = Camera(self, self.level)

        self.time = 0
        self.physics_time = 0
        self.physics_dt = 1 / 60 
        pyglet.clock.schedule_interval(self.step, self.physics_dt)

    def step(self, dt):
        self.time += dt
        while self.physics_time + self.physics_dt <= self.time:
            self.physics_time += self.physics_dt
            self.camera.step(self.physics_dt)
            self.level.step(self.physics_dt)
 
            cannonball = self.level.actors.get('cannonball')
            if cannonball and cannonball.won:
                print 'You Win'
                self.on_close()
                break
            elif not cannonball:
                print 'Game Over'
                self.on_close()
                break

    def on_draw(self):
        r, g, b = self.level.background_color
        glClearColor(r, g, b, 1)
        self.clear()
        self.camera.draw()

    def on_close(self):
        self.close()

    def on_key_press(self, symbol, modifiers):
        if symbol == pyglet.window.key.ESCAPE:
            self.on_close()
        self.camera.on_key_press(symbol, modifiers)
        cannonball = self.level.actors.get('cannonball')
        if cannonball:
            cannonball.on_key_press(symbol, modifiers)

    def on_key_release(self, symbol, modifiers):
        self.camera.on_key_release(symbol, modifiers)
        cannonball = self.level.actors.get('cannonball')
        if cannonball:
            cannonball.on_key_release(symbol, modifiers)

    def create_cannonball(self, position):
        actor = Cannonball(self.level)
        actor.create_body(position)