2024-01-27 12:19:56 +00:00
|
|
|
using System.Collections;
|
|
|
|
using System.Collections.Generic;
|
2024-01-27 15:32:12 +00:00
|
|
|
using Firebase.Database;
|
|
|
|
using Firebase.Extensions;
|
2024-01-27 12:46:54 +00:00
|
|
|
using TMPro;
|
2024-01-27 12:19:56 +00:00
|
|
|
using UnityEngine;
|
2024-01-27 12:46:54 +00:00
|
|
|
using UnityEngine.UI;
|
2024-01-27 12:19:56 +00:00
|
|
|
|
2024-01-27 12:46:54 +00:00
|
|
|
/// <summary>
|
|
|
|
/// This is the game state manager on the phone side
|
|
|
|
/// </summary>
|
2024-01-27 12:19:56 +00:00
|
|
|
public class GameManager : MonoBehaviour
|
|
|
|
{
|
2024-01-27 12:46:54 +00:00
|
|
|
private GameState currentState;
|
|
|
|
private List<Player> players = new List<Player>();
|
|
|
|
|
|
|
|
public float explanationTime = 4f;
|
|
|
|
private float currentExplanationTime = 0;
|
|
|
|
|
|
|
|
public InputField roomCodeField;
|
|
|
|
public TextMeshProUGUI roomError;
|
|
|
|
public InputField playerNameField;
|
|
|
|
public TextMeshProUGUI nameError;
|
|
|
|
|
2024-01-27 15:32:12 +00:00
|
|
|
private DatabaseReference realtimeDB;
|
|
|
|
private Room myRoom;
|
|
|
|
|
|
|
|
private void Awake()
|
|
|
|
{
|
|
|
|
FirebaseInitializer.Instance.onFirebaseReady += Initialize;
|
|
|
|
}
|
|
|
|
|
2024-01-27 12:46:54 +00:00
|
|
|
private void Start()
|
|
|
|
{
|
|
|
|
currentExplanationTime = explanationTime;
|
|
|
|
}
|
|
|
|
|
|
|
|
public GameState GetCurrentState()
|
2024-01-27 12:19:56 +00:00
|
|
|
{
|
2024-01-27 12:46:54 +00:00
|
|
|
return currentState;
|
|
|
|
}
|
|
|
|
|
2024-01-27 15:32:12 +00:00
|
|
|
private void Initialize()
|
|
|
|
{
|
|
|
|
FirebaseInitializer.Instance.onFirebaseReady -= Initialize;
|
|
|
|
realtimeDB = FirebaseDatabase.DefaultInstance.RootReference;
|
|
|
|
Debug.Log("Realtime DB initialized");
|
|
|
|
|
|
|
|
//TODO MARINE : enable the submit button here. Disabled it at start
|
|
|
|
}
|
|
|
|
|
2024-01-27 12:46:54 +00:00
|
|
|
/// <summary>
|
|
|
|
/// Send your name and game room to the server
|
|
|
|
/// </summary>
|
2024-01-27 15:32:12 +00:00
|
|
|
public void PlayerValidateNameAndServerRoom(string _name, string _code)
|
2024-01-27 12:46:54 +00:00
|
|
|
{
|
|
|
|
//check if the room exists, if not display an error message
|
2024-01-27 15:32:12 +00:00
|
|
|
realtimeDB.Child("rooms").Child(_code).GetValueAsync().ContinueWithOnMainThread(task =>
|
|
|
|
{
|
|
|
|
if (task.IsFaulted)
|
|
|
|
{
|
|
|
|
Debug.LogException(task.Exception);
|
|
|
|
}
|
|
|
|
else if (task.IsCompleted)
|
|
|
|
{
|
|
|
|
DataSnapshot snapshot = task.Result;
|
|
|
|
if (snapshot == null)
|
|
|
|
{
|
|
|
|
Debug.LogError("The room doesn't exists");
|
|
|
|
roomError.text = "Error: the room doesn't exists";
|
|
|
|
roomError.gameObject.SetActive(true);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
myRoom = JsonUtility.FromJson<Room>(snapshot.GetRawJsonValue());
|
|
|
|
realtimeDB.Child("rooms").Child(_code).ChildChanged += OnRoomUpdate;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2024-01-27 12:46:54 +00:00
|
|
|
|
|
|
|
//if succeed, then the player to the server
|
2024-01-27 12:19:56 +00:00
|
|
|
|
2024-01-27 12:46:54 +00:00
|
|
|
//if succeed, change the state and change page
|
|
|
|
currentState = GameState.WaitingForOtherPlayersToJoin;
|
2024-01-27 12:19:56 +00:00
|
|
|
}
|
|
|
|
|
2024-01-27 12:46:54 +00:00
|
|
|
/// <summary>
|
|
|
|
/// Call this only by the first player
|
|
|
|
/// </summary>
|
|
|
|
public void StartGame()
|
2024-01-27 12:19:56 +00:00
|
|
|
{
|
|
|
|
|
|
|
|
}
|
2024-01-27 12:46:54 +00:00
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Dislay on the screen the current prompt ask to you and another player
|
|
|
|
/// Also show all the camera stuff
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="_prompt">The prompt to display</param>
|
|
|
|
public void MakeAProposition(Prompt _prompt)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Create a proposition from the picture taken and send it to server.
|
|
|
|
/// Then go to next proposition (if any) or the page "WaitingForOtherPlayers"
|
|
|
|
/// </summary>
|
|
|
|
public void SubmitProposition()
|
|
|
|
{
|
|
|
|
Proposition temp = new Proposition();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Display the voting page
|
|
|
|
/// </summary>
|
|
|
|
public void StartToVote()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Choose one result and send it to the server
|
|
|
|
/// Then go to the next vote (if any) or to the page "WaitingForOtherPlayers"
|
|
|
|
/// </summary>
|
|
|
|
public void Vote()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Display the UI of the end screen
|
|
|
|
/// </summary>
|
|
|
|
public void DisplayEndScreen()
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Automatically called when something change in your room
|
|
|
|
/// </summary>
|
2024-01-27 15:32:12 +00:00
|
|
|
private void OnRoomUpdate(object sender, ChildChangedEventArgs e)
|
2024-01-27 12:46:54 +00:00
|
|
|
{
|
2024-01-27 15:32:12 +00:00
|
|
|
myRoom = JsonUtility.FromJson<Room>(e.Snapshot.GetRawJsonValue());
|
2024-01-27 12:46:54 +00:00
|
|
|
|
|
|
|
}
|
|
|
|
|
2024-01-27 12:19:56 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public enum GameState
|
|
|
|
{
|
|
|
|
EnteringName,
|
2024-01-27 12:46:54 +00:00
|
|
|
WaitingForOtherPlayersToJoin,
|
2024-01-27 12:19:56 +00:00
|
|
|
Explanation,
|
|
|
|
MakeProposition,
|
2024-01-27 12:46:54 +00:00
|
|
|
PropositionsSent,
|
|
|
|
WaitingForOtherPlayers,
|
2024-01-27 12:19:56 +00:00
|
|
|
VotingTime,
|
|
|
|
Ending
|
|
|
|
}
|
|
|
|
|
|
|
|
|