Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/pokete/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@
from pokete.base.single_event import single_event_periodic_event
from pokete.base.tss import tss
from pokete.base.ui.notify import notifier
from pokete.classes import deck, roadmap, timer
from pokete.classes import movemap as mvp
from pokete.classes import ob_maps as obmp
from pokete.classes import roadmap, timer
from pokete.classes.achievements import achievements
from pokete.classes.asset_service.service import asset_service
from pokete.classes.audio import audio
Expand All @@ -54,6 +54,7 @@
from pokete.classes.multiplayer.interactions.context_menu import ContextMenu
from pokete.classes.multiplayer.modeprovider import Mode, modeProvider
from pokete.classes.multiplayer.pc_manager import pc_manager
from pokete.classes.new_deck import NewDeck
from pokete.classes.periodic_events import (
MovingGrassEvent,
MovingWaterEvent,
Expand Down Expand Up @@ -347,7 +348,7 @@ def _game(_map: PlayMap, figure: Figure):
ctx = change_ctx(Context(pevm, mvp.movemap, mvp.movemap, figure), mvp.movemap)
MapInteract.set_ctx(ctx) # Npcs need this global context
inp_dict: list[tuple[list[Action], tuple]] = [
([Action.DECK], (deck.deck, (ctx, 6, "Your deck"))),
([Action.DECK], (NewDeck(), (ctx, 6, "Your deck"))),
([Action.CANCEL, Action.EXIT_GAME], (quit, (ctx,))),
([Action.MAP], (roadmap.roadmap, (ctx,))),
([Action.INVENTORY], (inv, (ctx,))),
Expand Down
6 changes: 4 additions & 2 deletions src/pokete/base/mouse/interactor.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
from abc import ABC, abstractmethod
from abc import abstractmethod
from typing import Protocol, runtime_checkable

import scrap_engine as se

from pokete.base.context import Context
from pokete.base.input.mouse import MouseEvent


class MouseInteractor(ABC):
@runtime_checkable
class MouseInteractor(Protocol):
def get_all_interaction_areas(
self,
) -> list[se.Area]:
Expand Down
53 changes: 34 additions & 19 deletions src/pokete/base/ui/elements/choose.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,21 +136,28 @@ class BetterChooseBox(Box):
_map: The map it will be shown on"""

def __init__(
self, columns, labels: list[se.Text], name="", _map=None, overview=None
self,
columns,
labels: list[se.HasArea],
name="",
_map=None,
overview=None,
max_rows: Optional[int] = None,
):
self.nest_label_obs: list[list[BetterChooserItem]] = []
self.set_items(columns, labels, init=True)
super().__init__(
3 * len(self.nest_label_obs) + 2,
sum(i.width for i in self.nest_label_obs[0]) + 2,
3,
3,
name,
[CloseLabel()],
overview=overview,
)
self.nest_label_obs: list[list[BetterChooserItem]] = []
self.columns = columns
self.max_rows: Optional[int] = max_rows
self.map = _map
self.__add_obs()
self.index = (0, 0)
self.set_items(columns, labels)
self.get_item(*self.index).choose()

def set_index(self, _y, _x):
Expand Down Expand Up @@ -196,35 +203,43 @@ def input(self, input: ActionList):
(self.index[1] + _c[1]) % len(self.nest_label_obs[self.index[0]]),
)

def set_items(self, columns, labels: list[se.Text], init=False):
def set_items(self, columns, labels: list[se.HasArea]):
"""Sets the items shown in the box
ARGS:
columns: Number of columns
labels: List of se.Texts that will be shown on the items
init: Whether or not the box is initiated"""
self.columns = columns
for i in self.nest_label_obs:
for obj in i:
self.rem_ob(obj)
box_width = sorted(len(i.text) for i in labels)[-1]
box_width = sorted(i.width for i in labels)[-1]
box_height = sorted(i.height for i in labels)[-1]

label_obs = [
BetterChooserItem(3, box_width + 4, label, i)
BetterChooserItem(box_height + 2, box_width + 4, label, i)
for i, label in enumerate(labels)
]
self.nest_label_obs = [
label_obs[i * columns : (i + 1) * columns]
for i in range(max(round(len(labels) / columns + 0.49), 1))
]
if not init:
self.resize(
3 * len(self.nest_label_obs) + 2,
sum(i.width for i in self.nest_label_obs[0]) + 2,
)
self.__add_obs()
try:
self.set_index(*self.index)
except IndexError:
self.index = (0, 0)
self.get_item(*self.index).choose()

rows = min(
tr := len(self.nest_label_obs),
self.max_rows if self.max_rows is not None else tr,
)

self.resize(
(box_height + 2) * rows + 2,
sum(i.width for i in self.nest_label_obs[0]) + 2,
)
self.__add_obs()
try:
self.set_index(*self.index)
except IndexError:
self.index = (0, 0)
self.get_item(*self.index).choose()

def __add_obs(self):
"""Adds items to the box"""
Expand Down
2 changes: 1 addition & 1 deletion src/pokete/base/ui/notify.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ def corner_add(self, _map):
def shift(self):
"""Shifts the box to the right"""
self.x += 1
for i in get_nested(self):
for i in get_nested(self)[0]:
if i.x == self.map.width - 1:
i.remove()
i.group.rem_ob(i)
Expand Down
5 changes: 3 additions & 2 deletions src/pokete/base/ui/overview.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
from abc import ABC, abstractmethod
from abc import abstractmethod
from typing import Protocol


class Overview(ABC):
class Overview(Protocol):
@abstractmethod
def resize_view(self):
pass
14 changes: 10 additions & 4 deletions src/pokete/base/ui/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,20 @@
import scrap_engine as se


def get_nested(group: se.ObjectGroup):
def get_nested(
group: se.ObjectGroup,
) -> tuple[list[se.Object], list[tuple[int, int]]]:
"""RETURNS the raw objects an ObjectGroup contains
ARGS:
group: The given ObjectGroup"""
obs = []
obs: list[se.Object] = []
coords: list[tuple[int, int]] = []
for obj in group.obs:
if isinstance(obj, se.ObjectGroup):
obs += get_nested(obj)
ret_obs, ret_coords = get_nested(obj)
obs += ret_obs
coords += [(c[0] + obj.rx, c[1] + obj.ry) for c in ret_coords]
else:
obs.append(obj)
return obs
coords.append((obj.rx, obj.ry))
return obs, coords
3 changes: 2 additions & 1 deletion src/pokete/classes/map_additions/center.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from pokete.classes.interactions.multi_text_choose_box import MultiTextChooseBox
from pokete.classes.inv import buy
from pokete.classes.landscape import MapInteract
from pokete.classes.new_deck import NewDeck
from pokete.release import SPEED_OF_TIME

CUDDLE_MESSAGES = [
Expand Down Expand Up @@ -133,7 +134,7 @@ def action(self, ob):
case 0:
self.__normalize_pokes(ob)
ob.balls_label_rechar()
deck.deck(self.ctx, len(ob.pokes))
NewDeck()(self.ctx, len(ob.pokes))
case 1:
ob.heal()
time.sleep(SPEED_OF_TIME * 0.5)
Expand Down
45 changes: 45 additions & 0 deletions src/pokete/classes/new_deck.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
from typing import Optional, override

import scrap_engine as se

from pokete.base.context import Context
from pokete.base.ui.views.better_choose_box import BetterChooseBoxView
from pokete.classes.poke.poke import Poke


class DeckItem(se.Box):
def __init__(self, poke: Poke):
super().__init__(4, 28)
self.add_ob(poke.text_name, 12, 0)
if poke.identifier != "__fallback__":
for obj, _x, _y in zip(
[
poke.ico,
poke.text_lvl,
poke.text_hp,
poke.tril,
poke.trir,
poke.hp_bar,
poke.text_xp,
],
[0, 12, 12, 18, 27, 19, 12],
[0, 1, 2, 2, 2, 2, 3],
):
self.add_ob(obj, _x, _y)


class NewDeck(BetterChooseBoxView[int]):
def __init__(self):
super().__init__(2, [se.Text(" ")], "Your Deck")
self.pokes: list[Poke]

def choose(self, ctx: Context, idx: int) -> Optional[int]:
return idx

@override
def __call__(self, ctx: Context, p_len: int, in_fight=False) -> Optional[int]:
self.pokes = ctx.figure.pokes[:p_len]

self.set_items(2, [DeckItem(poke) for poke in self.pokes])

return super().__call__(ctx)
Loading