Mi2dRPGamEng/tests/test_speed.py

61 lines
2.2 KiB
Python

from pathlib import Path
import pytest
from engine.character import BodyPart, Character
from engine.defs import DefRegistry
DEFS_DIR = Path(__file__).resolve().parent.parent / "resources" / "defs"
@pytest.fixture()
def registry():
return DefRegistry.load(DEFS_DIR)
def make_human(registry, **kwargs) -> Character:
return Character(species_id="human", default_body_parts=registry.new_default_body_parts("human"), **kwargs)
def test_two_healthy_legs_give_full_base_speed(registry):
character = make_human(registry)
assert character.effective_speed(30.0, registry) == pytest.approx(30.0)
def test_missing_one_leg_halves_speed(registry):
character = make_human(registry, body_parts=[BodyPart("left_leg", "human_left_leg", removed=True)])
assert character.effective_speed(30.0, registry) == pytest.approx(15.0)
def test_missing_both_legs_gives_zero_speed(registry):
character = make_human(
registry,
body_parts=[
BodyPart("left_leg", "human_left_leg", removed=True),
BodyPart("right_leg", "human_right_leg", removed=True),
],
)
assert character.effective_speed(30.0, registry) == 0.0
def test_damaged_leg_contributes_proportionally_to_integrity(registry):
character = make_human(registry, body_parts=[BodyPart("left_leg", "human_left_leg", integrity=50.0)])
# left leg contributes 0.5 * 0.5 = 0.25, right leg contributes 0.5 -> total 0.75
assert character.effective_speed(30.0, registry) == pytest.approx(30.0 * 0.75)
def test_bionic_leg_replacement_is_faster_than_a_normal_leg(registry):
normal = make_human(registry)
bionic = make_human(registry, body_parts=[BodyPart("left_leg", "bionic_leg")])
normal_speed = normal.effective_speed(30.0, registry)
bionic_speed = bionic.effective_speed(30.0, registry)
assert bionic_speed > normal_speed
# 0.5 (right leg) + 1.2 (bionic left leg) = 1.7
assert bionic_speed == pytest.approx(30.0 * 1.7)
def test_non_leg_parts_do_not_affect_speed(registry):
character = make_human(registry, body_parts=[BodyPart("head", "human_head", removed=True)])
assert character.effective_speed(30.0, registry) == pytest.approx(30.0)