def _logic2(self, delta): self._gun.update(delta) if self._num_shot >= 3: self._reload_time += delta if self._reload_time > 2: self._num_shot = 0 self._reload_time = 0 else: RayManager.ray_cast(self.pos, GameManager.instance().get_player_pos(), self.call_back) if self._visible_player: v = self.pos - GameManager.instance().get_player_pos() self.move(-v.normalized()) self._visible_player = False return # пускает луч от себя к игроку, чтобы проверить виден ли игрок RayManager.ray_cast(self.pos, GameManager.instance().get_player_pos(), self.call_back) if self._visible_player: v = GameManager.instance().get_player_pos() v = [v[0] - self.pos[0], v[1] - self.pos[1]] self.body.angle = math.atan2(v[1], v[0]) dx = math.cos(self.body.angle) dy = math.sin(self.body.angle) if self._gun.shot([self.pos[0] + 30 * dx, self.pos[1] + 30 * dy], [dx * 500, dy * 500]): self._visible_player = False self._num_shot += 1
def get_bullet(self, n=1): if n > 1: bullets = [None] * n for i in range(n): b = self.bullet_pool.obtain() b.revive() bullets[i] = b GameManager.instance().add_actor(bullets) return bullets else: b = self.bullet_pool.obtain() b.revive() GameManager.instance().add_actor(b) return b
def ray_cast(start, end, callback): s = GameManager.instance().get_space().segment_query( start, end, 0, pymunk.ShapeFilter(mask=pymunk.ShapeFilter.ALL_MASKS)) for shape in s: if not callback(shape[0].body.data): return
def update(self, delta: float): self._time += delta if self._time >= 5: self._time = 0 self._num_task = random.randint(0, 2) if self._num_task == 0: self._set_gun(DefaultGun(random.randint(0, 1))) if self._num_task == 1: self._set_gun(TripleGun(random.randint(0, 1))) self._gun.reload_time = 0.5 if self._num_task == 2: self._set_gun( Explosion(ct=collision_type[CollisionType.EnemyBullet])) self._gun.reload_time = 0.1 self._logic[self._num_task](delta) if self.life <= 0: GameManager.instance().remove_boss(self)
def update(self, delta: float): self._gun.update(delta) # пускает луч от себя к игроку, чтобы проверить виден ли игрок RayManager.ray_cast(self.pos, GameManager.instance().get_player_pos(), self.call_back) if self._visible_player: v = GameManager.instance().get_player_pos() v = [v[0] - self.pos[0], v[1] - self.pos[1]] self.body.angle = math.atan2(v[1], v[0]) dx = math.cos(self.body.angle) dy = math.sin(self.body.angle) self._gun.shot([self.pos[0] + 30 * dx, self.pos[1] + 30 * dy], [dx * 500, dy * 500]) self._visible_player = False if self.life <= 0: GameManager.instance().remove_actor(self)
def __init__(self): AudioManager.instance().set_music( 'resources/sounds/peacefullmusic.mp3') self._level = FileName.Level_0 self._world = World() self._factory = DemoFactory(self._world, self._level) self._player = self._factory.create_player() GameManager.instance().create(self._world, self._player) self._factory.create() self._screen_h = pygame.display.Info().current_h self._render = WorldRender() self._camera = Camera(Core.instance().info().current_w, self._screen_h) self._render.set_camera(self._camera) self._direction = 0 self._zoom = 0 # test PlayerUI self._playerUI = PlayerUI(self._player)
def ray_cast(start, end, callback): """ :param start: начальная точка отрезка :param end: конец отрезка :param callback: метод обратного вызова, если возвращает True, то продолжает луч, иначе обрывает его """ s = GameManager.instance().get_space().segment_query( start, end, 0, pymunk.ShapeFilter(mask=pymunk.ShapeFilter.ALL_MASKS)) for shape in s: if not callback(shape[0].body.data): return
def __init__(self): self._debug = FileManager.instance().get(FileName.Setting, 'debug') self._walls_debug = FileManager.instance().get(FileName.Setting, 'wall_debug') self._start = None self._world = World(debug=True) self._level = FileName.Level_0 self._factory = DebugFactory(self._world, self._level, self._walls_debug) GameManager.instance().create(self._world, self._factory.create_player()) self._factory.create() self._screen_w = pygame.display.Info().current_w self._screen_h = pygame.display.Info().current_h self._zoom = 0 self._render = WorldRender() self._camera = Camera(self._screen_w, self._screen_h) self._render.set_camera(self._camera) self._direction = 0 self._class = StupidEnemy self._target = None
def _mouse(self, event): if event.type == pygame.MOUSEBUTTONDOWN: if event.button == 3 and self._walls_debug: s = self._world.get_space().point_query( self.get_point(), 10, pymunk.ShapeFilter(mask=pymunk.ShapeFilter.ALL_MASKS)) if len(s) > 0: s = s[-1][0].body.data if isinstance(s, Wall): self._world.remove_actor(s) if event.button == 1: if self._walls_debug: s = self._world.get_space().point_query( self.get_point(), 10, pymunk.ShapeFilter(mask=pymunk.ShapeFilter.ALL_MASKS)) if len(s) == 0: return if self._start is None: self._start = s[0][0] else: end = s[0][0] x1 = min(self._start.body.position[0], end.body.position[0]) y1 = min(self._start.body.position[1], end.body.position[1]) x2 = max(self._start.body.position[0], end.body.position[0]) y2 = max(self._start.body.position[1], end.body.position[1]) v = ((x1 - 5, y1 - 5), (x1 - 5, y2 + 5), (x2 + 5, y2 + 5), (x2 + 5, y1 - 5)) GameManager.instance().add_actor( Wall((x1 + x2) / 2, (y1 + y2) / 2, Structure.Polygon, Actor.center(v))) self._start = None else: x, y = self.get_point() s = self._world.get_space().point_query( self.get_point(), 10, pymunk.ShapeFilter(mask=pymunk.ShapeFilter.ALL_MASKS)) if len(s) > 0: s = s[0][0].body.data if not isinstance(s, Wall): self._world.remove_actor(s) else: self._target = None if self._class == SetterItem: self._target = self._class(x, y) GameManager.instance().add_actor(self._target) else: GameManager.instance().add_actor(self._class(x, y))
def _logic3(self, delta): self._gun.update(delta) if self._num_shot >= 20: self._reload_time += delta if self._reload_time > 4: self._num_shot = 0 self._reload_time = 0 else: return RayManager.ray_cast(self.pos, GameManager.instance().get_player_pos(), self.call_back) if self._visible_player: if self._gun.shot([self.pos[0], self.pos[1]], [ math.cos(self._num_shot / 10) * 500, math.sin(self._num_shot / 10) * 500 ]): self._num_shot += 1 self._visible_player = False
def collision(self, actor=None): if isinstance(actor, Player) and not isinstance(actor, Bullet): actor.gun = DefaultGun() GameManager.instance().remove_actor(self)
def collision(self, actor=None): if isinstance(actor, Player) and not isinstance(actor, Bullet): # уставить тип пули игроку/ его оружию actor.changeGun(bullet=1) GameManager.instance().remove_actor(self)
def collision(self, actor=None): if isinstance(actor, Dynamic): effect = BoostEffect(actor) actor.add_effect(effect) GameManager.instance().remove_actor(self) return True
def collision(self, actor=None): if isinstance(actor, Dynamic) and not isinstance(actor, Bullet): GameManager.instance().remove_actor(self)
def update(self, delta: float): if self.life <= 0: GameManager.instance().remove_actor(self)
def update(self, delta: float): if self.life <= 0: if isinstance(self.gun, Explosion): self.gun.shot(self.pos, [500, 0]) GameManager.instance().remove_actor(self)
def collision(self, actor=None): if isinstance(actor, Player) and not isinstance(actor, Bullet): actor.changeGun(gun=1) GameManager.instance().remove_actor(self)
def reset(self): GameManager.instance().remove_actor(self)