Example #1
0
    def on_create(self, config):
        Activity.on_create(self, config)

        self.screen_size = pygame.display.get_surface().get_size()
        self.victory_anim = resources.get("goalani").get_new_handle()
        self.enemy_anim = resources.get("enemyani").get_new_handle()
        self.particle_limit = settings.get("particle_limit")
        self.particle_fps_limit = settings.get("particle_fps_limit")
        self.optimize_drawing = True
        
        self.segment_renderers = [
            SegmentRenderer(resources.get("woodtex"),11),
            SegmentRenderer(resources.get("oozetex"),11),            
            SegmentRenderer(resources.get("icetex"),11),
            SegmentRenderer(resources.get("voidtex"),11),
        ]
        self.spinner_renderers = [
            SpinnerRenderer(resources.get("spinner1")),
            SpinnerRenderer(resources.get("spinner2")),
            SpinnerRenderer(resources.get("spinner3")),
        ]
        
        self.levelnum = config["level"]
        self.filename = self.controller.level_path( config["level"])
        
        #if the next level does not exist just back out to the main menu
        try:
            self.level_elements = ET.parse( self.filename).getroot()
            self.reload_level()
        except IOError:
            self.finish()
Example #2
0
 def player_collide_with_sound(self, space, arbiter, *args, **kwargs):
     player, obj = arbiter.shapes
     player = player.body
     self.player_launchable = True        
     vel = player.velocity.get_length()
     self.make_particles( player.position, int(vel/20), PLAYER_PARTICLE_COLOR)
     self.player_impact = PLAYER_IMPACT_TIME
     if vel >= 75.0:
         snd = resources.get( random.choice(("squish1", "squish2", "squish3", "squish4")))
         if hasattr( obj, "material") and obj.material == 1:
                 snd = resources.get( random.choice(("bounce1","bounce2","bounce3","bounce4")))
         snd.play()        
     return True
Example #3
0
 def draw_statics(self, screen):
     screen.blit(resources.get("background"), (0,0))    
 
     #draw platform segments
     for s in self.segments:
         self.segment_renderers[s.material].draw( screen, s)
         
     #draw magnets
     baseimg = resources.get("magnet")
     for m in self.magnets:
         pos = pymunk.pygame_util.to_pygame( m.position, screen)
         img = pygame.transform.smoothscale( baseimg, (int(m.shape.radius*2), (int(m.shape.radius*2))))
         offset = Vec2d(img.get_width()/2, img.get_height()/2)
         screen.blit( img, pos-offset)            
Example #4
0
 def draw(self, screen):
     screen.blit(self.image, self.rect)
     if self.selected:
         img = resources.get("player")
         pos = self.rect.topleft
         pos = (pos[0] - img.get_width() - 10, pos[1])
         screen.blit(img, pos)
Example #5
0
 def player_enemy_collide(self, space, arbiter):
     player, enemy = arbiter.shapes
     self.player_launchable = True
     playerspeed = player.body.velocity.get_length()
     speeddiff = (player.body.velocity - enemy.body.velocity).get_length()
     if playerspeed > 350:# and speeddiff > 100:
         self.space.remove( enemy, enemy.body)
         self.enemies.remove( enemy.body)
         self.make_particles( self.player.position, 125, ENEMY_PARTICLE_COLOR)
         snd = resources.get("sheepdie")
         snd.play()
     else:
         self.make_particles( self.player.position, 125, PLAYER_PARTICLE_COLOR)
         self.kill_player()
     return False
Example #6
0
 def win_level(self):
     sz1 = 50
     sz2 = 30
     sz3 = 18
     wintexts = (
         [(sz1, "Good job"), (sz2, "Maybe try going outside some time")],
         [(sz1, "You won"), (sz2, "You want a trophy or something?")],
         [(sz1, "Good for you"), (sz2, "That was sarcasm by the way")],
         [(sz1, "You did it"), (sz2, "I could have done it faster")],
         [(sz1, "Wow"), (sz2, "A trained ape could have done better")],
         [(sz1, "Impressive"), (sz2, "But not as impressive as you think")],
     )
     addendum = [(sz3, "Press SPACE to continue")]
 
     self.game_mode = GAME_WON
     snd = resources.get("victory")
     snd.play()
     self.show_status_text( True, -1.0, random.choice( wintexts)+addendum)
Example #7
0
 def kill_player(self):
     sz1 = 50
     sz2 = 30
     sz3 = 18
     dietexts = (
         [(sz1, "You killed Bob"), (sz2, "I hope it was worth it")],
         [(sz1, "You killed Bob"), (sz2, "Just as I expected")],
         [(sz1, "You killed him!"), (sz2, "Do you feel like a man now?")],
         [(sz1, "Bob is dead!"), (sz2, "Way to go dumbass")],
         [(sz1, "How did you die there?"), (sz2, "Seriously!")],
         [(sz1, "Farewell Bob"), (sz2, "You will be missed")],
         [(sz1, "You suck"), (sz2, "Seriously what are you even doing?")],
     )    
     addendum = [(sz3, "Press Q to reload")]
 
     snd = resources.get( "playerdie")
     snd.play()
     self.space.remove( self.player, self.player.shape)
     self.player.dead = True
     self.game_mode = GAME_OVER
     self.show_status_text( True, -1.0, random.choice(dietexts)+addendum)
Example #8
0
 def draw(self, screen):
     screen.blit( resources.get("menubg"), (0,0))
     menu.MenuActivity.draw(self, screen)
Example #9
0
 def update_tut(self):
     self.img = pygame.Surface( (750,750), pygame.SRCALPHA)
     self.img = resources.get( self.script[self.panel][0]).copy()
     self.draw_text( self.img, self.script[self.panel][1][self.caption])
Example #10
0
    def draw(self, screen):
        Activity.draw(self, screen)
       
        if not self.complex_drawing:
            pymunk.pygame_util.draw( screen, self.space)
            for ff in self.forcefields:
                pygame.draw.line( screen, (255,255,255), pymunk.pygame_util.to_pygame( ff.center, screen), pymunk.pygame_util.to_pygame( ff.center+ff.fieldforce, screen))
                
            #draw gravity balls
            wavesize = 25
            begin = int(0.5*self.time*wavesize)%wavesize
            for g in self.gravballs:
                if not g.shutdown:
                    pos = pymunk.pygame_util.to_pygame( g.position, screen)
                    if g.strength < 0:
                        for r in xrange(begin, g.wellsize, wavesize):
                            if r > 0:
                                pygame.draw.circle( screen, (200,60,0), pos, r, 1)
                    else:
                        for r in xrange(wavesize-begin, g.wellsize, wavesize):
                            if r > 0:
                                pygame.draw.circle( screen, (100,0,120), pos, r, 1)                

        else:
            if self.optimize_drawing:
                screen.blit( self.static_img, (0,0))
            else:
                self.draw_statics(screen)            
        
            #draw gravity balls
            wavesize = 25
            begin = int(0.5*self.time*wavesize)%wavesize
            for g in self.gravballs:
                if not g.shutdown:
                    pos = pymunk.pygame_util.to_pygame( g.position, screen)
                    if g.strength < 0:
                        for r in xrange(begin, g.wellsize, wavesize):
                            if r > 0:
                                pygame.draw.circle( screen, (200,60,0), pos, r, 1)
                    else:
                        for r in xrange(wavesize-begin, g.wellsize, wavesize):
                            if r > 0:
                                pygame.draw.circle( screen, (200,0,240), pos, r, 1)                
        
            #draw forcefields
            img = resources.get("fieldbg")
            for f in self.forcefields:
                imgw = img.get_width()
                imgh = img.get_height()
                offset = (int(f.imgoffset[0])%imgw, int(f.imgoffset[1])%imgh)
                topleft = pymunk.pygame_util.to_pygame(f.topleft, screen)
                sub = screen.subsurface( (topleft[0], topleft[1], f.dimensions[0], f.dimensions[1]))
                for x in xrange( -imgw, int(f.dimensions[0])+imgw, imgw):
                    for y in xrange( -imgh, int(f.dimensions[1])+imgh, imgh):
                        sub.blit( img, (x+offset[0], y-offset[1])) 

            #draw spinners
            conversion = 360/(2*math.pi)
            gear = resources.get("spingear")
            for s in self.spinners:
                pos = Vec2d( pymunk.pygame_util.to_pygame( s.position, screen))
                angle = s.angle
                angle = int(angle*conversion)
                material = s.material
                scale = s.length/60.0
                self.spinner_renderers[s.material].draw( screen, angle, scale, pos)
                if s.mode == "drag":
                    img = pygame.transform.rotate( gear, angle)
                    offset = Vec2d(img.get_width()/2, img.get_height()/2)
                    screen.blit( img, pos-offset)
            
            #draw particles
            for p in self.particles:
                pos = pymunk.pygame_util.to_pygame( p.position, screen)
                pygame.draw.circle(screen, p.color, pos, 2)
            
            #draw victory locations
            baseimg = self.victory_anim.get_current_frame()
            for v in self.victories:
                pos = pymunk.pygame_util.to_pygame( v.topleft, screen)
                img = pygame.transform.scale( baseimg, v.dimensions.int_tuple)
                screen.blit( img, pos)
                
            #draw enemies
            baseimg = self.enemy_anim.get_current_frame()
            flipped = pygame.transform.flip( baseimg, True, False)
            for e in self.enemies:
                pos = pymunk.pygame_util.to_pygame( e.position, screen)
                if e.velocity[0] < 0:
                    screen.blit( baseimg, (pos[0]-baseimg.get_width()/2, pos[1]-baseimg.get_height()/2))
                else:
                    screen.blit( flipped, (pos[0]-baseimg.get_width()/2, pos[1]-baseimg.get_height()/2))

            #draw the player
            if not self.player.dead:
                if self.charging:
                    baseimg = resources.get("player_charging")
                else:
                    if self.player_impact > 0:
                        baseimg = resources.get("player_impact")
                    else:
                        baseimg = resources.get("player")
                    
                if self.player.facing == "left":
                    img = pygame.transform.flip( baseimg, True, False)
                else:
                    img = baseimg
                    
                pos = pymunk.pygame_util.to_pygame( self.player.position, screen)
                offset = Vec2d( img.get_width()/2, img.get_height()/2)
                screen.blit( img, pos-offset)
        
        '''draw the launch indicator if the player is charging up'''
        mousepos = Vec2d( pygame.mouse.get_pos())#mouse position in screen coordinates
        playerpos = pymunk.pygame_util.to_pygame( self.player.position, screen)#player pos in screen coords
        if self.charging:
            ratio = self.charge/MAXCHARGE
            mousevect = (mousepos-playerpos).normalized()
            finalpos = playerpos + mousevect*40
            
            r = int(ratio*LAUNCH_IND_LEN)
            for x in range(r,10,-3):
                pos = playerpos+mousevect*x
                pygame.draw.circle( screen, (255,255-x*2,0), pos.int_tuple, x/8)
                
        if self.status_img is not None:
            screen.blit( self.status_img, (0,int(self.status_offset)))