79 lines
2.2 KiB
Python
79 lines
2.2 KiB
Python
# tests touche E (Kael / Seris / Aldric)
|
|
|
|
from unittest.mock import AsyncMock
|
|
|
|
from lobby import Lobby, LobbyPlayer
|
|
from game_loop import GameLoop
|
|
from game_state import EnemyState
|
|
from constants import (
|
|
DISPLACEMENT_COOLDOWNS,
|
|
KAEL_CHARGE_DISTANCE,
|
|
SERIS_INTANGIBLE_DURATION,
|
|
ALDRIC_FLYING_DURATION,
|
|
ENEMY_STATS,
|
|
)
|
|
|
|
|
|
def make_game():
|
|
classes = [("p1", "Alice", "kael"), ("p2", "Bob", "seris"), ("p3", "Clara", "aldric")]
|
|
lobby = Lobby("TEST1", classes[0][0])
|
|
lobby.players = [LobbyPlayer(cid, uname, cls) for cid, uname, cls in classes]
|
|
return GameLoop(lobby, AsyncMock())
|
|
|
|
|
|
def add_enemy(game, etype="fracture", x=0.0, y=5.0):
|
|
stats = ENEMY_STATS[etype]
|
|
game._enemy_counter += 1
|
|
e = EnemyState(id=f"en_{game._enemy_counter}", type=etype, x=x, y=y, hp=stats["hp"], max_hp=stats["hp"])
|
|
game.state.enemies.append(e)
|
|
return e
|
|
|
|
|
|
def test_kael_charge():
|
|
game = make_game()
|
|
p = game.state.players[0]
|
|
p.x, p.y = 0.0, 0.0
|
|
game.handle_displacement("p1", 10.0, 0.0)
|
|
assert abs(p.x - KAEL_CHARGE_DISTANCE) < 0.01
|
|
assert p.cooldowns["displacement"] == DISPLACEMENT_COOLDOWNS["kael"]
|
|
|
|
|
|
def test_kael_charge_bloque_par_cd():
|
|
game = make_game()
|
|
p = game.state.players[0]
|
|
p.x, p.y = 0.0, 0.0
|
|
p.cooldowns["displacement"] = 3.0
|
|
game.handle_displacement("p1", 10.0, 0.0)
|
|
assert p.x == 0.0
|
|
|
|
|
|
def test_seris_teleport():
|
|
game = make_game()
|
|
p = game.state.players[1]
|
|
p.x, p.y = 0.0, 0.0
|
|
game.handle_displacement("p2", 5.0, 3.0)
|
|
assert abs(p.x - 5.0) < 0.01
|
|
assert abs(p.y - 3.0) < 0.01
|
|
assert any(b["type"] == "intangible" for b in p.buffs)
|
|
|
|
|
|
def test_seris_intangible_immunise():
|
|
game = make_game()
|
|
p = game.state.players[1]
|
|
p.x, p.y = 0.0, 0.0
|
|
p.hp = p.max_hp
|
|
p.buffs.append({"type": "intangible", "timer": SERIS_INTANGIBLE_DURATION})
|
|
e = add_enemy(game, "fracture", x=0.0, y=0.0)
|
|
e.attack_cooldown = 0.0
|
|
game._update_enemies()
|
|
assert p.hp == p.max_hp
|
|
|
|
|
|
def test_aldric_vol():
|
|
game = make_game()
|
|
p = game.state.players[2]
|
|
game.handle_displacement("p3", 0.0, 0.0)
|
|
flying = next((b for b in p.buffs if b["type"] == "flying"), None)
|
|
assert flying is not None
|
|
assert abs(flying["timer"] - ALDRIC_FLYING_DURATION) < 0.001
|