ui: allow loading characters directly from cli

This commit is contained in:
rr-
2020-09-16 22:13:07 +02:00
parent 1ad563ad93
commit ef9a7f9e20
4 changed files with 65 additions and 10 deletions
+9 -1
View File
@@ -1,13 +1,21 @@
import abc
import argparse
import typing as T
from pqcli.mechanic import Player
from pqcli.roster import Roster
class BaseUserInterface(abc.ABC):
def __init__(self, roster: Roster, args: argparse.Namespace) -> None:
def __init__(
self,
roster: Roster,
player: T.Optional[Player],
args: argparse.Namespace,
) -> None:
self.roster = roster
self.args = args
self.player = player
@abc.abstractmethod
def run(self) -> None:
+11 -3
View File
@@ -32,8 +32,13 @@ class MainMenu(enum.IntEnum):
class BasicUserInterface(BaseUserInterface):
def __init__(self, roster: Roster, args: argparse.Namespace) -> None:
super().__init__(roster, args)
def __init__(
self,
roster: Roster,
player: T.Optional[Player],
args: argparse.Namespace,
) -> None:
super().__init__(roster, player, args)
def signal_handler(sig: T.Any, frame: T.Any) -> None:
logging.info("Quitting")
@@ -51,7 +56,10 @@ class BasicUserInterface(BaseUserInterface):
)
self.logo()
self.main_menu()
if self.player:
self.play(self.player)
else:
self.main_menu()
def logo(self) -> None:
print(LOGO)
+12 -5
View File
@@ -39,8 +39,10 @@ class StopMainLoop(Exception):
class CursesUserInterface(BaseUserInterface):
def __init__(self, roster: Roster, args: argparse.Namespace) -> None:
super().__init__(roster, args)
def __init__(
self, roster: Roster, player: Player, args: argparse.Namespace
) -> None:
super().__init__(roster, player, args)
os.environ.setdefault("ESCDELAY", "25")
self._screen = curses.initscr()
self._screen.nodelay(True)
@@ -77,7 +79,10 @@ class CursesUserInterface(BaseUserInterface):
def run(self) -> None:
try:
self._switch_to_roster_view()
if self.player:
self._switch_to_game_view(self.player)
else:
self._switch_to_roster_view()
while True:
key = T.cast(int, self._screen.getch())
@@ -130,8 +135,10 @@ class CursesUserInterface(BaseUserInterface):
view.on_cancel += lambda: self._switch_to_create_char_race_view(
player_name, race
)
view.on_confirm += lambda class_: self._switch_to_create_char_stats_view(
player_name, race, class_
view.on_confirm += (
lambda class_: self._switch_to_create_char_stats_view(
player_name, race, class_
)
)
self._switch_view(view)