Skip to content
This repository was archived by the owner on Feb 17, 2023. It is now read-only.

Add stats manager #16

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions src/objects/agent.py → src/objects/agent/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
"""
Expand All @@ -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:
"""
Expand Down
27 changes: 27 additions & 0 deletions src/objects/agent/stats_manager.py
Original file line number Diff line number Diff line change
@@ -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]
2 changes: 1 addition & 1 deletion src/scene.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 13 additions & 0 deletions tests/stats_manager_test.py
Original file line number Diff line number Diff line change
@@ -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