diff --git a/src/objects/agent.py b/src/objects/agent/agent.py similarity index 86% rename from src/objects/agent.py rename to src/objects/agent/agent.py index 010e302..07c64bb 100644 --- a/src/objects/agent.py +++ b/src/objects/agent/agent.py @@ -9,10 +9,9 @@ from src.common.point import Point from src.objects.object import Object from src.common.serializable import Properties +from src.objects.agent.stats_manager import StatsManager from src.actions.wait_for_code import WaitForCode -AGENT_HP = 100 - class Agent(Object): """ @@ -23,13 +22,21 @@ class Agent(Object): scene: 'Scene' walkable: bool items: list - hp: int + stats_manager: StatsManager - def __init__(self, scene: 'Scene', position: Point = Point(0, 0)) -> None: + def __init__(self, scene: 'Scene', position: Point = Point(0, 0), stats_manager=StatsManager()) -> None: super().__init__(position, scene) self.items = [] self.wait_for_code: WaitForCode = WaitForCode(self.scene.runtime.interactive) - self.hp = AGENT_HP + self.stats_manager = stats_manager + + @property + def hp(self): + return self.stats_manager.hp + + @hp.setter + def hp(self, val): + self.stats_manager.hp = val def tick(self) -> None: """ diff --git a/src/objects/agent/stats_manager.py b/src/objects/agent/stats_manager.py new file mode 100644 index 0000000..4fde277 --- /dev/null +++ b/src/objects/agent/stats_manager.py @@ -0,0 +1,27 @@ +AGENT_HP = 100 +LEVEL_TRESHOLDS = [100, 300, 500, 1000, 1500, 2500] + + +class StatsManager: + def __init__(self, experience=0, hp=AGENT_HP) -> None: + self.experience = experience + self.hp = hp + + @property + def level(self) -> int: + for i, treshold in enumerate(LEVEL_TRESHOLDS): + if self.experience < treshold: + return i + 1 + return len(LEVEL_TRESHOLDS) + 1 + + @level.setter + def level(self, new_val): + if new_val == 1: + self.experience = 0 + return + + for i, _ in enumerate(LEVEL_TRESHOLDS): + if i + 1 == new_val: + self.experience = LEVEL_TRESHOLDS[i - 1] + return + self.experience = LEVEL_TRESHOLDS[-1] diff --git a/src/scene.py b/src/scene.py index a5d28c9..fff644f 100644 --- a/src/scene.py +++ b/src/scene.py @@ -2,7 +2,7 @@ from typing import Dict, List from src.common.point import Point -from src.objects.agent import Agent +from src.objects.agent.agent import Agent from src.objects.floor import Floor from src.objects.portal import Portal from src.objects.object import Object diff --git a/tests/stats_manager_test.py b/tests/stats_manager_test.py new file mode 100644 index 0000000..e3066b1 --- /dev/null +++ b/tests/stats_manager_test.py @@ -0,0 +1,13 @@ +from src.objects.agent.stats_manager import StatsManager, LEVEL_TRESHOLDS + + +def test_set_level(): + sm = StatsManager() + sm.level = 3 + assert sm.experience == LEVEL_TRESHOLDS[1] + + +def test_get_level(): + sm = StatsManager() + sm.experience = LEVEL_TRESHOLDS[2] + 1 + assert sm.level == 4