diff --git a/Assets/Scripts/GameManager.cs b/Assets/Scripts/GameManager.cs index 437117b..26eb97b 100644 --- a/Assets/Scripts/GameManager.cs +++ b/Assets/Scripts/GameManager.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Firebase.Database; using Firebase.Extensions; using Newtonsoft.Json; @@ -11,9 +12,7 @@ /// public class GameManager : MonoBehaviour { - private GameState currentState; private List players = new(); - private bool isFirst = false; public Player currentPlayer = null; [Header("Other component")] @@ -57,15 +56,13 @@ private void Start() } private void OnApplicationQuit() { - myOnlineRoom.Child("players").Child(currentPlayer.id).RemoveValueAsync(); - Debug.Log($"delete player {currentPlayer.name}"); - myRoom = null; + myOnlineRoom.Child("players").Child(currentPlayer.id).RemoveValueAsync().ContinueWithOnMainThread(task => + { + Debug.Log($"delete player {currentPlayer.name}"); + myOnlineRoom.ValueChanged -= OnRoomUpdate; + }); } - public GameState GetCurrentState() - { - return currentState; - } private void Initialize() { @@ -124,7 +121,7 @@ public void PlayerValidateNameAndServerRoom(string _name, string _code) { //then subscribe to it myOnlineRoom.ValueChanged += OnRoomUpdate; - currentState = GameState.WaitingForOtherPlayersToJoin; + myRoom.currentState = (int)GameState.WaitingForOtherPlayersToJoin; players.Add(currentPlayer); WaitingRoom.SetActive(true); @@ -202,19 +199,13 @@ public void StartGame() Debug.Log(JSON); try { - myOnlineRoom.Child("currentState").SetValueAsync(2).ContinueWithOnMainThread(task => + sendCurrentState(GameState.Explanation, () => { - if (task.IsFaulted) - { - Debug.LogException(task.Exception); - } - else - { - Debug.Log($"start the game", this); - currentState = GameState.Explanation; - WaitingRoom.SetActive(false); - BeforeStart.SetActive(true); - } + Debug.Log($"start the game", this); + myRoom.currentState = (int)GameState.Explanation; + WaitingRoom.SetActive(false); + BeforeStart.SetActive(true); + }); } catch (Exception ex) @@ -232,7 +223,7 @@ public void StartGame() /// The prompt to display public void MakeAProposition(Prompt _prompt) { - currentState = GameState.MakeProposition; + //currentState = GameState.MakeProposition; } /// @@ -282,13 +273,30 @@ private void OnRoomUpdate(object sender, ValueChangedEventArgs e) { Debug.LogException(ex); } - - switch (currentState) + if(myRoom == null) { + return; + } + switch (myRoom.currentState) { - case GameState.WaitingForOtherPlayersToJoin: + case (int)GameState.WaitingForOtherPlayersToJoin: { CheckIfIAmTheFirst(myRoom.GetPlayerList()); UpdateDisplayedListUser(myRoom.GetPlayerList()); + break; + } + case (int)GameState.Explanation: + { + + break; + } + case (int)GameState.MakeProposition: + { + if (BeforeStart.activeInHierarchy) + { + BeforeStart.SetActive(false); + TakePicture.SetActive(true); + } + break; } } @@ -306,16 +314,38 @@ private void UpdateDisplayedListUser(List players) private void CheckIfIAmTheFirst(List players) { + bool isFirst = false; if (players.Count > 1) { + IOrderedEnumerable sortedList = players.OrderBy(x=>x.creationDate); + + if(sortedList.Last().id == currentPlayer.id) + { + isFirst = true; + } } - else + + if (isFirst) { - + submitStartGame.SetActive(true); } } + public void sendCurrentState(GameState state,Action callback_oncCurrentStateSent) + { + myOnlineRoom.Child("currentState").SetValueAsync((int)state).ContinueWithOnMainThread(task => + { + if (task.IsFaulted) + { + Debug.LogException(task.Exception); + } + else + { + callback_oncCurrentStateSent?.Invoke(); + } + }); ; + } public void OnClickSubmitSignIn() { diff --git a/Assets/Scripts/RoomManager.cs b/Assets/Scripts/RoomManager.cs index f046b60..7a7314e 100644 --- a/Assets/Scripts/RoomManager.cs +++ b/Assets/Scripts/RoomManager.cs @@ -30,9 +30,7 @@ public class RoomManager : MonoBehaviour private float propositionCurrentTime = 0; public TextMeshProUGUI timerGUI; - private GameState currentState; private Room myRoom = null; - public float votingTime = 20; private float votingCurrentTime = 0; @@ -54,7 +52,6 @@ public class RoomManager : MonoBehaviour private void Awake() { FirebaseInitializer.Instance.onFirebaseReady += Initialize; - currentState = GameState.EnteringName; } @@ -63,12 +60,14 @@ private void Start() propositionCurrentTime = propositionTime; votingCurrentTime = votingTime; ResetAllPlayerLabels(); - currentState = GameState.WaitingForOtherPlayersToJoin; } private void Update() { - if (currentState == GameState.Explanation && endOfExplanationDate != DateTime.MinValue) + if (myRoom == null) + return; + + if (myRoom.currentState == (int)GameState.Explanation && endOfExplanationDate != DateTime.MinValue) { TimeSpan duration = endOfExplanationDate - DateTime.Now; counter.text = duration.TotalSeconds.ToString("D1"); @@ -76,11 +75,16 @@ private void Update() if (duration.TotalMilliseconds <= 0) { Debug.Log("It's time to make proposition !", this); - currentState = GameState.MakeProposition; + SendRoomState(GameState.MakeProposition); } } } + private void SendRoomState(GameState _newState) + { + realtimeDB.Child("rooms").Child(myRoom.code).Child("currentState").SetValueAsync((int)_newState); + } + private void ResetAllPlayerLabels() { for (int i = 0; i < waitingForPlayersLabels.Count; i++) @@ -207,7 +211,6 @@ public void PlayerSendProposition(Proposition _proposition) /// public void HostStartGame() { - currentState = GameState.MakeProposition; waitingForPropositionsPage.SetActive(true); waitingForPlayersPage.SetActive(false); propositionCurrentTime = propositionTime; @@ -313,7 +316,7 @@ private void OnRoomUpdate(object sender, ValueChangedEventArgs value) return; } string JSON = value.Snapshot.GetRawJsonValue(); - Debug.Log(JSON); + Debug.Log($"your room has been updated :\n{JSON}"); try { myRoom = JsonConvert.DeserializeObject(JSON); @@ -324,17 +327,17 @@ private void OnRoomUpdate(object sender, ValueChangedEventArgs value) } - switch (currentState) + switch (myRoom.currentState) { - case GameState.WaitingForOtherPlayersToJoin: + case (int)GameState.WaitingForOtherPlayersToJoin: UpdateConnectedPlayerList(myRoom.GetPlayerList()); break; - case GameState.Explanation: + case (int)GameState.Explanation: waitingForPlayersPage.SetActive(false); explanationPage.SetActive(true); endOfExplanationDate = DateTime.Now.AddSeconds(30); break; - case GameState.MakeProposition: + case (int)GameState.MakeProposition: HostStartGame(); break; default: diff --git a/Assets/Scripts/StorageManager.cs b/Assets/Scripts/StorageManager.cs index af1afe6..2fe0648 100644 --- a/Assets/Scripts/StorageManager.cs +++ b/Assets/Scripts/StorageManager.cs @@ -8,18 +8,20 @@ public class StorageManager : MonoBehaviour { public GameObject PicturePlayer; public GameObject Canvas; - private FirebaseStorage storage; + private StorageReference storage; private DatabaseReference realtimeDB; void Awake() { + Debug.Log("non"); FirebaseInitializer.Instance.onFirebaseReady += Initialize; } void Initialize() { + Debug.Log("oui"); FirebaseInitializer.Instance.onFirebaseReady -= Initialize; - storage = FirebaseStorage.DefaultInstance; + storage = FirebaseStorage.DefaultInstance.RootReference; realtimeDB = FirebaseDatabase.DefaultInstance.RootReference; } @@ -43,8 +45,7 @@ public void UploadPhoto() GameManager game = Canvas.GetComponent(); string imageUuid = Guid.NewGuid().ToString(); - StorageReference storageRef = storage.GetReferenceFromUrl("gs://ggj2024-5cb41.appspot.com"); - StorageReference imageRef = storageRef.Child(game.myRoom.code).Child(game.currentPlayer.id).Child($"{imageUuid}.jpg"); + StorageReference imageRef = storage.Child(game.myRoom.code).Child(game.currentPlayer.id).Child($"{imageUuid}.jpg"); imageRef.PutBytesAsync(photoBytes).ContinueWith((Task task) => {