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()
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
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