Example #1
0
 def move(self, pos: Vec2):
     for _pos in (Vec2(pos.x, 0), Vec2(0, pos.y)):
         self.pos += _pos  # Add collision check
         if self.activity:
             if self.activity.is_collide_any(self):
                 self.pos -= _pos
     self.__modified__ = True
Example #2
0
def spritefrom(obj: Dict) -> Union[Sprite, TextSprite]:
    if obj['type'] == 'GameObject':
        return Sprite(pos=Vec2(obj['pos']['x'], obj['pos']['y']),
                      width=obj['width'],
                      height=obj['height'],
                      color=obj['color'])
    elif obj['type'] == 'TextObject':
        return TextSprite(pos=Vec2(obj['pos']['x'], obj['pos']['y']),
                          width=obj['width'],
                          height=obj['height'],
                          color=obj['color'],
                          text=obj['text'])
Example #3
0
    def run(self):
        pg.init()
        display = pg.display.set_mode(self._winsize)
        clock = pg.time.Clock()
        camera = Camera(Vec2(0, 0), self._winsize)

        _running = True
        while _running:
            for event in pg.event.get():
                if event.type == pg.QUIT:
                    _running = False
            display.fill((0, 0, 0))

            self._client.pressed['w'] = pg.key.get_pressed()[pg.K_w]
            self._client.pressed['a'] = pg.key.get_pressed()[pg.K_a]
            self._client.pressed['s'] = pg.key.get_pressed()[pg.K_s]
            self._client.pressed['d'] = pg.key.get_pressed()[pg.K_d]
            self._client.pressed['j'] = pg.key.get_pressed()[pg.K_j]
            self._client.pressed['k'] = pg.key.get_pressed()[pg.K_k]
            self._client.update()

            for oid, obj in self._client.modified_objects.copy().items():
                if oid not in self._game_sprites:
                    self._game_sprites[oid] = spritefrom(obj)
                    self._game_sprites[oid].add(self._game_sprites_group)
                else:
                    sprite = spritefrom(obj)
                    self._game_sprites[oid].sync_with(sprite)
                del self._client.modified_objects[oid]

            for oid in self._game_sprites:
                self._game_sprites[oid].tracking = False

            for oid, obj in self._client.objects.items():
                self._game_sprites[oid].tracking = True

            for oid in self._game_sprites:
                if not self._game_sprites[oid].tracking:
                    self._game_sprites[oid].kill()

            client_object = self._client.objects.get(self._client.client_object_id)
            if client_object:
                camera.center = Vec2(client_object['pos']['x'], client_object['pos']['y'])
            camera.update(self._game_sprites.values())

            self._ui_sprites_group.draw(display)
            self._game_sprites_group.draw(display)
            clock.tick(60)
            pg.display.flip()

        sys.exit(0)
Example #4
0
 def update_for_input(self):
     for client in self._clients.values():
         if client.object:
             movepos = Vec2(0, 0)
             if client.pressed['w']:
                 movepos += Vec2(0, -1)
             if client.pressed['a']:
                 movepos += Vec2(-1, 0)
             if client.pressed['s']:
                 movepos += Vec2(0, 1)
             if client.pressed['d']:
                 movepos += Vec2(1, 0)
             if client.pressed['j']:
                 self.trytobuild(client.object)
             if client.pressed['k']:
                 self.trytodestroy(client.object)
             client.object.move(movepos)
Example #5
0
 def load_objects(self, dump: List[Dict]):
     for obj in dump:
         if obj['type'] == 'GameObject':  # hmm players?
             gobj = GameObject(pos=Vec2(obj['pos']['x'], obj['pos']['y']),
                               width=obj['width'],
                               height=obj['height'],
                               color=obj['color'])
             self.add_object(gobj)
Example #6
0
 def __init__(self, player: PlayerObject):
     self.player = player
     self.offset = Vec2(0, -self.player.height)
     super().__init__(player.pos + self.offset,
                      self.player.width,
                      self.player.height,
                      color=self.BUILDABLE_COLOR,
                      collide=False)
     self.block = False
Example #7
0
 def move(self, pos: Vec2):
     toffset = Vec2(0, 0)
     super().move(pos)
     if pos.x > 0:
         toffset += Vec2(self.width, 0)
     if pos.x < 0:
         toffset += Vec2(-self.width, 0)
     if pos.y > 0:
         toffset += Vec2(0, self.height)
     if pos.y < 0:
         toffset += Vec2(0, -self.height)
     if toffset != Vec2(0, 0):
         self.targetobj.offset = toffset
     self.name.pos = self.pos + Vec2(0, -self.height)
Example #8
0
 def spawn_player(self, client_id, name):
     obj = PlayerObject(Vec2(0, 0), 10, 10, (255, 255, 0), name)
     self.add_object(obj)
     return obj
Example #9
0
 def center(self, value: Vec2):
     self.pos = value - Vec2(self._winsize[0] / 2, self._winsize[1] / 2)
Example #10
0
 def center(self):
     return self.pos + Vec2(self._winsize[0] / 2, self._winsize[1] / 2)