def __init__(self, position, max_hp=30, hp=30, **extras): super(Player, self).__init__("player", position, max_hp, hp, PLAYER_BASE_DEF, PLAYER_BASE_POW) self.inventory = [] self.fov = Fov(MAP_WIDTH, MAP_HEIGHT)
class Player(Creature): def __init__(self, position, max_hp=30, hp=30, **extras): super(Player, self).__init__("player", position, max_hp, hp, PLAYER_BASE_DEF, PLAYER_BASE_POW) self.inventory = [] self.fov = Fov(MAP_WIDTH, MAP_HEIGHT) def __key_is_used(self, key): for item in self.inventory: if item.key == key: return True return False def __get_unused_key(self): for key in ITEM_KEYS: if not self.__key_is_used(key): return key def add_item(self, item): if len(self.inventory) >= len(ITEM_KEYS): return False item.key = self.__get_unused_key() self.inventory.append(item) self.inventory.sort(key=lambda i: i.key) return True def get_item(self, key): for item in self.inventory: if item.key == key: return item def remove_item(self, item): self.inventory.remove(item) def is_in_fov(self, pos): return self.fov.contains((pos[0], pos[1])) def update_fov(self, blocks_visibility): self.fov.update(self.position, TORCH_RADIUS, blocks_visibility) def json(self): result = super(Player, self).json() result["items"] = [i.json() for i in self.inventory] weapon_json = lambda x: x.json() if x else None result["weapon_right"] = weapon_json(self.weapon_right) result["weapon_left"] = weapon_json(self.weapon_left) result["armour"] = weapon_json(self.armour) return result @staticmethod def fromJson(dic, **extras): player = Player(**dic) player.inventory = [ObjectModel(**i) for i in dic["items"]] wear = lambda c, x: c(**dic[x]) if dic[x] else None player.weapon_left = wear(Weapon, "weapon_left") player.weapon_right = wear(Weapon, "weapon_right") player.armour = wear(Armour, "armour") return player