Ejemplo n.º 1
0
class MiniGrill:
    def __init__(self):
        self.image = image.load(data_file('grill.png'))
        self.rect = Rect(500, 250, self.image)

        window.game_window.push_handlers(self.on_mouse_press)
        window.game_window.push_handlers(self.on_mouse_motion)

        self.highlighted = False

        self.active = False

    def on_mouse_motion(self, x, y, dx, dy):
        if self.rect.collide_point(x, y):
            self.highlighted = True
        else:
            self.highlighted = False

    def on_mouse_press(self, x, y, button, modifiers):
        if self.rect.collide_point(x, y):
            self.active = True

    def draw(self):
        if self.highlighted:
            glColor4f(0.5, 0.1, 1, 1)
        else:
            glColor4f(1, 1, 1, 1)

        self.image.blit(*self.rect.bottomleft)

        glColor4f(1, 1, 1, 1)
Ejemplo n.º 2
0
class Beef(GrillObject):
    def __init__(self):
        GrillObject.__init__(self)
        self.image = image.load(data_file('beef.png'))
        self.rect = Rect(520, 230, self.image)

        self.cooking = False

        self.reset()

    def reset(self):
        GrillObject.reset(self)
        self.cooking_time = 15
        self.red = 1
        self.brown_time = 3
        self.cooked = False
        self.burnt = False
        self.rect.bottomleft = (580, 230)

    def handler(self, pos):
        if self.rect.collide_point(*pos):
            self.set_active()
            self.cooking = False
            self.highlighted = False
            return True
        return False

    def set_active(self):
        GrillObject.set_active(self)
        events.Fire('BeefTaken')
        #print "beef taken"

    def set_inactive(self, pos):
        GrillObject.set_inactive(self, pos)
        events.Fire('BeefDropped')
        #print "beef dropped"

    def update(self, tick):
        if self.cooking:
            self.brown_time -= tick
            if self.brown_time < 0:
                self.brown_time = 3
                self.red -= 0.1

            self.cooking_time -= tick

            if self.cooking_time < 0:
                if not self.cooked:
                    self.cooked = True
                    events.Fire('BeefCooked')
                    events.Fire('NewHint', random.choice(COOKED_PHRASES))
                elif self.cooking_time < -15 and not self.burnt:
                    events.Fire('BeefBurnt')
                    events.Fire('NewHint', random.choice(BURN_PHRASES))
                    self.burnt = True

    def draw(self):
        if self.highlighted:
            glColor4f(0.5, 0.1, 1, 1)
        else:
            glColor4f(self.red, self.red, self.red, 1)

        self.image.blit(*self.rect.bottomleft)

        glColor4f(1, 1, 1, 1)

    def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers):
        if self.active:
            self.rect.center = (x, y)
Ejemplo n.º 3
0
class Grill:
    def __init__(self):
        self.image = image.load(data_file('biggrill.png'))
        self.beef = Beef()
        self.spritzer = Spritzer()
        self.table = Table()
        self.exit = Exit()

        self.rect = Rect(150, 300, 300, 200)

        self.flareups = []
        self.flareup_range = (10, 50)
        self.flareup_counter = randint(*self.flareup_range) / 10.0

        window.game_window.push_handlers(self.on_mouse_press)
        window.game_window.push_handlers(self.on_mouse_release)
        window.game_window.push_handlers(self.on_mouse_motion)

        #events.AddListener(self)

        self.active = False
        self.beef_hint_done = False
        self.flareup_hint_done = False

    def update(self, tick):
        self.beef.update(tick)
        if self.beef.cooking:
            self.flareup_counter -= tick
            #print self.flareup_counter
            if self.flareup_counter <= 0:
                if len(self.flareups) < 2:
                    if not self.flareup_hint_done:
                        events.Fire('NewHint',
                            'I can put out flare ups with the spritzer')
                        self.flareup_hint_done = True
                        #print "flare ups hint"
                    self.flareups.append(FlareUp())
                    self.flareup_counter = randint(*self.flareup_range) / 10.0
                    #print "flareup"
                    events.Fire('FlareUp')

        if self.beef.burnt:
            self.active = False

        self.spritzer.update(tick)
        for fire in self.flareups:
            fire.update(tick)

    def draw(self):
        self.image.blit(120, 100)

        self.exit.draw()
        self.table.draw()

        #self.draw_rect()

        self.beef.draw()
        for fire in self.flareups:
            fire.draw()

        self.spritzer.draw()

    def check_flareups(self, x, y):
        for fire in self.flareups:
            #x += self.spritzer.rect.width/2
            #y += self.spritzer.rect.height/2
            rect_x = x - fire.rect.x - fire.rect.width/2
            rect_y = y + self.spritzer.rect.height/2 - fire.rect.y 

            if rect_x < 100 and abs(rect_y) < 40:
                #print "hit fire"
                fire.lives -= 1
                if fire.lives <= 0:
                    self.flareups.remove(fire)
                break

    def on_mouse_press(self, x, y, button, modifiers):
        if not self.active:
            return

        if self.spritzer.active:
            if self.table.rect.collide_point(x, y):
                self.spritzer.set_inactive((x, y))
                return
            #print "spritz"
            self.spritzer.spritz((x, y))
            events.Fire('Spritz')

            self.check_flareups(x, y)

            return

        if self.exit.rect.collide_point(x, y):
            self.active = False

        if self.spritzer.handler((x, y)):
            return
        if self.beef.handler((x, y)):
            return

    def on_mouse_release(self, x, y, button, modifiers):
        if self.beef.active:
            self.beef.set_inactive((x, y))
            if self.rect.collide_point(self.beef.rect.center):
                events.Fire('BeefCooking')
                self.beef.cooking = True
                #print "cookin'!"

    def on_mouse_motion(self, x, y, dx, dy):
        if not self.beef_hint_done and self.active:
            events.Fire('NewHint', 'I need to put the steak on the grill.')
            self.beef_hint_done = True

    def draw_rect(self):
        glColor4f(0, 0, 1, .5)

        glBegin(GL_POLYGON)
        glVertex2d(*self.rect.bottomleft)
        glVertex2d(*self.rect.topleft)
        glVertex2d(*self.rect.topright)
        glVertex2d(*self.rect.bottomright)
        glEnd()

        glColor4f(1, 1, 1, 1)
Ejemplo n.º 4
0
class GarbageCan:
    def __init__(self):
        self.image_opened = image.load(data_file('garbagecan-open.png'))
        self.image_closed = image.load(data_file('garbagecan-closed.png'))
        self.image_lid = image.load(data_file('garbagecan-lid.png'))

        self.image_opened.anchor_x = self.image_opened.width/2
        self.image_opened.anchor_y = self.image_opened.height/2
        self.image_closed.anchor_x = self.image_opened.width/2
        self.image_closed.anchor_y = self.image_opened.height/2

        self.candidateLeaves = {}

        self.opened = True
        self.lid_active = False
        self.can_active = False
        self.fallen = False
        self.can_highlighted = False
        self.lid_highlighted = True

        self.can_rect = Rect(0, 0, self.image_closed)
        self.can_rect.center = (80, 90)

        self.can_sprite = Sprite(self.image_opened)
        self.can_sprite.set_position(self.can_rect.x, self.can_rect.y)

        self.lid_rect = Rect(20, 40, self.image_lid)

        window.game_window.push_handlers(self.on_mouse_release)
        window.game_window.push_handlers(self.on_mouse_press)
        window.game_window.push_handlers(self.on_mouse_drag)
        window.game_window.push_handlers(self.on_mouse_motion)

        events.AddListener(self)

    def update(self, timechange):
        pass

    def draw(self):
        if not self.can_active:
            if self.can_highlighted:
                self.can_sprite.color = (255, 20, 25)
            else:
                self.can_sprite.color = (255, 255, 255)
        else:
            self.can_sprite.color = (255, 255, 255)

        self.can_sprite.draw()

        glColor4f(1, 1, 1, 1)

        if not self.lid_active:
            if self.lid_highlighted:
                glColor4f(1, 0.1, 0.1, 1)
            else:
                glColor4f(1, 1, 1, 1)
        
        if self.opened:
            self.image_lid.blit(*self.lid_rect.bottomleft)

        glColor4f(1, 1, 1, 1)

    def on_mouse_press(self, x, y, button, modifiers):
        if self.opened and self.lid_rect.collide_point(x, y):
            self.set_lid_active()
        elif self.collides(x, y):
            self.fallen = False
            self.set_can_active()
            self.can_sprite.rotation = 0

            if self.opened:
                self.can_sprite.image = self.image_opened
            else:
                self.can_sprite.image = self.image_closed

    def set_can_active(self):
        window.game_window.set_mouse_visible(False)
        self.can_active = True
        events.Fire('CanTaken')

    def set_lid_active(self):
        window.game_window.set_mouse_visible(False)
        self.lid_active = True
        events.Fire('LidTaken')

    def collides(self, x,y):
        cs = self.can_sprite
        return (x > cs.x - cs.image.width/2 
            and x < cs.x + cs.image.width/2
            and y > cs.y - cs.image.height/2
            and y < cs.y + cs.image.height/2 )

    def on_mouse_release(self, x, y, button, modifiers):
        window.game_window.set_mouse_visible(True)
        #print "x=%d y=%d" % (x, y)
        if self.lid_active:
            if self.collides(x, y):
                self.can_sprite.image = self.image_closed
                self.opened = False
                events.Fire('LidClosed')
            else:
                self.lid_rect.x = x
                self.lid_rect.y = y
                events.Fire('LidDropped')

            self.lid_active = False

        elif self.can_active:
            self.can_sprite.rotation = 0
            #self.can_sprite.set_position(x,y)

            self.can_active = False
            events.Fire('CanDropped')

    def on_mouse_motion(self, x, y, dx, dy):
        if self.collides(x, y):
            self.can_highlighted = True
        else:
            self.can_highlighted = False

        if self.lid_rect.collide_point(x, y):
            self.lid_highlighted = True
        else:
            self.lid_highlighted = False

    def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers):
        if self.can_active:
            self.can_sprite.x = x
            self.can_sprite.y = y
            #self.can_rect.centerx = x
            #self.can_rect.centery = y
            #self.can_sprite.set_position(self.can_rect.x, self.can_rect.y)

            dist = math.sqrt(abs(dx*dx + dy*dy))
            self.can_sprite.rotation = dx / 10.0 * 45

            if dist > 10:
                self.fallen = True
                self.can_active = False
                if dx > 0:
                    self.can_sprite.rotation = 90
                else:
                    self.can_sprite.rotation = -90

                events.Fire('CanTipped')

                if not self.opened:
                    self.opened = True
                    self.can_sprite.image = self.image_opened
                    self.lid_rect.bottomleft = self.can_rect.bottomleft
                    self.lid_rect.x += dx * 5
                    self.lid_rect.y += dy * 5

            for leaf in self.candidateLeaves:
                if self.collides(leaf.x, leaf.y):
                    leaf.die()

        elif self.lid_active:
            self.lid_rect.center = (x, y)

    def On_LeafSweptOff(self, leaf):
        self.candidateLeaves[leaf] = 1

    def On_LeafDeath(self, leaf):
        if leaf in self.candidateLeaves:
            del self.candidateLeaves[leaf]