[Client] Add initial lobby interactions
- Check challenge mode input validity - Add logic to display correct elements dependending on whether the user joined the room and is the room owner
This commit is contained in:
		
							parent
							
								
									09ee0a616e
								
							
						
					
					
						commit
						d47d97bb66
					
				
							
								
								
									
										185
									
								
								truthseeker/static/js/game_lobby.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								truthseeker/static/js/game_lobby.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,185 @@ | ||||
| // Display functions
 | ||||
| 
 | ||||
| /** | ||||
|  * Display the invalid rounds count message element, by removing the hidden CSS class. | ||||
|  * | ||||
|  * @param {Element} invalidRoundsCountMessageElement the invalid rounds counts message | ||||
|  */ | ||||
| function displayInvalidRoundsCountErrorMessage(invalidRoundsCountMessageElement) { | ||||
|     invalidRoundsCountMessageElement.classList.remove("hidden"); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Get the room code and display the room code element. | ||||
|  */ | ||||
| function displayRoomCode() { | ||||
|     let roomCode = getRoomCode(); | ||||
|     let roomCodeElement = document.getElementsByClassName("room_code")[0]; | ||||
|     roomCodeElement.textContent = roomCode; | ||||
|     roomCodeElement.setAttribute("href", "/lobby/" + roomCode); | ||||
|     document.getElementsByClassName("room_code_text")[0].classList.remove("hidden"); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Display the players list element. | ||||
|  */ | ||||
| function displayPlayerList() { | ||||
|     document.getElementsByClassName("players_list")[0].classList.remove("hidden"); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Display the multi player mode choices, by removing the hidden CSS class on the first | ||||
|  * multi_player_mode_choices element. | ||||
|  */ | ||||
| function displayMultiPlayerModeChoices() { | ||||
|     document.getElementsByClassName("multi_player_mode_choices")[0].classList.remove("hidden"); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Display the room view, by removing the hidden CSS class on the first room_view element. | ||||
|  */ | ||||
| function displayRoomView() { | ||||
|     document.getElementsByClassName("room_view")[0].classList.remove("hidden"); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Display the join room view, by removing the hidden CSS class on the first join_room_view | ||||
|  * element. | ||||
|  */ | ||||
| function displayJoinRoomView() { | ||||
|     document.getElementsByClassName("join_room_view")[0].classList.remove("hidden"); | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Hide the invalid rounds count message element, by adding the hidden CSS class. | ||||
|  * | ||||
|  * @param {Element} invalidRoundsCountMessageElement the invalid rounds counts message | ||||
|  */ | ||||
| function hideInvalidRoundsCountErrorMessage(invalidRoundsCountMessageElement) { | ||||
|     invalidRoundsCountMessageElement.classList.add("hidden"); | ||||
| } | ||||
| 
 | ||||
| // Start game functions
 | ||||
| 
 | ||||
| function startHistoryGame() { | ||||
|     //TODO: start the history game
 | ||||
| } | ||||
| 
 | ||||
| function startChallengeGame() { | ||||
|     let roundsCount = getChallengeModeRoundsCount(); | ||||
|     if (roundsCount == -1) { | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     //TODO: start the challenge game
 | ||||
| } | ||||
| 
 | ||||
| // Listeners functions
 | ||||
| 
 | ||||
| /** | ||||
|  * Set listeners to game buttons. | ||||
|  * | ||||
|  * <p> | ||||
|  * This function adds a click event listener on start buttons | ||||
|  * </p> | ||||
|  */ | ||||
| function setListenersToGameButtons() { | ||||
|     document.getElementById("multi_player_history_start_button").addEventListener("click", startHistoryGame); | ||||
|     document.getElementById("multi_player_challenge_start_button").addEventListener("click", startChallengeGame); | ||||
| } | ||||
| 
 | ||||
| function unsetListenersToButtons() { | ||||
|     document.getElementById("multi_player_history_start_button").removeEventListener("click", startHistoryGame); | ||||
|     document.getElementById("multi_player_challenge_start_button").removeEventListener("click", startChallengeGame); | ||||
| } | ||||
| 
 | ||||
| // Utility functions
 | ||||
| 
 | ||||
| function isRoomOwner() { | ||||
|     //FIXME: check if player is room owner
 | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| function hasJoinedRoom() { | ||||
|     //FIXME: check if player has joined the room
 | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Get the rounds count for the challenge mode from the user input. | ||||
|  * | ||||
|  * <p> | ||||
|  * As browsers allow to enter any character on a number imput, we need to validate the user value. | ||||
|  * A regular expression which checks that every character is a number digit is used. | ||||
|  * </p> | ||||
|  * | ||||
|  * <p> | ||||
|  * If the user input isn't matched by the regular expression, an error message is shown to the user. | ||||
|  * </p> | ||||
|  * | ||||
|  * @returns the rounds count or -1 if it is invalid | ||||
|  */ | ||||
| function getChallengeModeRoundsCount() { | ||||
|     let roundsCountText = document.getElementById("rounds_count").value; | ||||
|     let errorElement = document.getElementsByClassName("multi_player_challenge_mode_invalid_input")[0]; | ||||
|     if (!/^\d+$/.test(roundsCountText)) { | ||||
|         displayInvalidRoundsCountErrorMessage(errorElement); | ||||
|         return -1; | ||||
|     } | ||||
| 
 | ||||
|     let roundsCountNumber = parseInt(roundsCountText); | ||||
|     if (roundsCountNumber < 5 || roundsCountNumber > 15) { | ||||
|         displayInvalidRoundsCountErrorMessage(errorElement); | ||||
|         return -1; | ||||
|     } | ||||
| 
 | ||||
|     hideInvalidRoundsCountErrorMessage(errorElement); | ||||
|     return roundsCountNumber; | ||||
| } | ||||
| 
 | ||||
| /** | ||||
|  * Get the code of the room. | ||||
|  * | ||||
|  * @returns the code of the room | ||||
|  */ | ||||
| function getRoomCode() { | ||||
|     //FIXME
 | ||||
|     return "ABCDEF"; | ||||
| } | ||||
| 
 | ||||
| // Lobby initialization
 | ||||
| 
 | ||||
| /** | ||||
|  * Initialize the lobby page. | ||||
|  * | ||||
|  * <p> | ||||
|  * If the player has joined the room, the room view will be shown. In the case the player is the | ||||
|  * owner of the room, the room code and the multi player mode choice will be shown and the | ||||
|  * listeners to the game buttons will be done. | ||||
|  * </p> | ||||
|  * | ||||
|  * <p> | ||||
|  * If the player has not joined the room, the join room view will be shown and a listener to the | ||||
|  * join room button will be set. | ||||
|  * </p> | ||||
|  */ | ||||
| function initLobby() { | ||||
|     if (hasJoinedRoom()) { | ||||
|         displayRoomView(); | ||||
|         if (isRoomOwner()) { | ||||
|             displayRoomCode(); | ||||
|             displayMultiPlayerModeChoices(); | ||||
|             setListenersToGameButtons(); | ||||
|         } | ||||
| 
 | ||||
|         displayPlayerList(); | ||||
|     } else { | ||||
|         displayJoinRoomView(); | ||||
|         //TODO
 | ||||
|         /** | ||||
|          * setListenerToJoinRoomButton(); | ||||
|          */ | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| initLobby(); | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user