Files
Flora/ui/presets.py
T

104 lines
4.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import pygame
from engine import collection
from ui.scaling import make_window, request_quit, to_logical
WIN_W, WIN_H = 1040, 720
BG = (24, 30, 24)
TEXT = (230, 235, 230)
MUTED = (150, 155, 150)
HINT = (255, 220, 120)
PANEL = (32, 38, 32)
BTN = (60, 90, 60)
BTN_HOVER = (85, 125, 85)
class PresetScreen:
def __init__(self):
pygame.init()
self.window, self.scale = make_window(WIN_W, WIN_H)
self.screen = pygame.Surface((WIN_W, WIN_H))
pygame.display.set_caption("Plants — Team Presets")
self.clock = pygame.time.Clock()
self.font = pygame.font.SysFont("segoeui", 30)
self.bold = pygame.font.SysFont("segoeui", 20, bold=True)
self.small = pygame.font.SysFont("segoeui", 16)
self.tiny = pygame.font.SysFont("segoeui", 13)
self.back_rect = pygame.Rect(16, 16, 90, 34)
self.slots = []
for i in range(4):
card = pygame.Rect(WIN_W // 2 - 240, 130 + i * 92, 480, 76)
set_btn = pygame.Rect(card.right - 180, card.y + 24, 80, 28)
clear_btn = pygame.Rect(card.right - 90, card.y + 24, 80, 28)
self.slots.append((card, set_btn, clear_btn))
def run(self):
running = True
while running:
self.clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
request_quit()
running = False
elif event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
pos = to_logical(event.pos, self.scale)
if self.back_rect.collidepoint(pos):
running = False
continue
for i, (card, set_btn, clear_btn) in enumerate(self.slots):
if set_btn.collidepoint(pos):
self._set_slot(i)
elif clear_btn.collidepoint(pos):
collection.clear_preset(i)
self._draw()
pygame.transform.smoothscale(self.screen, self.window.get_size(), self.window)
pygame.display.flip()
def _set_slot(self, i):
from ui.picker import TeamSelect
ts = TeamSelect(tower_mode=True, pick_goal=4, header="Pick a team",
start_label="Save")
res = ts.run()
self._reinit() # the nested picker quit pygame
if res and res != "back" and res[0]:
collection.save_preset(i, res[0])
def _reinit(self):
pygame.init()
self.window, self.scale = make_window(WIN_W, WIN_H)
self.screen = pygame.Surface((WIN_W, WIN_H))
pygame.display.set_caption("Plants — Team Presets")
self.clock = pygame.time.Clock()
self.font = pygame.font.SysFont("segoeui", 30)
self.bold = pygame.font.SysFont("segoeui", 20, bold=True)
self.small = pygame.font.SysFont("segoeui", 16)
self.tiny = pygame.font.SysFont("segoeui", 13)
def _draw(self):
self.screen.fill(BG)
title = self.font.render("Team Presets", True, TEXT)
self.screen.blit(title, title.get_rect(center=(WIN_W // 2, 52)))
sub = self.small.render("Set up to 4 teams; load them with the P1–P4 buttons in battle.", True, MUTED)
self.screen.blit(sub, sub.get_rect(center=(WIN_W // 2, 88)))
pygame.draw.rect(self.screen, BTN, self.back_rect, border_radius=6)
t = self.small.render("Back", True, TEXT)
self.screen.blit(t, t.get_rect(center=self.back_rect.center))
presets = collection.get_presets()
for i, (card, set_btn, clear_btn) in enumerate(self.slots):
pygame.draw.rect(self.screen, PANEL, card, border_radius=8)
pygame.draw.rect(self.screen, (60, 70, 60), card, 1, border_radius=8)
head = self.bold.render(f"Preset {i + 1}", True, HINT)
self.screen.blit(head, (card.x + 16, card.y + 10))
team = presets[i] if i < len(presets) else None
if team:
names = " · ".join(team)
tt = self.tiny.render(names, True, TEXT)
else:
tt = self.tiny.render("Empty", True, MUTED)
self.screen.blit(tt, (card.x + 16, card.y + 42))
pygame.draw.rect(self.screen, BTN_HOVER, set_btn, border_radius=6)
s = self.tiny.render("Set", True, TEXT)
self.screen.blit(s, s.get_rect(center=set_btn.center))
pygame.draw.rect(self.screen, (150, 70, 70), clear_btn, border_radius=6)
c = self.tiny.render("Clear", True, TEXT)
self.screen.blit(c, c.get_rect(center=clear_btn.center))