Skip to content

Feat/room matchmaking logic#47

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

Feat/room matchmaking logic#47
Harukume wants to merge 10 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

@bnszky bnszky left a comment

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.

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 thread client/src/lib/room-provider.tsx
Comment thread server/src/rooms/GameRoom.ts Outdated
Comment thread server/src/rooms/GameRoom.ts Outdated
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) => {

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Mamy taki typ RoomState po stronie klienta (albo go stworzyć)?

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.

Trzeba stworzyć, bo niestety nie mamy

Comment thread client/src/lib/room-provider.tsx Outdated
Comment thread client/src/lib/use-room.ts
Comment thread client/src/pages/intro.tsx Outdated
@Harukume Harukume requested a review from bnszky May 26, 2026 11:45

@bnszky bnszky left a comment

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.

Super i już wygląda lepiej. Kilka uwag do samego dołączania:

dodajmy dwie opcje, żeby można było łatwo modyfikować
private readonly isDevelopment = process.env.NODE_ENV === "development";
.env.development wtedy wystarczy flaga SAMPLE=development

Gdy jesteśmy w fazie developmentu logika dołączania działa tak jak to jest do tej pory:

  • gracz może dołączyć bez czekania na drugą osobę (this.clients.length >= 1)
  • można dołączać do gry nawet jeśli już wystartowała z jednym graczem
  • gdy jeden gracz wyjdzie, to pokój cały czas istnieje

Gdy nie jest to faza development (= false):

  • gracz musi poczekać na gotowość wszystkich graczy w poczekalni: this.clients.length >= message.maxClients
  • nie można dołączyć do już wystartowanej gry
  • gdy jeden z graczy wyjdzie w trakcie gry i nie odnowi połączenia, to wszyscy gracze zostają wyrzuceni i gra zostaje przerwana

Dodatkowo aktualnie można ustawić '/' index na '/start', bo przy dołączaniu w '/' mamy jeszcze stary system, który nie działa

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