from serializable import Serializable from dice import Dice from events.event import Event from entities.player import Player from entities.npc import NPC from items.item import Item class Game(Serializable): def __init__(self, seed:int=42): self.active_players:list[Player] = [] self.active_npcs:list[NPC] = [] self.active_items:list[Item] = [] self.events:list[Event] = [] def get_player(self, player_id:str): for player in self.active_players: if player.id == player_id: return player raise ReferenceError(f"The player #{player_id} doesn't exist!") def get_npc(self, npc_id:str): for npc in self.active_npcs: if npc.id == npc_id: return npc raise ReferenceError(f"The npc #{npc_id} doesn't exist!") def get_item(self, item_id:str): for item in self.active_items: if item.id == item_id: return item raise ReferenceError(f"The item #{item_id} doesn't exist!") def get_current_event(self): idx = len(self.events) - 1 if idx < 0: raise IndexError("There is no event yet, you should create one!") return self.events[idx] def add_event(self, new_event:Event): self.events.append(new_event) #TODO: Add State Summary as Resource?