Files
ages/agame/display/__init__.py
Alek Ratzloff 2357757b23 Add dialog actions
Rudimentary user input for dialogs has been added.

* Displays must add support for showing dialog options, and receiving
  user input for dialog selections.
* A selected dialog can optionally perform actions, and then directs the
  game into the next dialog state.
* Dialog options may be conditionally shown with variables.

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
2021-11-28 17:27:05 -08:00

48 lines
1.3 KiB
Python

import platform
from typing import Optional, Sequence, Tuple
from agame.action import Action
from agame.dialog import DialogOption
from .display import Display
if platform.system() in ("Linux", "Darwin", "Unix"):
from .unix import *
class BasicDisplay(Display):
"""
A basic display that should be supported on all platforms. It just outputs
text with some color.
"""
def line(self, line: str = ""):
print(line)
def input(self, prompt: Optional[str] = None) -> str:
if prompt is None:
prompt = "> "
return input(prompt)
def wait_for_ack(self, prompt: Optional[str] = "Press enter to continue..."):
input(prompt or "")
def dialog_options(self, options: Sequence[DialogOption]) -> DialogOption:
valid_opts = range(1, len(options) + 1)
def print_opts():
for i, opt in enumerate(options):
self.line(f"{i}. {opt.text}")
print_opts()
while True:
got = self.input("? ")
try:
choice = int(got)
except ValueError:
print_opts()
continue
if choice in valid_opts:
break
index = choice - 1
selection = options[index]
return selection