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
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'])
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)
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)
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)
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
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)
def spawn_player(self, client_id, name): obj = PlayerObject(Vec2(0, 0), 10, 10, (255, 255, 0), name) self.add_object(obj) return obj
def center(self, value: Vec2): self.pos = value - Vec2(self._winsize[0] / 2, self._winsize[1] / 2)
def center(self): return self.pos + Vec2(self._winsize[0] / 2, self._winsize[1] / 2)