Create page transition from lobby to in-game
parent
8a4593b542
commit
9fbfe40f7f
|
|
@ -7,6 +7,7 @@ export * from "./constants/TrackType";
|
||||||
export * from "./server-events/CreateLobbyError";
|
export * from "./server-events/CreateLobbyError";
|
||||||
export * from "./server-events/ServerError";
|
export * from "./server-events/ServerError";
|
||||||
export * from "./server-events/ServerEvent";
|
export * from "./server-events/ServerEvent";
|
||||||
|
export * from "./server-events/StartRoundEvent";
|
||||||
export * from "./server-events/UpdateLobbyEvent";
|
export * from "./server-events/UpdateLobbyEvent";
|
||||||
export * from "./client-events/ClientEvent";
|
export * from "./client-events/ClientEvent";
|
||||||
export * from "./client-events/CreateLobbyEvent";
|
export * from "./client-events/CreateLobbyEvent";
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
import { Socket } from "socket.io-client";
|
||||||
|
import { ServerEvent } from "./ServerEvent";
|
||||||
|
import { PieceId } from "../constants/Pieces";
|
||||||
|
|
||||||
|
export type StartRoundEvent = {
|
||||||
|
pieceIds: PieceId[];
|
||||||
|
};
|
||||||
|
|
||||||
|
export function attachHandlerToStartRoundEvent(
|
||||||
|
socket: Socket,
|
||||||
|
handler: (event: StartRoundEvent) => void,
|
||||||
|
): void {
|
||||||
|
socket.once(ServerEvent.START_ROUND, handler);
|
||||||
|
}
|
||||||
|
|
@ -4,7 +4,10 @@ import LandingPage from "./pages/landing/LandingPage";
|
||||||
import GamePage from "./pages/game/GamePage";
|
import GamePage from "./pages/game/GamePage";
|
||||||
import "./App.scss";
|
import "./App.scss";
|
||||||
import LobbyPage from "./pages/lobby/LobbyPage";
|
import LobbyPage from "./pages/lobby/LobbyPage";
|
||||||
import { attachHandlerToUpdateLobbyEvent } from "interface";
|
import {
|
||||||
|
attachHandlerToStartRoundEvent,
|
||||||
|
attachHandlerToUpdateLobbyEvent,
|
||||||
|
} from "interface";
|
||||||
|
|
||||||
export interface AppProps {
|
export interface AppProps {
|
||||||
socket: Socket;
|
socket: Socket;
|
||||||
|
|
@ -24,6 +27,10 @@ const App = (props: AppProps) => {
|
||||||
setGameCode(event.gameCode);
|
setGameCode(event.gameCode);
|
||||||
setRenderedPage("LOBBY");
|
setRenderedPage("LOBBY");
|
||||||
});
|
});
|
||||||
|
} else if (renderedPage === "LOBBY") {
|
||||||
|
attachHandlerToStartRoundEvent(socket, (event) => {
|
||||||
|
setRenderedPage("GAME");
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}, [renderedPage]);
|
}, [renderedPage]);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
import "./LobbyPage.scss";
|
import "./LobbyPage.scss";
|
||||||
import { Socket } from "socket.io-client";
|
import { Socket } from "socket.io-client";
|
||||||
import { attachHandlerToUpdateLobbyEvent } from "interface";
|
import { attachHandlerToUpdateLobbyEvent, ClientEvent } from "interface";
|
||||||
|
|
||||||
export interface LobbyPageProps {
|
export interface LobbyPageProps {
|
||||||
initialPlayerNames: string[];
|
initialPlayerNames: string[];
|
||||||
|
|
@ -16,6 +16,7 @@ const LobbyPage = (props: LobbyPageProps) => {
|
||||||
attachHandlerToUpdateLobbyEvent(socket, (event) => {
|
attachHandlerToUpdateLobbyEvent(socket, (event) => {
|
||||||
setPlayerNames(event.playerNames);
|
setPlayerNames(event.playerNames);
|
||||||
});
|
});
|
||||||
|
const startGame = () => socket.emit(ClientEvent.START_GAME);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="lobby-page">
|
<div className="lobby-page">
|
||||||
|
|
@ -27,7 +28,7 @@ const LobbyPage = (props: LobbyPageProps) => {
|
||||||
<article className="lobby-user-name">{name}</article>
|
<article className="lobby-user-name">{name}</article>
|
||||||
))}
|
))}
|
||||||
<div className="start-game-button">
|
<div className="start-game-button">
|
||||||
<button>Start Game</button>
|
<button onClick={startGame}>Start Game</button>
|
||||||
</div>
|
</div>
|
||||||
<article className="game-code">Game code: {gameCode}</article>
|
<article className="game-code">Game code: {gameCode}</article>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue