Compare commits

..

2 commits

Author SHA1 Message Date
Mark Joshwel fe44ced9f8 game: stdise whats done in Awake, OnEnable and Start
- Awake -> singleton stuff or anything that needs to start really early
- OnEnable -> init + register callbacks
- Start -> do anything that might call a callback
2024-11-18 00:50:04 +08:00
Mark Joshwel 534e96a150 game: prune this script i used to teach the lam 2024-11-18 00:42:28 +08:00
8 changed files with 88 additions and 102 deletions

View file

@ -1,6 +1,5 @@
using System; using System;
using System.Net.Mail; using System.Net.Mail;
using Firebase.Auth;
using UnityEngine; using UnityEngine;
using UnityEngine.Assertions; using UnityEngine.Assertions;
using UnityEngine.UIElements; using UnityEngine.UIElements;
@ -110,7 +109,7 @@ private void OnEnable()
_secondaryActionButton.clicked += OnSecondaryActionButtonClick; _secondaryActionButton.clicked += OnSecondaryActionButtonClick;
TransitionStateTo(State.NotSignedIn); TransitionStateTo(State.NotSignedIn);
if (state == State.UnassociatedState) throw new Exception("unreachable state"); if (state == State.UnassociatedState) throw new Exception("unreachable state");
GameManager.Instance.Backend.RegisterOnSignInCallback(_ => GameManager.Instance.Backend.RegisterOnSignInCallback(_ =>
{ {
@ -376,6 +375,8 @@ private void OnUsernameUpdateButtonClick()
_ => "An error occurred updating the username. Please try again." _ => "An error occurred updating the username. Please try again."
}; };
}); });
// TODO: update lpdata
} }
/// <summary> /// <summary>
@ -408,6 +409,8 @@ private void OnEmailUpdateButtonClick()
_ => "An error occurred updating the email. Please try again." _ => "An error occurred updating the email. Please try again."
}; };
}); });
// TODO: update lpdata
} }
/// <summary> /// <summary>
@ -608,7 +611,7 @@ private void OnSecondaryActionButtonClick()
throw new ArgumentOutOfRangeException(); throw new ArgumentOutOfRangeException();
} }
} }
/// <summary> /// <summary>
/// populate the fields with the given username and email, /// populate the fields with the given username and email,
/// used as a callback to when local player data is changed /// used as a callback to when local player data is changed

View file

@ -57,6 +57,12 @@ public enum UserAccountDetailTargetEnum
Password Password
} }
/// <summary>
/// callback functions to be invoked when the user signs in
/// </summary>
/// <returns></returns>
private readonly List<Action<FirebaseConnectionStatus>> _onConnectionStatusChangedCallbacks = new();
/// <summary> /// <summary>
/// callback functions to be invoked when the user signs in /// callback functions to be invoked when the user signs in
/// </summary> /// </summary>
@ -66,12 +72,6 @@ public enum UserAccountDetailTargetEnum
/// callback functions to be invoked when the user signs out /// callback functions to be invoked when the user signs out
/// </summary> /// </summary>
private readonly List<Action> _onSignOutCallbacks = new(); private readonly List<Action> _onSignOutCallbacks = new();
/// <summary>
/// callback functions to be invoked when the user signs in
/// </summary>
/// <returns></returns>
private readonly List<Action<FirebaseConnectionStatus>> _onConnectionStatusChangedCallbacks = new ();
/// <summary> /// <summary>
/// the firebase authentication object /// the firebase authentication object
@ -87,17 +87,17 @@ public enum UserAccountDetailTargetEnum
/// the current user object, if authenticated /// the current user object, if authenticated
/// </summary> /// </summary>
private FirebaseUser _user; private FirebaseUser _user;
/// <summary>
/// whether the user is signed in
/// </summary>
public bool IsSignedIn;
/// <summary> /// <summary>
/// the current user's username, if authenticated /// the current user's username, if authenticated
/// </summary> /// </summary>
private string _username; private string _username;
/// <summary>
/// whether the user is signed in
/// </summary>
public bool IsSignedIn;
/// <summary> /// <summary>
/// whether the backend is connected to the firebase backend /// whether the backend is connected to the firebase backend
/// </summary> /// </summary>
@ -151,7 +151,7 @@ public void Initialise(Action<FirebaseConnectionStatus> callback)
Debug.Log("firebase status is" + Status); Debug.Log("firebase status is" + Status);
}); });
} }
/// <summary> /// <summary>
/// function to fire all on sign in callbacks /// function to fire all on sign in callbacks
/// </summary> /// </summary>
@ -159,7 +159,6 @@ private void FireOnSignInCallbacks()
{ {
Debug.Log($"firing OnSignInCallbacks ({_onSignInCallbacks.Count})"); Debug.Log($"firing OnSignInCallbacks ({_onSignInCallbacks.Count})");
foreach (var callback in _onSignInCallbacks) foreach (var callback in _onSignInCallbacks)
{
try try
{ {
callback.Invoke(_user); callback.Invoke(_user);
@ -168,9 +167,8 @@ private void FireOnSignInCallbacks()
{ {
Debug.LogError($"error invoking OnSignInCallback: {e.Message}"); Debug.LogError($"error invoking OnSignInCallback: {e.Message}");
} }
}
} }
/// <summary> /// <summary>
/// function to fire all on sign-out callbacks /// function to fire all on sign-out callbacks
/// </summary> /// </summary>
@ -178,7 +176,6 @@ private void FireOnSignOutCallbacks()
{ {
Debug.Log($"firing OnSignOutCallbacks ({_onSignOutCallbacks.Count})"); Debug.Log($"firing OnSignOutCallbacks ({_onSignOutCallbacks.Count})");
foreach (var callback in _onSignOutCallbacks) foreach (var callback in _onSignOutCallbacks)
{
try try
{ {
callback.Invoke(); callback.Invoke();
@ -187,7 +184,6 @@ private void FireOnSignOutCallbacks()
{ {
Debug.LogError($"error invoking OnSignOutCallback: {e.Message}"); Debug.LogError($"error invoking OnSignOutCallback: {e.Message}");
} }
}
} }
/// <summary> /// <summary>
@ -234,10 +230,7 @@ private void AuthStateChanged(object sender, EventArgs eventArgs)
if (!IsSignedIn) return; if (!IsSignedIn) return;
Debug.Log($"signed in successfully as {_user?.UserId}"); Debug.Log($"signed in successfully as {_user?.UserId}");
RetrieveUsernameWithCallback((_, _) => RetrieveUsernameWithCallback((_, _) => { FireOnSignInCallbacks(); });
{
FireOnSignInCallbacks();
});
} }
/// <summary> /// <summary>
@ -482,11 +475,12 @@ public void ForgotPassword(string email, Action<bool> callback)
/// abstraction function to get the user's recent scores from the database /// abstraction function to get the user's recent scores from the database
/// </summary> /// </summary>
/// <param name="callback"> /// <param name="callback">
/// callback function that takes in a <c>DatabaseTransactionResult</c> enum and a <c>List&lt;LocalPlayerData.Score&gt;</c> /// callback function that takes in a <c>DatabaseTransactionResult</c> enum and a
/// <c>List&lt;LocalPlayerData.Score&gt;</c>
/// </param> /// </param>
public void GetRecentScores(Action<DatabaseTransactionResult, List<LocalPlayerData.Score>> callback) public void GetRecentScores(Action<DatabaseTransactionResult, List<LocalPlayerData.Score>> callback)
{ {
// TODO // TODO: implement this
callback(DatabaseTransactionResult.Error, new List<LocalPlayerData.Score>(0)); callback(DatabaseTransactionResult.Error, new List<LocalPlayerData.Score>(0));
} }
@ -506,7 +500,10 @@ public void GetRecentScores(Action<DatabaseTransactionResult, List<LocalPlayerDa
/// abstraction function to get and calculate the user's rating from the database /// abstraction function to get and calculate the user's rating from the database
/// calculation is done locally, call UpdateUserRating to update the user's rating in the database /// calculation is done locally, call UpdateUserRating to update the user's rating in the database
/// </summary> /// </summary>
/// <param name="callback">callback function that takes in a <c>DatabaseTransactionResult</c> enum and a user rating <c>float</c></param> /// <param name="callback">
/// callback function that takes in a <c>DatabaseTransactionResult</c> enum and a user rating
/// <c>float</c>
/// </param>
public void CalculateUserRating( public void CalculateUserRating(
Action<DatabaseTransactionResult, float> callback) Action<DatabaseTransactionResult, float> callback)
{ {

View file

@ -18,26 +18,26 @@ public class GameManager : MonoBehaviour
/// </summary> /// </summary>
public UIManager ui; public UIManager ui;
/// <summary>
/// list of callbacks to call when the local player data changes
/// </summary>
private readonly List<Action<LocalPlayerData>> _onLocalPlayerDataChangeCallbacks = new();
/// <summary> /// <summary>
/// the local player data object for storing player data /// the local player data object for storing player data
/// </summary> /// </summary>
private LocalPlayerData _data; private LocalPlayerData _data;
/// <summary>
/// read-only property for accessing the local player data outside of this class
/// </summary>
public LocalPlayerData Data => _data;
/// <summary>
/// list of callbacks to call when the local player data changes
/// </summary>
private readonly List<Action<LocalPlayerData>> _onLocalPlayerDataChangeCallbacks = new List<Action<LocalPlayerData>>();
/// <summary> /// <summary>
/// backend object for handling communication with the firebase backend /// backend object for handling communication with the firebase backend
/// </summary> /// </summary>
public Backend Backend; public Backend Backend;
/// <summary>
/// read-only property for accessing the local player data outside of this class
/// </summary>
public LocalPlayerData Data => _data;
/// <summary> /// <summary>
/// enforces singleton behaviour; sets doesn't destroy on load and checks for multiple instances /// enforces singleton behaviour; sets doesn't destroy on load and checks for multiple instances
/// </summary> /// </summary>
@ -59,12 +59,21 @@ private void Awake()
} }
/// <summary> /// <summary>
/// called when the game object is enabled, initialises variables /// start modifying state
/// </summary>
private void Start()
{
Debug.Log("GameManager starts here");
_data.LoadFromTheWorld(FireLocalPlayerDataChangeCallbacks);
}
/// <summary>
/// initialise variables and ui elements
/// </summary> /// </summary>
private void OnEnable() private void OnEnable()
{ {
ui = UIManager.Instance; ui = UIManager.Instance;
// load the local player data and refresh the ui // load the local player data and refresh the ui
_data = new LocalPlayerData(); _data = new LocalPlayerData();
@ -91,7 +100,7 @@ private void OnEnable()
ui.UI.Q<Button>("LeaderboardButton").style.display = DisplayStyle.None; ui.UI.Q<Button>("LeaderboardButton").style.display = DisplayStyle.None;
ui.UI.Q<Button>("AccountButton").style.display = DisplayStyle.None; ui.UI.Q<Button>("AccountButton").style.display = DisplayStyle.None;
}); });
// register a callback to refresh the ui when the player signs in // register a callback to refresh the ui when the player signs in
Backend.RegisterOnSignInCallback(_ => Backend.RegisterOnSignInCallback(_ =>
{ {
@ -99,15 +108,6 @@ private void OnEnable()
_data.LoadFromTheWorld(FireLocalPlayerDataChangeCallbacks); _data.LoadFromTheWorld(FireLocalPlayerDataChangeCallbacks);
}); });
} }
/// <summary>
/// load in stuff
/// </summary>
private void Start()
{
Debug.Log("GameManager starts here");
_data.LoadFromTheWorld(FireLocalPlayerDataChangeCallbacks);
}
/// <summary> /// <summary>
/// called when the application is quitting, saves the local player data /// called when the application is quitting, saves the local player data
@ -118,7 +118,7 @@ private void OnApplicationQuit()
Backend.Cleanup(); Backend.Cleanup();
_data.SaveToTheWorld(); _data.SaveToTheWorld();
} }
/// <summary> /// <summary>
/// function to register a callback to be called when the local player data changes /// function to register a callback to be called when the local player data changes
/// </summary> /// </summary>
@ -136,7 +136,6 @@ private void FireLocalPlayerDataChangeCallbacks(LocalPlayerData data)
{ {
Debug.Log($"firing LocalPlayerDataChangeCallbacks ({_onLocalPlayerDataChangeCallbacks.Count})"); Debug.Log($"firing LocalPlayerDataChangeCallbacks ({_onLocalPlayerDataChangeCallbacks.Count})");
foreach (var callback in _onLocalPlayerDataChangeCallbacks) foreach (var callback in _onLocalPlayerDataChangeCallbacks)
{
try try
{ {
callback.Invoke(data); callback.Invoke(data);
@ -145,6 +144,5 @@ private void FireLocalPlayerDataChangeCallbacks(LocalPlayerData data)
{ {
Debug.LogError($"error invoking LocalPlayerDataChangeCallback: {e.Message}"); Debug.LogError($"error invoking LocalPlayerDataChangeCallback: {e.Message}");
} }
}
} }
} }

View file

@ -43,7 +43,7 @@ public class OklchColourPickerUI : MonoBehaviour
private VisualElement _responseColour; private VisualElement _responseColour;
/// <summary> /// <summary>
/// function to set the initial values of the sliders /// modify state of initialised variables
/// </summary> /// </summary>
private void Start() private void Start()
{ {
@ -53,7 +53,7 @@ private void Start()
} }
/// <summary> /// <summary>
/// function to subscribe slider events to their respective functions /// initialise the ui elements and register change event callbacks functions
/// </summary> /// </summary>
public void OnEnable() public void OnEnable()
{ {

View file

@ -1,18 +0,0 @@
using UnityEngine;
public class Playground
{
private float _score;
private void SomethingSomethingScore()
{
var score = 0.0f;
_score = score;
}
private void ShowTheScore()
{
Debug.Log(_score);
}
}

View file

@ -1,3 +0,0 @@
fileFormatVersion: 2
guid: 662d126b54a54d9ebe6a1dc716d199e3
timeCreated: 1731830473

View file

@ -1,4 +1,3 @@
using System;
using UnityEngine; using UnityEngine;
using UnityEngine.UIElements; using UnityEngine.UIElements;
@ -12,48 +11,48 @@ public class SideViewUI : MonoBehaviour
/// </summary> /// </summary>
private Button _accountButton; private Button _accountButton;
/// <summary>
/// text label for showing the player's stable-ish chroma accuracy
/// </summary>
private Label _chromaAccuracyText;
/// <summary>
/// connection status label for showing the connection status
/// </summary>
private Label _connectionStatusLabel;
/// <summary>
/// text label for showing the player's stable-ish hue accuracy
/// </summary>
private Label _hueAccuracyText;
/// <summary> /// <summary>
/// leaderboard button for showing the leaderboard /// leaderboard button for showing the leaderboard
/// </summary> /// </summary>
private Button _leaderboardButton; private Button _leaderboardButton;
/// <summary>
/// text label for showing the player's stable-ish lightness accuracy
/// </summary>
private Label _lightnessAccuracyText;
/// <summary> /// <summary>
/// play button for starting the game /// play button for starting the game
/// </summary> /// </summary>
private Button _playButton; private Button _playButton;
/// <summary>
/// connection status label for showing the connection status
/// </summary>
private Label _connectionStatusLabel;
/// <summary> /// <summary>
/// text label for showing the player's known name /// text label for showing the player's known name
/// </summary> /// </summary>
private Label _playerText; private Label _playerText;
/// <summary> /// <summary>
/// text label for showing the player's rating /// text label for showing the player's rating
/// </summary> /// </summary>
private Label _ratingText; private Label _ratingText;
/// <summary>
/// text label for showing the player's stable-ish lightness accuracy
/// </summary>
private Label _lightnessAccuracyText;
/// <summary>
/// text label for showing the player's stable-ish chroma accuracy
/// </summary>
private Label _chromaAccuracyText;
/// <summary>
/// text label for showing the player's stable-ish hue accuracy
/// </summary>
private Label _hueAccuracyText;
/// <summary> /// <summary>
/// function to subscribe button events to their respective functions /// initialise the ui elements and register the button click event functions
/// </summary> /// </summary>
private void OnEnable() private void OnEnable()
{ {
@ -67,12 +66,12 @@ private void OnEnable()
_accountButton = ui.Q<Button>("AccountButton"); _accountButton = ui.Q<Button>("AccountButton");
_accountButton.clicked += OnAccountButtonClicked; _accountButton.clicked += OnAccountButtonClicked;
_connectionStatusLabel = ui.Q<Label>("ConnectionStatusLabel"); _connectionStatusLabel = ui.Q<Label>("ConnectionStatusLabel");
_playerText = ui.Q<Label>("PlayerText"); _playerText = ui.Q<Label>("PlayerText");
_ratingText = ui.Q<Label>("RatingText"); _ratingText = ui.Q<Label>("RatingText");
_lightnessAccuracyText = ui.Q<Label>("LightnessAccuracyText"); _lightnessAccuracyText = ui.Q<Label>("LightnessAccuracyText");
_chromaAccuracyText = ui.Q<Label>("ChromaAccuracyText"); _chromaAccuracyText = ui.Q<Label>("ChromaAccuracyText");
_hueAccuracyText = ui.Q<Label>("HueAccuracyText"); _hueAccuracyText = ui.Q<Label>("HueAccuracyText");

View file

@ -51,10 +51,20 @@ private void Awake()
} }
} }
/// <summary>
/// modify state of initial variables
/// </summary>
private void Start()
{
SetDisplayState(DisplayState.Nothing);
}
/// <summary>
/// initialise variables
/// </summary>
private void OnEnable() private void OnEnable()
{ {
UI = GetComponent<UIDocument>().rootVisualElement; UI = GetComponent<UIDocument>().rootVisualElement;
SetDisplayState(DisplayState.Nothing);
} }
/// <summary> /// <summary>