Lobby - T3rabyte/Examen GitHub Wiki

Om er voor te zorgen dat mensen samen kunnen spelen gebruiken we unity's Lobby package en infrastuctuur. De gebruiker wordt anoniem ingelogd wanneer ze op de samen spelen knop drukken. Waarna ze een overzight krijgen van alle open lobby's die ze zouden kunnen joinen. Ook kunnen ze vanuit daar zelf een lobby aanmaken en prive lobby's joinen aan de hand van een code die de beherder van een lobby krijgt. Wanneer ze een lobby aanmaken of joinen kunnen ze een rol kiezen. Ook is de lobby leider in staat mensen te verwijderen uit de lobby. Zodra iedereen in de lobby een rol heeft gekozen kan de lobby leider de game starten en wordt iedereen naar het game level verplaatst.

alt text alt text alt text

graph TD;
    start((Game starts up + cinematic gets shown)) --> mainMenu(user presses multiplayer button);
    mainMenu --> roomList(User gets shown panel with lobbys to join);
    roomList --> |User presses back button| mainMenu;
    roomList --> |User presses dice button| name(Sets random player name);
    name --> roomList;
    roomList --> |User presses join by code button| codeJoin{Is the code input filled?};
    codeJoin --> |No| nothingResponse(Nothing happens);
    codeJoin --> |Yes| joinLobby(Player joins chosen lobby);
    roomList --> |User presses join button of a lobby in the lobby list| joinLobby;
    roomList --> |User presses lobby create button| createRoom(user gets a menu to configurate the lobby);
    createRoom --> |User presses back button| roomList;
    createRoom --> |User presses create confitm button| privateRoom{Is private toggled on?};
    privateRoom --> |No| createOpenRoom(creates open lobby and joins the user as host);
    privateRoom --> |Yes| createPrivateRoom(creates private lobby and shows code to share withn others, also joins the user as host);
Loading
graph TD;
    start((Player joins lobby)) --> |Player presses leave button| mainMenu(user leaves the lobby and goes back to main menu);
    start --> |Player presses one of the buttons to change there role| updateRole(updates the role of the player over the lobby to the prefered role);
    start --> |Lobby host kicks player| removePlayer(removes the player from the lobby and updates that to the side of the kicked player);
    start --> |Player presses start game button| startGame{have all the players selected a role thats not neutral?};
    startGame --> |Yes| gameStarts(game loads);
    startGame --> |No| start;
Loading
---
title: Lobby systeem class diagram
---
classDiagram
    MainMenuUI <|-- LobbyManager
    LobbyManager <|-- MainMenuUI
    MainMenuUI <|-- RoomManager
    LobbyManager <|-- RoomManager
    RoomManager <|-- LobbyManager
    class MainMenuUI{
        -GameObject lobbyPanel
        -GameObject lobbyViewContent
        -GameObject lobbyListObj
        -List<GameObject> panelList
        -List<GameObject> lobbyListItems
        +List<GameObject> roomListItems
        -Lobbymanager lobbymanager
        -InstantiateLobbyList()
        +DestroyItemsOnLists(List<List<GameObjects>> lists)
        +ShowPanel(string panelName)
        +ShowError(string message)
        +QuitGame()
    }
    class LobbyManager{
        +Lobby joinedLobby
        -MainMenuUI mainMenuUI
        -RoomManager roomManager
        -RelayManager relayManager
        -UnityAction leaveFromLobbyAction
        -TMP_InputField playerNameInput
        -TMP_InputField quickJoinLobbyName
        -TMP_InputField lobbyCreateName
        -Toggle isLobbyPrivate
        -Button roomBackBtn
        -Button roomStartBtn
        -List<string> randomPlayerNames
        -InitializeUnityService()
        -SetRandomPlayerName()
        +CreateLobby()
        -NewPlayer(string playerRole) Player
        +JoinLobbyById(string lobbyId)
        +SetLobbyleaveButton()
        +JoinLobbyByCode()
        -LobbyHeartbeat()
        -PollForLobbyUpdates()
        +ResetRoom()
        +GetLobbyList() List<Lobby>
        +LeaveFromLobby(string lobbyId)
        +RemoveFromLobby(string lobbyId, GameObject player) 
    }
    class RoomManager{
        -GameObject roomPlayerObj
        -GameObject roomCodeObj
        +List<GameObject> roomContentList
        -MainMenuUI mainMenuUI
        -LobbyManager lobbyManager
        -RelayManager relaymanager
        -List<Player> joinedPlayerList
        +InstantiateRoomItems(Lobby lobby)
        +UpdatePlayerRole(string newRole) 
        +UpdateRolesInLobby(Lobby joinedLobby) 
        +StartGame()
    }
    class RoleManager{
        +string role
        -OnGameSceneLoaded(Scene scene, LoadSceneMode mode)
    }
Loading
⚠️ **GitHub.com Fallback** ⚠️