From 53c86cb2dc77398db6f3ae6c0609faea5831304e Mon Sep 17 00:00:00 2001 From: oclaim Date: Fri, 4 Jul 2025 20:00:32 -0400 Subject: [PATCH] Solved a missing dependancy --- src/NoPELib/expansionsLib.py | 83 +++++++++++++++++++++++++++++++++- src/NoPELib/player_settings.py | 1 - 2 files changed, 82 insertions(+), 2 deletions(-) diff --git a/src/NoPELib/expansionsLib.py b/src/NoPELib/expansionsLib.py index 20eee28..bd60c4f 100644 --- a/src/NoPELib/expansionsLib.py +++ b/src/NoPELib/expansionsLib.py @@ -1,7 +1,88 @@ """ """ -from .player_settings import Expansion +import abc +from typing import TYPE_CHECKING + +if TYPE_CHECKING: + from NoPELib.player_settings import ExpansionsManager + + +class Expansion: + """ + A meta class implementation meant to describe how to interact with any kind + of expansions. + + Attributes: + players (tuple of str): + tags (tuple of flag): + + Methods: + step: + reset: + close: + + Signals: + onError: + """ + + def __init__(self, ID: str, expansionsManager: ExpansionsManager): + """ + Initialise the creation of an expansion and raise an error if not + available. + """ + self._ID = ID + self._manager = expansionsManager + self.onError = Hook() + + @property + def config(self): + return copy.deepcopy(self._manager.config[self._ID]["config"]) + + @property + def players(self): + """ Players that have access to this expansion. """ + return self._manager.config[self._ID]["players"] + + @players.setter + def players(self, newPlayers): + """ Players that have access to this expansion. """ + self._manager.config[self._ID]["players"] = tuple(newPlayers) + self._manager.expansionPlayersChanged(self._ID) + + @players.deleter + def players(self): + self._manager.config[self._ID]["players"] = () + self._manager.expansionPlayersChanged(self._ID) + + @property + def tags(self): + """ Players that have access to this expansion. """ + return self._manager.config[self._ID]["tags"] + + @tags.setter + def tags(self, newPlayers): + """ Players that have access to this expansion. """ + self._manager.config[self._ID]["tags"] = tuple(newPlayers) + + @tags.deleter + def tags(self): + self._manager.config[self._ID]["tags"] = () + + @abc.abstractmethod + def step(self, action): + """ + Call close if an error is thrown + """ + raise NotImplementedError + + @abc.abstractmethod + def reset(self): + raise NotImplementedError + + @abc.abstractmethod + def close(self): + raise NotImplementedError class serialShocker(Expansion): diff --git a/src/NoPELib/player_settings.py b/src/NoPELib/player_settings.py index a52af93..515462a 100644 --- a/src/NoPELib/player_settings.py +++ b/src/NoPELib/player_settings.py @@ -2,7 +2,6 @@ """ -import abc import copy import json import logging