Files
uno-game/ui/MainWindow.slint
Kieran Kihn 955aa0956d feat(ui): add AFTER_GAME state and restart flow in GameUI
- Introduced `AFTER_GAME` state to handle post-game logic.
- Updated `GameUI` to show restart prompt when the game ends.
- Modified `StartPage` and `MainWindow` to support restart behavior.
- Adjusted `endGame` method to transition to `AFTER_GAME`.
2025-12-10 22:30:25 +08:00

76 lines
2.4 KiB
Plaintext

import { ConnectPage } from "ConnectPage.slint";
import { StartPage } from "StartPage.slint";
import { GamePage, OtherPlayer, HandCard, CardColor, GameDirection } from "GamePage.slint";
enum PageType {
ConnectPage,
StartPage,
GamePage
}
export component MainWindow inherits Window {
in property <PageType> active-page: PageType.ConnectPage;
// ConnectPage
in property <bool> is-connecting;
// StartPage
in property <bool> is-ready;
in property <bool> is-restart;
// GamePage
in property <[OtherPlayer]> other-players;
in property <string> current-player-name;
in property <int> current-player-card-count;
in property <bool> current-player-has-uno;
in property <bool> is-current-player-turn;
in property <[HandCard]> hand-cards;
in property <image> discard-top-card;
in property <GameDirection> game-direction;
in property <CardColor> current-color;
callback request-connect(string, string, string);
callback request-start;
callback request-play-card(int, CardColor);
callback request-draw-card;
callback request-uno;
width: 1920px;
height: 1080px;
title: "UNO!";
if root.active-page == PageType.ConnectPage: connect-page := ConnectPage {
is-connecting: root.is-connecting;
request-connect(server-address, server-port, player-name) => {
root.request-connect(server-address, server-port, player-name);
}
}
if root.active-page == PageType.StartPage: start-page := StartPage {
is-ready: root.is-ready;
is-restart: root.is-restart;
request-start => {
root.request-start();
}
}
if root.active-page == PageType.GamePage: game-page := GamePage {
other-players: root.other-players;
current-player-name: root.current-player-name;
current-player-card-count: root.current-player-card-count;
current-player-has-uno: root.current-player-has-uno;
is-current-player-turn: root.is-current-player-turn;
hand-cards: root.hand-cards;
discard-top-card: root.discard-top-card;
game-direction: root.game-direction;
current-color: root.current-color;
request-play-card(index, card-color) => {
root.request-play-card(index, card-color);
}
request-draw-card => {
root.request-draw-card();
}
request-uno => {
root.request-uno();
}
}
}