mirror of
https://github.com/rr-/pq-cli.git
synced 2026-09-28 22:33:59 -06:00
ui: allow loading characters directly from cli (#16)
This commit is contained in:
+9
-1
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user