Skip to content

Feat/room matchmaking logic#47

Open
Harukume wants to merge 7 commits into
mainfrom
feat/room-matchmaking-logic
Open

Feat/room matchmaking logic#47
Harukume wants to merge 7 commits into
mainfrom
feat/room-matchmaking-logic

Conversation

@Harukume
Copy link
Copy Markdown
Contributor

Dodano ekran startowy (strona /start) gdzie można wybrać albo stworzenie gry publicznej/prywatnej albo dołączyć do gry publicznej (stworzy lobby jeśli taka nie istnieje). Albo dołączyć do gry za pomocą kodu - działa na lobby prywatnym jak i publicznym.

Lobby działa na zasadzie takiej że gra nie wystartuje dopóki dwóch graczy nie jest w nim oraz oboje nie dadzą gotowości (zamiast przycisku play). Teraz jest system z indexem. Gracz z indexem 0 jest Solem, z indexem 1 jest Vronem

Gra inicjalizuje się (ładowanie mapy, przypisanie pozycji) dopiero, gdy w pokoju znajduje się dwóch graczy i obaj oznaczą się jako gotowi.

Modyfikacja testów, bo ze względu na zmiany z lobby (mechanika gotowości) przestały przechodzić.

Pytania:

  • Tryb Singleplayer: Czy przewidujemy poziomy dla jednego gracza?
  • Wybór postaci: Obecnie role są sztywne (0/1). Czy chcemy dodać mechanikę wyboru postaci przed startem?

@Harukume Harukume requested a review from bnszky April 26, 2026 08:01
@Harukume Harukume self-assigned this Apr 26, 2026
Copy link
Copy Markdown
Member

@bnszky bnszky left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Kilka uwag wrzuciłem. Dołączanie działa i nie znalazłem błędów na tym etapie.

Gdy wpisuję w url /lobby, otrzymuję wielki napis „Ładowanie”. Zamiast tego domyślnie powinien przekierowywać na stronę startową. Można dopisać defaultRoute="/start"
Dotyczy to wszystkich ścieżek. Aktualnie można wejść /abc i nie mamy not found page, więc lepiej przekierowywać na /start

Jeśli chodzi o tryb singleplayer, to tak, można to dodać. Przy tworzeniu roomu możemy wtedy pominąć poczekalnię i przenieść się natychmiastowo do gry. Wystarczy dodać jeden input do tego w start (więc to może dodać do tej PR)

Docelowo będziemy wybierać bohatera na starcie, ale to zostawimy już na następny task

Comment on lines +38 to +43
if (mode === "create") {
joinedRoom = await client.create("game_room", {
name: playerName,
isPrivate,
});
} else if (
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aktualnie gdy próbujemy odświeżać przeglądarkę lub gracza rozłączy na ułamek sekundy, to połączenie nie zostanie odnowione i wyrzuci go z pokoju. Z tego co pamiętam, to działa to na podstawie tokenu w localStorage, który jest wyciągany, by wrócić do pokoju w określonym czasie:

localStorage.setItem("reconnection", JSON.stringify({
  token: joinedRoom.reconnectionToken,
  playerName,
}));

this.maxClients = room.maxClients ?? this.maxClients;
this.state.loadRoomFromJson(room);

if (options.private) {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

czy tu nie powinno być isPrivate?

player.ready = !player.ready;
}

if (this.clients.length === 2) {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lepiej zamiast 2 użyć zmiennej maxClients

useEffect(() => {
if (!room) return;

const handleStateChange = (state: any) => {
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const handleStateChange = (state: any) => {
const handleStateChange = (state: RoomState) => {

setJoinError(false);
let joinedRoom: Room;

console.warn({ playerName, mode, roomCode, isPrivate });
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

przed mergem

Suggested change
console.warn({ playerName, mode, roomCode, isPrivate });
//console.warn({ playerName, mode, roomCode, isPrivate });


export interface ConnectOptions {
playerName: string;
mode: "join" | "create" | "random";
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dla czytelności wyrzućmy random i zostawmy tylko create jako domyślny tryb, gdyby nie został wybrany.

});
await navigate("/game");
} catch {
setErrorMessage("Nie udało się dołaczyć do gry. Spróbuj ponownie.");
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
setErrorMessage("Nie udało się dołaczyć do gry. Spróbuj ponownie.");
setErrorMessage("Nie udało się dołączyć do gry. Spróbuj ponownie.");

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants