Esempio n. 1
0
    def scale(self, x, y):

        self.size = self.size*Vector2(x*CONST.scale_speed+1,
                                      y*CONST.scale_speed+1)
        """update body"""
        if self.body:
            physics_manager.remove_body(self.body)
            self.body = physics_manager.add_body(self.not_rot_pos, BodyType.static)
            physics_manager.add_box(self.body,Vector2(),self.size/2)
        self.update_rect()
Esempio n. 2
0
    def update_state(self):
        player_pos = self.player.pos + self.player.screen_relative_pos * engine.screen_size

        if player_pos.x > 250 and not self.dialog:
            snd_manager.set_playlist(["data/music/intro_BOSS1_gbjam.ogg","data/music/BOSS1_gbjam.ogg"])
            self.dialog = 1
            engine.show_dialog = 1
            engine.textbox.set_text("General Meow", "We meet again, Fury")
            level_manager.level.lock = True
        if self.dialog == 1 and engine.textbox.finished:
            if input_manager.get_button('A') or input_manager.get_button('B'):
                engine.textbox.set_text("Fury", "This time you will lose more than one eye")
                self.dialog = 2
        if self.dialog == 2 and engine.textbox.finished:
            if input_manager.get_button('A') or input_manager.get_button('B'):
                engine.textbox.set_text("General Meow", "I won't, I have a panzer now")
                self.dialog = 3
        if not self.boss_fight and self.dialog == 3 and engine.textbox.finished:
            if input_manager.get_button('A') or input_manager.get_button('B'):
                self.boss_fight = True
                self.direction = 1
                engine.show_dialog = False
                level_manager.level.lock = False
                self.player.screen_relative_pos = Vector2(0.35, self.player.screen_relative_pos.y)
                self.player.pos = player_pos-self.player.screen_relative_pos*engine.screen_size
        if self.boss_fight:
            self.state = 'backward'

            set_value("boss_limit", [50,595])

        if self.state == 'idle' or self.state == 'forward' or self.state == 'backward':
            if self.index == 0 or self.index == 4 or self.index == 5:
                self.animation_delta = Vector2(0,0)
            elif self.index == 2 or self.index == 3:
                self.animation_delta = Vector2(0,2)
            elif self.index == 1:
                self.animation_delta = Vector2(0,1)

        if self.life != 0:
            self.obj.pos = physics_manager.get_body_position(self.obj.body)-self.obj.size/2
        if self.obj.show:
            img_manager.show_image(self.boss_img, engine.screen, self.obj.pos-level_manager.level.screen_pos+self.boss_delta+self.animation_delta)

        if self.state == 'backward' or self.state == 'forward':
            physics_manager.move(self.obj.body,vx=self.direction*2.5)

        if self.boss_fight:
            life_bar = sfml.RectangleShape()
            life_bar.position = (165-self.life*4,0)
            life_bar.size = (self.life*4, 10)
            life_bar.fill_color = sfml.Color.BLACK
            img_manager.buffer.draw(life_bar)
            if self.direction == -1 and (self.obj.pos+self.obj.size).x<get_value('boss_limit')[0]:
                self.state = 'backward'
                self.direction = 1
            elif self.direction == 1 and self.obj.pos.x > get_value('boss_limit')[1]:
                self.state = 'forward'
                self.direction = -1

        for event in physics_events:
            if ((event.a.userData == 5 and event.b.userData == 16) or
                    (event.b.userData == 5 and event.a.userData == 16)):

                self.in_area_left = event.begin
            elif ((event.b.userData == 6 and event.a.userData == 16) or
                    (event.a.userData == 6 and event.b.userData == 16)):
                self.in_area_right = event.begin

        if self.in_area_left:
            if not self.player.anim.direction and self.player.anim.attacking > 1 and not self.invincibility:
                self.touched()
                self.life -= 1
                self.invincibility = 20
        if self.in_area_right:
            if self.player.anim.direction and self.player.anim.attacking > 1 and not self.invincibility:
                self.touched()
                self.life -= 1
                self.invincibility = 20

        if self.life == 0 and self.dialog == 3:
            self.invincibility = 1000
            physics_manager.remove_body(self.obj.body)
            self.dialog = 4
            engine.show_dialog = 1
            engine.textbox.set_text("General Meow", "Nein Nein Nein Nein Nein Nein Nein Nein Nein")
            level_manager.level.lock = True

        if self.dialog == 4 and engine.textbox.finished:

            if input_manager.get_button('A') or input_manager.get_button('B'):
                self.obj.remove = True
                engine.textbox.set_text("Fury", "I can say nine nine times too")
                self.dialog = 5
                self.player.anim.move_deal = True
        if self.invincibility > 0:
            if (self.invincibility %20) > 10:
                self.obj.show = False
            else:
                self.obj.show = True
            self.invincibility -= 1
Esempio n. 3
0
    def update_state(self):
        if not self.obj.move:
            self.anim_freq = 2
        if self.nmb == 0:
            self.nmb = self.obj.body.fixtures[0].userData
            self.current_bullet = self.nmb + 1

        player_pos = level_manager.level.player.pos + level_manager.level.player.screen_relative_pos*engine.screen_size
        if self.obj.pos.x+engine.screen_size.x > player_pos.x > self.obj.pos.x-engine.screen_size.x:
            self.active = True
        else:
            self.active = False

        if self.active and not self.obj.move and self.death == -1:
            if self.bullet_time == 0:
                snd_manager.play_sound(self.shoot_sound)
                self.state = 'attack'
                self.bullets.append(Bullet(
                                            pos=self.obj.pos+Vector2(-10,17),
                                            size=Vector2(16,16),
                                            userData=self.current_bullet,
                                            speed=Vector2(self.direction*5,0)))
                self.current_bullet += 1
                if self.current_bullet == self.nmb + 10:
                    self.current_bullet = self.nmb + 1
                self.bullet_time = self.bullet_frequency
            else:
                self.bullet_time -= 1
                if self.state == 'attack' and self.bullet_time < self.bullet_frequency-3*self.anim_freq:
                    self.state = 'still'
            remove_bullet = []
            for b in self.bullets:
                b.loop(engine.screen)
                if not (b.pos.x+engine.screen_size.x > player_pos.x > b.pos.x-engine.screen_size.x):
                    remove_bullet.append(b)
            for b in remove_bullet:
                self.bullets.remove(b)
            del remove_bullet[:]


        if self.death == -1:
            self.obj.pos = physics_manager.get_body_position(self.obj.body)-self.obj.size/2






        for event in physics_events:
            if ((event.a.userData == 5 and event.b.userData == self.nmb) or\
                    (event.b.userData == 5 and event.a.userData == self.nmb)):

                self.in_area_left = event.begin
            elif (event.b.userData == 6 and event.a.userData == self.nmb) or\
                    (event.a.userData == 6 and event.b.userData == self.nmb):
                self.in_area_right = event.begin
            elif self.obj.move and (( 15 > event.a.userData >= 11 and event.b.userData == self.nmb) or\
                ( 15 > event.b.userData >= 11 and event.a.userData == self.nmb)):
                if event.begin:
                    self.direction = - self.direction

        if self.obj.move and self.death == -1:
            physics_manager.move(self.obj.body, vx=self.direction*3)
            self.state = 'move'

        if self.direction == -1:
            self.obj.flip = True
        else:
            self.obj.flip = False

        if self.death == -1:
            if self.in_area_left:
                if not self.player.anim.direction and self.player.anim.attacking>1:
                    self.death = 60
                    physics_manager.remove_body(self.obj.body)
            if self.in_area_right:
                if self.player.anim.direction and self.player.anim.attacking > 1:
                    self.death = 60
                    physics_manager.remove_body(self.obj.body)

        if self.death > 0:
            self.state = 'hit'
            self.death -= 1
            if self.death % 20 > 10:
                self.obj.show = False
            else:
                self.obj.show = True


        if self.death == 0:
            self.obj.remove = True