mirror of
https://github.com/rr-/pq-cli.git
synced 2026-09-28 22:33:59 -06:00
61 lines
1.9 KiB
Python
61 lines
1.9 KiB
Python
import typing as T
|
|
|
|
from pqcli.lingo import act_name
|
|
from pqcli.mechanic import Player
|
|
from pqcli.ui.curses.widgets import ListBox, WindowWrapper
|
|
|
|
from .focusable import Focusable
|
|
from .progress_bar_window import ListBoxProgressBarWindow
|
|
|
|
|
|
class PlotWindow(Focusable, ListBoxProgressBarWindow):
|
|
cutoff = 100
|
|
|
|
def __init__(
|
|
self, player: Player, parent: T.Any, h: int, w: int, y: int, x: int
|
|
) -> None:
|
|
super().__init__(
|
|
parent, h, w, y, x, " Plot Development ", show_time=True
|
|
)
|
|
self._on_focus_change += self._render
|
|
|
|
self._player = player
|
|
self._player.quest_book.connect("start_act", self._sync_act_add)
|
|
self._player.quest_book.plot_bar.connect("change", self._sync_position)
|
|
|
|
self._sync()
|
|
|
|
def stop(self) -> None:
|
|
super().stop()
|
|
self._list_box.stop()
|
|
|
|
self._player.quest_book.disconnect("start_act", self._sync_act_add)
|
|
self._player.quest_book.plot_bar.disconnect(
|
|
"change", self._sync_position
|
|
)
|
|
|
|
def _sync(self) -> None:
|
|
self._sync_acts()
|
|
self._sync_position()
|
|
|
|
def _sync_acts(self) -> None:
|
|
self._list_box.clear()
|
|
for act_number in range(
|
|
max(0, self._player.quest_book.act - self.cutoff),
|
|
self._player.quest_book.act + 1,
|
|
):
|
|
self._sync_act_add(act_number)
|
|
self._render_list_box()
|
|
|
|
def _sync_act_add(self, act_number: int) -> None:
|
|
self._list_box.delete(0, max(0, len(self._list_box) - self.cutoff))
|
|
prev = self._list_box.get(-1)
|
|
if prev is not None:
|
|
self._list_box.set(-1, "[X] " + prev[4:])
|
|
self._list_box.add("[ ] " + act_name(act_number))
|
|
|
|
def _sync_position(self) -> None:
|
|
self._cur_pos = self._player.quest_book.plot_bar.position
|
|
self._max_pos = self._player.quest_book.plot_bar.max_
|
|
self._render_progress_bar()
|