Beispiel #1
0
 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
Beispiel #2
0
 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
Beispiel #3
0
 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
Beispiel #4
0
 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)
Beispiel #5
0
 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)
Beispiel #6
0
    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)
Beispiel #7
0
 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
Beispiel #8
0
    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
Beispiel #9
0
    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))
Beispiel #10
0
 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
Beispiel #11
0
 def collision(self, actor=None):
     if isinstance(actor, Player) and not isinstance(actor, Bullet):
         actor.gun = DefaultGun()
         GameManager.instance().remove_actor(self)
Beispiel #12
0
 def collision(self, actor=None):
     if isinstance(actor, Player) and not isinstance(actor, Bullet):
         # уставить тип пули игроку/ его оружию
         actor.changeGun(bullet=1)
         GameManager.instance().remove_actor(self)
Beispiel #13
0
 def collision(self, actor=None):
     if isinstance(actor, Dynamic):
         effect = BoostEffect(actor)
         actor.add_effect(effect)
         GameManager.instance().remove_actor(self)
     return True
Beispiel #14
0
 def collision(self, actor=None):
     if isinstance(actor, Dynamic) and not isinstance(actor, Bullet):
         GameManager.instance().remove_actor(self)
Beispiel #15
0
 def update(self, delta: float):
     if self.life <= 0:
         GameManager.instance().remove_actor(self)
Beispiel #16
0
 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)
Beispiel #17
0
 def collision(self, actor=None):
     if isinstance(actor, Player) and not isinstance(actor, Bullet):
         actor.changeGun(gun=1)
         GameManager.instance().remove_actor(self)
Beispiel #18
0
 def reset(self):
     GameManager.instance().remove_actor(self)