mirror of
https://github.com/rr-/pq-cli.git
synced 2026-09-28 22:33:59 -06:00
ui: show basic stats above progress bars
This commit is contained in:
@@ -3,13 +3,13 @@ import typing as T
|
|||||||
import urwid
|
import urwid
|
||||||
|
|
||||||
|
|
||||||
class CustomLineBox(urwid.AttrWrap):
|
class CustomLineBox(urwid.AttrMap):
|
||||||
def __init__(
|
def __init__(
|
||||||
self, widget: urwid.Widget, *args: T.Any, **kwargs: T.Any
|
self, widget: urwid.Widget, *args: T.Any, **kwargs: T.Any
|
||||||
) -> None:
|
) -> None:
|
||||||
super().__init__(
|
super().__init__(
|
||||||
urwid.LineBox(
|
urwid.LineBox(
|
||||||
urwid.AttrWrap(widget, "linebox-content", "linebox-content"),
|
urwid.AttrMap(widget, "linebox-content", "linebox-content"),
|
||||||
*args,
|
*args,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
),
|
),
|
||||||
|
|||||||
+14
-23
@@ -1,9 +1,7 @@
|
|||||||
import typing as T
|
|
||||||
|
|
||||||
import urwid
|
import urwid
|
||||||
|
|
||||||
|
|
||||||
class DoubleLineBox(urwid.AttrWrap):
|
class DoubleLineBox(urwid.AttrMap):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
top_widget: urwid.Widget,
|
top_widget: urwid.Widget,
|
||||||
@@ -11,31 +9,24 @@ class DoubleLineBox(urwid.AttrWrap):
|
|||||||
top_title: str = "",
|
top_title: str = "",
|
||||||
bottom_title: str = "",
|
bottom_title: str = "",
|
||||||
) -> None:
|
) -> None:
|
||||||
super().__init__(
|
self.top_line_box = urwid.LineBox(
|
||||||
urwid.Pile(
|
urwid.AttrMap(top_widget, "linebox-content", "linebox-content"),
|
||||||
[
|
|
||||||
urwid.LineBox(
|
|
||||||
urwid.AttrWrap(
|
|
||||||
top_widget, "linebox-content", "linebox-content"
|
|
||||||
),
|
|
||||||
title=top_title,
|
title=top_title,
|
||||||
bline="",
|
bline="",
|
||||||
),
|
)
|
||||||
(
|
|
||||||
"pack",
|
self.bottom_line_box = urwid.LineBox(
|
||||||
urwid.LineBox(
|
urwid.AttrMap(bottom_widget, "linebox-content", "linebox-content"),
|
||||||
urwid.AttrWrap(
|
|
||||||
bottom_widget,
|
|
||||||
"linebox-content",
|
|
||||||
"linebox-content",
|
|
||||||
),
|
|
||||||
title=bottom_title,
|
title=bottom_title,
|
||||||
tlcorner="├",
|
tlcorner="├",
|
||||||
trcorner="┤",
|
trcorner="┤",
|
||||||
),
|
)
|
||||||
),
|
|
||||||
]
|
super().__init__(
|
||||||
),
|
urwid.Pile([self.top_line_box, ("pack", self.bottom_line_box)]),
|
||||||
"linebox",
|
"linebox",
|
||||||
"linebox-focus",
|
"linebox-focus",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def set_bottom_title(self, text: str) -> None:
|
||||||
|
self.bottom_line_box.set_title(text)
|
||||||
|
|||||||
+17
-13
@@ -50,7 +50,6 @@ class CharacterSheetView(DoubleLineBox):
|
|||||||
self.player.connect("level_up", self.sync_level)
|
self.player.connect("level_up", self.sync_level)
|
||||||
self.player.stats.connect("change", self.sync_stats)
|
self.player.stats.connect("change", self.sync_stats)
|
||||||
self.player.exp_bar.connect("change", self.sync_exp)
|
self.player.exp_bar.connect("change", self.sync_exp)
|
||||||
self.sync()
|
|
||||||
|
|
||||||
super().__init__(
|
super().__init__(
|
||||||
top_widget=self.list_box,
|
top_widget=self.list_box,
|
||||||
@@ -58,6 +57,7 @@ class CharacterSheetView(DoubleLineBox):
|
|||||||
top_title="Character Sheet",
|
top_title="Character Sheet",
|
||||||
bottom_title="Experience",
|
bottom_title="Experience",
|
||||||
)
|
)
|
||||||
|
self.sync()
|
||||||
|
|
||||||
def sync(self) -> None:
|
def sync(self) -> None:
|
||||||
self.sync_level()
|
self.sync_level()
|
||||||
@@ -72,8 +72,11 @@ class CharacterSheetView(DoubleLineBox):
|
|||||||
self.stat_texts[stat].set_text(str(self.player.stats[stat]))
|
self.stat_texts[stat].set_text(str(self.player.stats[stat]))
|
||||||
|
|
||||||
def sync_exp(self) -> None:
|
def sync_exp(self) -> None:
|
||||||
self.exp_bar.set_completion(self.player.exp_bar.position)
|
cur = self.player.exp_bar.position
|
||||||
self.exp_bar.set_max(self.player.exp_bar.max_)
|
max_ = self.player.exp_bar.max_
|
||||||
|
self.exp_bar.set_completion(cur)
|
||||||
|
self.exp_bar.set_max(max_)
|
||||||
|
self.set_bottom_title(f"Experience ({max_-cur:.0f} XP to go)")
|
||||||
|
|
||||||
|
|
||||||
class SpellBookView(CustomLineBox):
|
class SpellBookView(CustomLineBox):
|
||||||
@@ -84,9 +87,9 @@ class SpellBookView(CustomLineBox):
|
|||||||
|
|
||||||
self.player.spell_book.connect("add", self.sync_spell_add)
|
self.player.spell_book.connect("add", self.sync_spell_add)
|
||||||
self.player.spell_book.connect("change", self.sync_spell_change)
|
self.player.spell_book.connect("change", self.sync_spell_change)
|
||||||
self.sync()
|
|
||||||
|
|
||||||
super().__init__(self.list_box, title="Spell Book")
|
super().__init__(self.list_box, title="Spell Book")
|
||||||
|
self.sync()
|
||||||
|
|
||||||
def sync(self) -> None:
|
def sync(self) -> None:
|
||||||
del self.list_box.body[:]
|
del self.list_box.body[:]
|
||||||
@@ -129,9 +132,9 @@ class EquipmentView(CustomLineBox):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.player.equipment.connect("change", self.sync_equipment_change)
|
self.player.equipment.connect("change", self.sync_equipment_change)
|
||||||
self.sync()
|
|
||||||
|
|
||||||
super().__init__(self.list_box, title="Equipment")
|
super().__init__(self.list_box, title="Equipment")
|
||||||
|
self.sync()
|
||||||
|
|
||||||
def sync(self) -> None:
|
def sync(self) -> None:
|
||||||
for equipment_type in EquipmentType:
|
for equipment_type in EquipmentType:
|
||||||
@@ -167,7 +170,6 @@ class InventoryView(DoubleLineBox):
|
|||||||
self.player.inventory.encum_bar.connect(
|
self.player.inventory.encum_bar.connect(
|
||||||
"change", self.sync_encumbrance_position
|
"change", self.sync_encumbrance_position
|
||||||
)
|
)
|
||||||
self.sync()
|
|
||||||
|
|
||||||
super().__init__(
|
super().__init__(
|
||||||
top_widget=self.list_box,
|
top_widget=self.list_box,
|
||||||
@@ -175,6 +177,7 @@ class InventoryView(DoubleLineBox):
|
|||||||
bottom_widget=self.encumbrance_bar,
|
bottom_widget=self.encumbrance_bar,
|
||||||
bottom_title="Encumbrance",
|
bottom_title="Encumbrance",
|
||||||
)
|
)
|
||||||
|
self.sync()
|
||||||
|
|
||||||
def sync(self) -> None:
|
def sync(self) -> None:
|
||||||
self.sync_gold()
|
self.sync_gold()
|
||||||
@@ -190,10 +193,11 @@ class InventoryView(DoubleLineBox):
|
|||||||
self.sync_item_add(item)
|
self.sync_item_add(item)
|
||||||
|
|
||||||
def sync_encumbrance_position(self) -> None:
|
def sync_encumbrance_position(self) -> None:
|
||||||
self.encumbrance_bar.set_completion(
|
cur = self.player.inventory.encum_bar.position
|
||||||
self.player.inventory.encum_bar.position
|
max_ = self.player.inventory.encum_bar.max_
|
||||||
)
|
self.encumbrance_bar.set_completion(cur)
|
||||||
self.encumbrance_bar.set_max(self.player.inventory.encum_bar.max_)
|
self.encumbrance_bar.set_max(max_)
|
||||||
|
self.set_bottom_title(f"Encumbrance ({cur:.0f}/{max_} cubits)")
|
||||||
|
|
||||||
def sync_item_add(self, item: InventoryItem) -> None:
|
def sync_item_add(self, item: InventoryItem) -> None:
|
||||||
self.list_box.body.append(
|
self.list_box.body.append(
|
||||||
@@ -238,13 +242,13 @@ class PlotView(DoubleLineBox):
|
|||||||
|
|
||||||
self.player.quest_book.connect("complete_act", self.sync_act_add)
|
self.player.quest_book.connect("complete_act", self.sync_act_add)
|
||||||
self.player.quest_book.plot_bar.connect("change", self.sync_position)
|
self.player.quest_book.plot_bar.connect("change", self.sync_position)
|
||||||
self.sync()
|
|
||||||
|
|
||||||
super().__init__(
|
super().__init__(
|
||||||
top_widget=self.list_box,
|
top_widget=self.list_box,
|
||||||
top_title="Plot Development",
|
top_title="Plot Development",
|
||||||
bottom_widget=self.plot_bar,
|
bottom_widget=self.plot_bar,
|
||||||
)
|
)
|
||||||
|
self.sync()
|
||||||
|
|
||||||
def sync(self) -> None:
|
def sync(self) -> None:
|
||||||
self.sync_acts()
|
self.sync_acts()
|
||||||
@@ -287,13 +291,13 @@ class QuestBookView(DoubleLineBox):
|
|||||||
|
|
||||||
self.player.quest_book.connect("complete_quest", self.sync_quest_add)
|
self.player.quest_book.connect("complete_quest", self.sync_quest_add)
|
||||||
self.player.quest_book.quest_bar.connect("change", self.sync_position)
|
self.player.quest_book.quest_bar.connect("change", self.sync_position)
|
||||||
self.sync()
|
|
||||||
|
|
||||||
super().__init__(
|
super().__init__(
|
||||||
top_widget=self.list_box,
|
top_widget=self.list_box,
|
||||||
top_title="Quests",
|
top_title="Quests",
|
||||||
bottom_widget=self.quest_bar,
|
bottom_widget=self.quest_bar,
|
||||||
)
|
)
|
||||||
|
self.sync()
|
||||||
|
|
||||||
def sync(self) -> None:
|
def sync(self) -> None:
|
||||||
self.sync_quests()
|
self.sync_quests()
|
||||||
@@ -330,9 +334,9 @@ class TaskView(urwid.Pile):
|
|||||||
|
|
||||||
self.player.connect("new_task", self.sync_task_name)
|
self.player.connect("new_task", self.sync_task_name)
|
||||||
self.player.task_bar.connect("change", self.sync_position)
|
self.player.task_bar.connect("change", self.sync_position)
|
||||||
self.sync()
|
|
||||||
|
|
||||||
super().__init__([self.current_task_text, self.current_task_bar])
|
super().__init__([self.current_task_text, self.current_task_bar])
|
||||||
|
self.sync()
|
||||||
|
|
||||||
def sync(self) -> None:
|
def sync(self) -> None:
|
||||||
self.sync_task_name()
|
self.sync_task_name()
|
||||||
|
|||||||
Reference in New Issue
Block a user