mirror of
https://github.com/rr-/pq-cli.git
synced 2026-09-29 06:44:00 -06:00
mechanic: refactor creating new player
This commit is contained in:
+18
-30
@@ -5,15 +5,15 @@ import urwid
|
||||
import urwid_readline
|
||||
|
||||
from pqcli.config import CLASSES, PRIME_STATS, RACES
|
||||
from pqcli.mechanic import Player, StatsBuilder, create_player, generate_name
|
||||
from pqcli.mechanic import Stats, StatsBuilder, generate_name
|
||||
from pqcli.ui.button import MenuButton
|
||||
from pqcli.ui.line_box import LineBox
|
||||
|
||||
|
||||
class StatsBox(urwid.Filler):
|
||||
def __init__(self, player: Player, stats_builder: StatsBuilder) -> None:
|
||||
self.player = player
|
||||
self.stats_builder = stats_builder
|
||||
def __init__(self) -> None:
|
||||
self.stats_builder = StatsBuilder()
|
||||
self.stats = self.stats_builder.roll()
|
||||
self.stat_labels = {stat: urwid.Text("0") for stat in PRIME_STATS}
|
||||
self.total_label = urwid.Text("0")
|
||||
self.update_values()
|
||||
@@ -59,48 +59,46 @@ class StatsBox(urwid.Filler):
|
||||
)
|
||||
|
||||
def on_roll_press(self, _user_data: T.Any) -> None:
|
||||
self.player.stats = self.stats_builder.roll()
|
||||
self.stats = self.stats_builder.roll()
|
||||
self.update_values()
|
||||
|
||||
def on_unroll_press(self, _user_data: T.Any) -> None:
|
||||
try:
|
||||
self.player.stats = self.stats_builder.unroll()
|
||||
self.stats = self.stats_builder.unroll()
|
||||
except IndexError:
|
||||
return
|
||||
self.update_values()
|
||||
|
||||
def update_values(self) -> None:
|
||||
for stat, edit in self.stat_labels.items():
|
||||
edit.set_text(str(self.player.stats[stat]))
|
||||
edit.set_text(str(self.stats[stat]))
|
||||
self.total_label.set_text(
|
||||
str(
|
||||
sum(
|
||||
self.player.stats[stat] for stat in self.stat_labels.keys()
|
||||
)
|
||||
)
|
||||
str(sum(self.stats[stat] for stat in self.stat_labels.keys()))
|
||||
)
|
||||
|
||||
|
||||
class RaceBox(LineBox):
|
||||
def __init__(self, player: Player) -> None:
|
||||
def __init__(self) -> None:
|
||||
race_checkboxes = []
|
||||
self.race = random.choice(RACES)
|
||||
for race in RACES:
|
||||
urwid.RadioButton(
|
||||
group=race_checkboxes,
|
||||
label=race.name,
|
||||
state=race.name == player.race.name,
|
||||
state=race.name == self.race.name,
|
||||
)
|
||||
super().__init__(urwid.ListBox(race_checkboxes), title="Race")
|
||||
|
||||
|
||||
class ClassBox(LineBox):
|
||||
def __init__(self, player: Player) -> None:
|
||||
def __init__(self) -> None:
|
||||
class_checkboxes = []
|
||||
self.class_ = random.choice(CLASSES)
|
||||
for class_ in CLASSES:
|
||||
urwid.RadioButton(
|
||||
group=class_checkboxes,
|
||||
label=class_.name,
|
||||
state=class_.name == player.class_.name,
|
||||
state=class_.name == self.class_.name,
|
||||
)
|
||||
super().__init__(urwid.ListBox(class_checkboxes), title="Class")
|
||||
|
||||
@@ -110,24 +108,17 @@ class NewGameView(urwid.Pile):
|
||||
self.on_confirm = on_confirm
|
||||
self.on_cancel = on_cancel
|
||||
|
||||
stats_builder = StatsBuilder()
|
||||
self.player = create_player(stats_builder)
|
||||
|
||||
race_box = RaceBox(self.player)
|
||||
class_box = ClassBox(self.player)
|
||||
stats_box = StatsBox(self.player, stats_builder)
|
||||
race_box = RaceBox()
|
||||
class_box = ClassBox()
|
||||
stats_box = StatsBox()
|
||||
|
||||
self.char_name_edit = urwid_readline.ReadlineEdit(
|
||||
"Name: ", self.player.name
|
||||
"Name: ", generate_name()
|
||||
)
|
||||
generate_char_name_btn = MenuButton(
|
||||
"Generate random name", on_press=self.on_generate_char_name_press
|
||||
)
|
||||
|
||||
urwid.connect_signal(
|
||||
self.char_name_edit, "postchange", self.on_char_name_change
|
||||
)
|
||||
|
||||
super().__init__(
|
||||
[
|
||||
(1, urwid.Filler(self.char_name_edit)),
|
||||
@@ -154,9 +145,6 @@ class NewGameView(urwid.Pile):
|
||||
self.char_name_edit.edit_text = generate_name()
|
||||
self.char_name_edit.edit_pos = len(self.char_name_edit.edit_text)
|
||||
|
||||
def on_char_name_change(self, widget: urwid.Text, old_text: str) -> None:
|
||||
self.player.name = widget.edit_text
|
||||
|
||||
def on_generate_char_name_press(self, _user_data: T.Any) -> None:
|
||||
self.generate_random_char_name()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user