game: DatabaseTransactionResult -> TransactionResult

This commit is contained in:
Mark Joshwel 2024-11-19 08:30:45 +08:00
parent a5679b4270
commit 85e3d5827e
10 changed files with 233 additions and 308 deletions

View file

@ -378,13 +378,13 @@ private void OnUsernameUpdateButtonClick()
GameManager.Instance.Backend.UpdateUserAccountDetail(Backend.UserAccountDetailTargetEnum.Username, GameManager.Instance.Backend.UpdateUserAccountDetail(Backend.UserAccountDetailTargetEnum.Username,
_usernameField.value, _usernameField.value,
dtr => res =>
{ {
_accompanyingText.style.display = DisplayStyle.Flex; _accompanyingText.style.display = DisplayStyle.Flex;
_accompanyingText.text = dtr switch _accompanyingText.text = res switch
{ {
Backend.DatabaseTransactionResult.Ok => "Username updated!", Backend.TransactionResult.Ok => "Username updated!",
Backend.DatabaseTransactionResult.Unauthenticated => Backend.TransactionResult.Unauthenticated =>
"You are not signed in. Please sign in to update your username.", "You are not signed in. Please sign in to update your username.",
_ => "An error occurred updating the username. Please try again." _ => "An error occurred updating the username. Please try again."
}; };
@ -414,9 +414,9 @@ private void OnEmailUpdateButtonClick()
_accompanyingText.style.display = DisplayStyle.Flex; _accompanyingText.style.display = DisplayStyle.Flex;
_accompanyingText.text = callback switch _accompanyingText.text = callback switch
{ {
Backend.DatabaseTransactionResult.Ok => Backend.TransactionResult.Ok =>
$"Verification email sent to {_emailField.value}! You may want to sign in again to see the changes.", $"Verification email sent to {_emailField.value}! You may want to sign in again to see the changes.",
Backend.DatabaseTransactionResult.Unauthenticated => Backend.TransactionResult.Unauthenticated =>
"You are not signed in. Please sign in to update your email.", "You are not signed in. Please sign in to update your email.",
_ => "An error occurred updating the email. Please try again." _ => "An error occurred updating the email. Please try again."
}; };
@ -446,8 +446,8 @@ private void OnPasswordUpdateButtonClick()
_accompanyingText.style.display = DisplayStyle.Flex; _accompanyingText.style.display = DisplayStyle.Flex;
_accompanyingText.text = callback switch _accompanyingText.text = callback switch
{ {
Backend.DatabaseTransactionResult.Ok => "Password updated!", Backend.TransactionResult.Ok => "Password updated!",
Backend.DatabaseTransactionResult.Unauthenticated => Backend.TransactionResult.Unauthenticated =>
"You are not signed in. Please sign in to update your password.", "You are not signed in. Please sign in to update your password.",
_ => "An error occurred updating the password. Please try again." _ => "An error occurred updating the password. Please try again."
}; };
@ -635,12 +635,23 @@ private void OnTertiaryActionButtonClick()
// delete local data // delete local data
case State.NotSignedIn: case State.NotSignedIn:
PlayerPrefs.DeleteAll(); PlayerPrefs.DeleteAll();
_accompanyingText.style.display = DisplayStyle.Flex;
_accompanyingText.text = "Local data deleted.";
GameManager.Instance.Data.LoadFromTheWorld(GameManager.Instance.FireLocalPlayerDataChangeCallbacks); GameManager.Instance.Data.LoadFromTheWorld(GameManager.Instance.FireLocalPlayerDataChangeCallbacks);
break; break;
// delete user account // delete user account
case State.SignedIn: case State.SignedIn:
GameManager.Instance.Backend.DeleteUser(); GameManager.Instance.Backend.DeleteUser(result =>
{
_accompanyingText.style.display = DisplayStyle.Flex;
_accompanyingText.text = result switch
{
Backend.TransactionResult.Ok => "Account deleted.",
Backend.TransactionResult.Unauthenticated => "You are not signed in.",
_ => "An error occurred deleting the account. Please try again."
};
});
break; break;
case State.AfterContinue: case State.AfterContinue:

View file

@ -28,16 +28,6 @@ public enum AuthenticationResult
GenericError GenericError
} }
/// <summary>
/// generic enum for the result of a database transaction
/// </summary>
public enum DatabaseTransactionResult
{
Ok,
Unauthenticated,
Error
}
/// <summary> /// <summary>
/// enum for the connection status of the firebase backend /// enum for the connection status of the firebase backend
/// </summary> /// </summary>
@ -51,6 +41,16 @@ public enum FirebaseConnectionStatus
InternalError // "an unknown error occurred" InternalError // "an unknown error occurred"
} }
/// <summary>
/// generic enum for the result of a database transaction
/// </summary>
public enum TransactionResult
{
Ok,
Unauthenticated,
Error
}
public enum UserAccountDetailTargetEnum public enum UserAccountDetailTargetEnum
{ {
Username, Username,
@ -454,14 +454,14 @@ private void RetrieveUsername()
/// <summary> /// <summary>
/// function to retrieve the user's username from the database /// function to retrieve the user's username from the database
/// </summary> /// </summary>
private void RetrieveUsernameWithCallback(Action<DatabaseTransactionResult, string> callback) private void RetrieveUsernameWithCallback(Action<TransactionResult, string> callback)
{ {
if (!Status.Equals(FirebaseConnectionStatus.Connected)) return; if (!Status.Equals(FirebaseConnectionStatus.Connected)) return;
if (_user == null) if (_user == null)
{ {
Debug.LogError("receiving username post-authentication but user is null (should be unreachable)"); Debug.LogError("receiving username post-authentication but user is null (should be unreachable)");
callback(DatabaseTransactionResult.Unauthenticated, "Unknown"); callback(TransactionResult.Unauthenticated, "Unknown");
return; return;
} }
@ -471,16 +471,16 @@ private void RetrieveUsernameWithCallback(Action<DatabaseTransactionResult, stri
.GetValueAsync() .GetValueAsync()
.ContinueWithOnMainThread(task => .ContinueWithOnMainThread(task =>
{ {
DatabaseTransactionResult result; TransactionResult result;
if (task.IsCompletedSuccessfully) if (task.IsCompletedSuccessfully)
{ {
result = DatabaseTransactionResult.Ok; result = TransactionResult.Ok;
_username = task.Result.Value.ToString(); _username = task.Result.Value.ToString();
Debug.Log($"our username is {_username}"); Debug.Log($"our username is {_username}");
} }
else else
{ {
result = DatabaseTransactionResult.Error; result = TransactionResult.Error;
_username = "Unknown"; _username = "Unknown";
Debug.LogError("failed to get username"); Debug.LogError("failed to get username");
} }
@ -514,18 +514,33 @@ public void SignOutUser()
/// <summary> /// <summary>
/// abstraction function to delete the user /// abstraction function to delete the user
/// </summary> /// </summary>
public void DeleteUser() public void DeleteUser(Action<TransactionResult> callback)
{ {
if (!Status.Equals(FirebaseConnectionStatus.Connected))
{
callback(TransactionResult.Error);
return;
}
if (_user == null)
{
callback(TransactionResult.Unauthenticated);
return;
}
_user.DeleteAsync().ContinueWithOnMainThread(task => _user.DeleteAsync().ContinueWithOnMainThread(task =>
{ {
if (task.IsCompletedSuccessfully) if (task.IsCompletedSuccessfully)
{ {
Debug.Log("user deleted"); Debug.Log("user deleted");
SignOutUser(); _user = null;
FireOnSignOutCallbacks();
callback(TransactionResult.Ok);
} }
else else
{ {
Debug.LogError(task.Exception); Debug.LogError($"error deleting user: {task.Exception}");
callback(TransactionResult.Error);
} }
}); });
} }
@ -556,16 +571,16 @@ public void ResetUserPassword(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 /// callback function that takes in a <c>TransactionResult</c> enum and a
/// <c>List&lt;LocalPlayerData.Score&gt;</c> /// <c>List&lt;LocalPlayerData.Score&gt;</c>
/// </param> /// </param>
public void GetRecentScores(Action<DatabaseTransactionResult, List<LocalPlayerData.Score>> callback) public void GetRecentScores(Action<TransactionResult, List<LocalPlayerData.Score>> callback)
{ {
if (!Status.Equals(FirebaseConnectionStatus.Connected)) return; if (!Status.Equals(FirebaseConnectionStatus.Connected)) return;
if (_user == null) if (_user == null)
{ {
callback(DatabaseTransactionResult.Unauthenticated, new List<LocalPlayerData.Score>(0)); callback(TransactionResult.Unauthenticated, new List<LocalPlayerData.Score>(0));
return; return;
} }
@ -578,7 +593,7 @@ public void GetRecentScores(Action<DatabaseTransactionResult, List<LocalPlayerDa
if (!task.IsCompletedSuccessfully) if (!task.IsCompletedSuccessfully)
{ {
Debug.LogError(task.Exception); Debug.LogError(task.Exception);
callback(DatabaseTransactionResult.Error, new List<LocalPlayerData.Score>(0)); callback(TransactionResult.Error, new List<LocalPlayerData.Score>(0));
return; return;
} }
@ -594,7 +609,7 @@ public void GetRecentScores(Action<DatabaseTransactionResult, List<LocalPlayerDa
Debug.LogError($"{e}\n{child.GetRawJsonValue()}"); Debug.LogError($"{e}\n{child.GetRawJsonValue()}");
} }
callback(DatabaseTransactionResult.Ok, scores); callback(TransactionResult.Ok, scores);
GameManager.Instance.FireLocalPlayerDataChangeCallbacks(GameManager.Instance.Data); GameManager.Instance.FireLocalPlayerDataChangeCallbacks(GameManager.Instance.Data);
}); });
} }
@ -603,16 +618,16 @@ public void GetRecentScores(Action<DatabaseTransactionResult, List<LocalPlayerDa
/// abstraction function to get the user's best scores from the database /// abstraction function to get the user's best scores from the database
/// </summary> /// </summary>
/// <param name="callback"> /// <param name="callback">
/// callback function that takes in a <c>DatabaseTransactionResult</c> enum and a /// callback function that takes in a <c>TransactionResult</c> enum and a
/// <c>List&lt;LocalPlayerData.Score&gt;</c> /// <c>List&lt;LocalPlayerData.Score&gt;</c>
/// </param> /// </param>
private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerData.Score>> callback) private void GetBestScores(Action<TransactionResult, List<LocalPlayerData.Score>> callback)
{ {
if (!Status.Equals(FirebaseConnectionStatus.Connected)) return; if (!Status.Equals(FirebaseConnectionStatus.Connected)) return;
if (_user == null) if (_user == null)
{ {
callback(DatabaseTransactionResult.Unauthenticated, new List<LocalPlayerData.Score>(0)); callback(TransactionResult.Unauthenticated, new List<LocalPlayerData.Score>(0));
return; return;
} }
@ -625,7 +640,7 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
if (!task.IsCompletedSuccessfully) if (!task.IsCompletedSuccessfully)
{ {
Debug.LogError(task.Exception); Debug.LogError(task.Exception);
callback(DatabaseTransactionResult.Error, new List<LocalPlayerData.Score>(0)); callback(TransactionResult.Error, new List<LocalPlayerData.Score>(0));
return; return;
} }
@ -641,7 +656,7 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
Debug.LogError(e); Debug.LogError(e);
} }
callback(DatabaseTransactionResult.Ok, scores); callback(TransactionResult.Ok, scores);
GameManager.Instance.FireLocalPlayerDataChangeCallbacks(GameManager.Instance.Data); GameManager.Instance.FireLocalPlayerDataChangeCallbacks(GameManager.Instance.Data);
}); });
} }
@ -650,16 +665,16 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
/// abstraction function to submit a score to the database /// abstraction function to submit a score to the database
/// </summary> /// </summary>
/// <param name="score">score</param> /// <param name="score">score</param>
/// <param name="callback">callback function that takes in a <c>DatabaseTransactionResult</c> enum </param> /// <param name="callback">callback function that takes in a <c>TransactionResult</c> enum </param>
public void SubmitScore( public void SubmitScore(
LocalPlayerData.Score score, LocalPlayerData.Score score,
Action<DatabaseTransactionResult> callback) Action<TransactionResult> callback)
{ {
if (!Status.Equals(FirebaseConnectionStatus.Connected)) return; if (!Status.Equals(FirebaseConnectionStatus.Connected)) return;
if (_user == null) if (_user == null)
{ {
callback(DatabaseTransactionResult.Unauthenticated); callback(TransactionResult.Unauthenticated);
return; return;
} }
@ -670,12 +685,12 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
{ {
if (task.IsCompletedSuccessfully) if (task.IsCompletedSuccessfully)
{ {
callback(DatabaseTransactionResult.Ok); callback(TransactionResult.Ok);
} }
else else
{ {
Debug.LogError(task.Exception); Debug.LogError(task.Exception);
callback(DatabaseTransactionResult.Error); callback(TransactionResult.Error);
} }
}); });
} }
@ -685,15 +700,15 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
/// 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"> /// <param name="callback">
/// callback function that takes in a <c>DatabaseTransactionResult</c> enum and a user rating /// callback function that takes in a <c>TransactionResult</c> enum and a user rating
/// <c>float</c> /// <c>float</c>
/// </param> /// </param>
public void CalculateUserRating( public void CalculateUserRating(
Action<DatabaseTransactionResult, float> callback) Action<TransactionResult, float> callback)
{ {
GetRecentScores((recentRes, recentScores) => GetRecentScores((recentRes, recentScores) =>
{ {
if (recentRes != DatabaseTransactionResult.Ok) if (recentRes != TransactionResult.Ok)
{ {
Debug.Log("failed to get recent scores"); Debug.Log("failed to get recent scores");
callback(recentRes, 0f); callback(recentRes, 0f);
@ -706,7 +721,7 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
GetBestScores((bestRes, bestScores) => GetBestScores((bestRes, bestScores) =>
{ {
if (bestRes != DatabaseTransactionResult.Ok) if (bestRes != TransactionResult.Ok)
{ {
Debug.Log("failed to get recent scores"); Debug.Log("failed to get recent scores");
GameManager.Instance.FireLocalPlayerDataChangeCallbacks(GameManager.Instance.Data); GameManager.Instance.FireLocalPlayerDataChangeCallbacks(GameManager.Instance.Data);
@ -719,7 +734,7 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
while (bestScoreQueue.Count > LocalPlayerData.MaxBestScores) bestScoreQueue.Dequeue(); while (bestScoreQueue.Count > LocalPlayerData.MaxBestScores) bestScoreQueue.Dequeue();
GameManager.Instance.FireLocalPlayerDataChangeCallbacks(GameManager.Instance.Data); GameManager.Instance.FireLocalPlayerDataChangeCallbacks(GameManager.Instance.Data);
callback(DatabaseTransactionResult.Ok, GameManager.Instance.Data.CalculateUserRating()); callback(TransactionResult.Ok, GameManager.Instance.Data.CalculateUserRating());
}); });
}); });
} }
@ -727,15 +742,15 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
/// <summary> /// <summary>
/// abstraction function to update the user's rating in the database /// abstraction function to update the user's rating in the database
/// </summary> /// </summary>
/// <param name="callback">callback function that takes in a <c>DatabaseTransactionResult</c> enum </param> /// <param name="callback">callback function that takes in a <c>TransactionResult</c> enum </param>
public void UpdateUserRating( public void UpdateUserRating(
Action<DatabaseTransactionResult> callback) Action<TransactionResult> callback)
{ {
if (!Status.Equals(FirebaseConnectionStatus.Connected)) return; if (!Status.Equals(FirebaseConnectionStatus.Connected)) return;
if (_user == null) if (_user == null)
{ {
callback(DatabaseTransactionResult.Unauthenticated); callback(TransactionResult.Unauthenticated);
return; return;
} }
@ -750,12 +765,12 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
if (task.IsCompletedSuccessfully) if (task.IsCompletedSuccessfully)
{ {
Debug.Log($"updated online user rating to {userRating}"); Debug.Log($"updated online user rating to {userRating}");
callback(DatabaseTransactionResult.Ok); callback(TransactionResult.Ok);
} }
else else
{ {
Debug.LogError(task.Exception); Debug.LogError(task.Exception);
callback(DatabaseTransactionResult.Error); callback(TransactionResult.Error);
} }
}); });
} }
@ -764,10 +779,10 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
/// abstraction function to get the leaderboard from the database /// abstraction function to get the leaderboard 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;LeaderboardEntry&gt;</c> /// callback function that takes in a <c>TransactionResult</c> enum and a <c>List&lt;LeaderboardEntry&gt;</c>
/// </param> /// </param>
public void GetLeaderboard( public void GetLeaderboard(
Action<DatabaseTransactionResult, LeaderboardEntry[]> callback) Action<TransactionResult, LeaderboardEntry[]> callback)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
@ -777,18 +792,18 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
/// </summary> /// </summary>
/// <param name="target">the target account detail to update</param> /// <param name="target">the target account detail to update</param>
/// <param name="newValue">the new value for the target account detail</param> /// <param name="newValue">the new value for the target account detail</param>
/// <param name="callback">callback function that takes in a <c>DatabaseTransactionResult</c> enum</param> /// <param name="callback">callback function that takes in a <c>TransactionResult</c> enum</param>
/// <exception cref="ArgumentOutOfRangeException">thrown when the target is not a valid UserAccountDetailTargetEnum</exception> /// <exception cref="ArgumentOutOfRangeException">thrown when the target is not a valid UserAccountDetailTargetEnum</exception>
public void UpdateUserAccountDetail( public void UpdateUserAccountDetail(
UserAccountDetailTargetEnum target, UserAccountDetailTargetEnum target,
string newValue, string newValue,
Action<DatabaseTransactionResult> callback) Action<TransactionResult> callback)
{ {
if (!Status.Equals(FirebaseConnectionStatus.Connected)) callback(DatabaseTransactionResult.Unauthenticated); if (!Status.Equals(FirebaseConnectionStatus.Connected)) callback(TransactionResult.Unauthenticated);
if (_user == null) if (_user == null)
{ {
callback(DatabaseTransactionResult.Unauthenticated); callback(TransactionResult.Unauthenticated);
return; return;
} }
@ -801,12 +816,12 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
{ {
GameManager.Instance.Data.LastKnownEmail = newValue; GameManager.Instance.Data.LastKnownEmail = newValue;
GameManager.Instance.FireLocalPlayerDataChangeCallbacks(GameManager.Instance.Data); GameManager.Instance.FireLocalPlayerDataChangeCallbacks(GameManager.Instance.Data);
callback(DatabaseTransactionResult.Ok); callback(TransactionResult.Ok);
} }
else else
{ {
Debug.LogError(task.Exception); Debug.LogError(task.Exception);
callback(DatabaseTransactionResult.Error); callback(TransactionResult.Error);
} }
}); });
break; break;
@ -823,12 +838,12 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
_username = newValue; _username = newValue;
GameManager.Instance.Data.LastKnownUsername = newValue; GameManager.Instance.Data.LastKnownUsername = newValue;
GameManager.Instance.FireLocalPlayerDataChangeCallbacks(GameManager.Instance.Data); GameManager.Instance.FireLocalPlayerDataChangeCallbacks(GameManager.Instance.Data);
callback(DatabaseTransactionResult.Ok); callback(TransactionResult.Ok);
} }
else else
{ {
Debug.LogError(task.Exception); Debug.LogError(task.Exception);
callback(DatabaseTransactionResult.Error); callback(TransactionResult.Error);
} }
}); });
break; break;
@ -838,12 +853,12 @@ private void GetBestScores(Action<DatabaseTransactionResult, List<LocalPlayerDat
{ {
if (task.IsCompletedSuccessfully) if (task.IsCompletedSuccessfully)
{ {
callback(DatabaseTransactionResult.Ok); callback(TransactionResult.Ok);
} }
else else
{ {
Debug.LogError(task.Exception); Debug.LogError(task.Exception);
callback(DatabaseTransactionResult.Error); callback(TransactionResult.Error);
} }
}); });
break; break;

View file

@ -295,7 +295,7 @@ public void SignalGameEnd(List<Gameplay.RoundInfo> playedRounds)
Backend.SubmitScore(score, Backend.SubmitScore(score,
submitRes => submitRes =>
{ {
if (submitRes != Backend.DatabaseTransactionResult.Ok) if (submitRes != Backend.TransactionResult.Ok)
{ {
Debug.Log("couldn't submit score"); Debug.Log("couldn't submit score");
TransitionToResultsView(_data.CalculateUserRating()); TransitionToResultsView(_data.CalculateUserRating());
@ -304,7 +304,7 @@ public void SignalGameEnd(List<Gameplay.RoundInfo> playedRounds)
Backend.CalculateUserRating((urcRes, userRating) => Backend.CalculateUserRating((urcRes, userRating) =>
{ {
if (urcRes != Backend.DatabaseTransactionResult.Ok) if (urcRes != Backend.TransactionResult.Ok)
{ {
Debug.Log("couldn't calculate user rating"); Debug.Log("couldn't calculate user rating");
TransitionToResultsView(_data.CalculateUserRating()); TransitionToResultsView(_data.CalculateUserRating());
@ -313,7 +313,7 @@ public void SignalGameEnd(List<Gameplay.RoundInfo> playedRounds)
Backend.UpdateUserRating(updateRes => Backend.UpdateUserRating(updateRes =>
{ {
if (updateRes != Backend.DatabaseTransactionResult.Ok) if (updateRes != Backend.TransactionResult.Ok)
{ {
Debug.Log("calculated user rating but couldn't update it"); Debug.Log("calculated user rating but couldn't update it");
TransitionToResultsView(userRating); TransitionToResultsView(userRating);
@ -337,8 +337,10 @@ void TransitionToResultsView(float rating)
: "\nYour rating could not be calculated."; : "\nYour rating could not be calculated.";
// build the result text and show the results view // build the result text and show the results view
ui.UI.Q<Label>("ResultsText").text = string.Join(Environment.NewLine, $"Over {playedRounds.Count:N0} rounds,", ui.UI.Q<Label>("ResultsText").text = string.Join(Environment.NewLine,
$"you were {LocalPlayerData.UserRatingScalingF(gameAccuracy):F2}% accurate. (raw ΔEok={gameAccuracy:F2}%)", "", $"Over {playedRounds.Count:N0} rounds,",
$"you were {LocalPlayerData.UserRatingScalingF(gameAccuracy):F2}% accurate. (raw ΔEok={gameAccuracy:F2}%)",
"",
$"Lightness was {adjustedGameLightnessAcc:F2}% accurate. ({lAccDeltaText} from your average)", $"Lightness was {adjustedGameLightnessAcc:F2}% accurate. ({lAccDeltaText} from your average)",
$"Chroma was {adjustedGameChromaAcc:F2}% accurate. ({cAccDeltaText} from your average)", $"Chroma was {adjustedGameChromaAcc:F2}% accurate. ({cAccDeltaText} from your average)",
$"Hue was {adjustedGameHueAcc:F2}% accurate. ({hAccDeltaText} from your average)") + ratingText; $"Hue was {adjustedGameHueAcc:F2}% accurate. ({hAccDeltaText} from your average)") + ratingText;

View file

@ -118,7 +118,8 @@ private void StoreRoundInfo()
TemplateColour = _templateColour.style.backgroundColor.value, TemplateColour = _templateColour.style.backgroundColor.value,
ResponseColour = _responseColour.style.backgroundColor.value ResponseColour = _responseColour.style.backgroundColor.value
}); });
Debug.Log($"stored round info (Template is {_templateColour.style.backgroundColor.value}, Response is {_responseColour.style.backgroundColor.value})"); Debug.Log(
$"stored round info (Template is {_templateColour.style.backgroundColor.value}, Response is {_responseColour.style.backgroundColor.value})");
} }
/// <summary> /// <summary>

View file

@ -22,14 +22,10 @@ public class LocalPlayerData
private const float ExponentialUserRatingGamma = 2f; private const float ExponentialUserRatingGamma = 2f;
/// <summary> /// <summary>
/// last known email used /// queue of the best online scores,
/// used in user rating calculation and accuracy display stats
/// </summary> /// </summary>
public string LastKnownEmail = ""; public readonly Queue<Score> BestOnlineScores = new(20);
/// <summary>
/// last known username used
/// </summary>
public string LastKnownUsername = "Guest";
/// <summary> /// <summary>
/// queue of the 10 most recent local scores /// queue of the 10 most recent local scores
@ -43,10 +39,14 @@ public class LocalPlayerData
public readonly Queue<Score> RecentOnlineScores = new(10); public readonly Queue<Score> RecentOnlineScores = new(10);
/// <summary> /// <summary>
/// queue of the best online scores, /// last known email used
/// used in user rating calculation and accuracy display stats
/// </summary> /// </summary>
public readonly Queue<Score> BestOnlineScores = new(20); public string LastKnownEmail = "";
/// <summary>
/// last known username used
/// </summary>
public string LastKnownUsername = "Guest";
/// <summary> /// <summary>
/// loads player data from player prefs and database /// loads player data from player prefs and database
@ -154,11 +154,9 @@ public void RegisterLocalScore(Score score)
} }
/// <summary> /// <summary>
/// registers a score to the player's online data /// scaling function for user ratings
/// </summary> /// </summary>
/// <returns> /// <returns>the scaled user rating <c>double</c></returns>
/// the
/// </returns>
public static double UserRatingScalingF(double rating) public static double UserRatingScalingF(double rating)
{ {
var rawUserRating = Math.Clamp(rating, 0d, 100d); var rawUserRating = Math.Clamp(rating, 0d, 100d);
@ -190,13 +188,15 @@ public float CalculateUserRating()
foreach (var score in recentScores.Take(10)) foreach (var score in recentScores.Take(10))
{ {
totalRating += (score.AvgLightnessAccuracy + score.AvgChromaAccuracy + score.AvgHueAccuracy + score.AvgPerceivedAccuracy) / 4d; totalRating += (score.AvgLightnessAccuracy + score.AvgChromaAccuracy + score.AvgHueAccuracy +
score.AvgPerceivedAccuracy) / 4d;
scores++; scores++;
} }
foreach (var score in bestScores.Take(20)) foreach (var score in bestScores.Take(20))
{ {
totalRating += (score.AvgLightnessAccuracy + score.AvgChromaAccuracy + score.AvgHueAccuracy + score.AvgPerceivedAccuracy) / 4d; totalRating += (score.AvgLightnessAccuracy + score.AvgChromaAccuracy + score.AvgHueAccuracy +
score.AvgPerceivedAccuracy) / 4d;
scores++; scores++;
} }

View file

@ -66,6 +66,13 @@ private void Start()
SetDisplayState(DisplayState.DefaultView); SetDisplayState(DisplayState.DefaultView);
} }
private void Update()
{
var gameplay = GameManager.Instance.Gameplay;
if (gameplay == null) return;
if (gameplay.Round >= 1) gameplay.Update();
}
/// <summary> /// <summary>
/// initialise variables and register callbacks /// initialise variables and register callbacks
/// </summary> /// </summary>
@ -74,13 +81,6 @@ private void OnEnable()
UI = GetComponent<UIDocument>().rootVisualElement; UI = GetComponent<UIDocument>().rootVisualElement;
} }
private void Update()
{
var gameplay = GameManager.Instance.Gameplay;
if (gameplay == null) return;
if (gameplay.Round >= 1) gameplay.Update();
}
/// <summary> /// <summary>
/// function to show a menu based on the enum passed, /// function to show a menu based on the enum passed,
/// and any other necessary actions /// and any other necessary actions

View file

@ -1,128 +1,69 @@
<ui:UXML xmlns:ui="UnityEngine.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" <ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" xsi="http://www.w3.org/2001/XMLSchema-instance" engine="UnityEngine.UIElements" editor="UnityEditor.UIElements" noNamespaceSchemaLocation="../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
engine="UnityEngine.UIElements" editor="UnityEditor.UIElements"
noNamespaceSchemaLocation="../../UIElementsSchema/UIElements.xsd" editor-extension-mode="False">
<Style src="project://database/Assets/UI/GameUI.uss?fileID=7433441132597879392&amp;guid=2c7ff79f21a3e8e408e76d75944d575b&amp;type=3#GameUI" /> <Style src="project://database/Assets/UI/GameUI.uss?fileID=7433441132597879392&amp;guid=2c7ff79f21a3e8e408e76d75944d575b&amp;type=3#GameUI" />
<ui:VisualElement name="Root" <ui:VisualElement name="Root" style="flex-grow: 1; background-color: rgb(208, 152, 194); justify-content: space-around; align-items: stretch; align-self: stretch; flex-direction: row;">
style="flex-grow: 1; background-color: rgb(208, 152, 194); justify-content: space-around; align-items: stretch; align-self: stretch; flex-direction: row;"> <ui:VisualElement name="SideView" style="flex-grow: 0; background-color: rgb(15, 13, 27); flex-shrink: 0; width: 25%; justify-content: space-between;">
<ui:VisualElement name="SideView" <ui:VisualElement name="Header" style="flex-grow: 0; margin-top: 10%; margin-right: 10%; margin-bottom: 0; margin-left: 10%; justify-content: space-between; align-items: flex-start; flex-direction: column;">
style="flex-grow: 0; background-color: rgb(15, 13, 27); flex-shrink: 0; width: 25%; justify-content: space-between;"> <ui:Label tabindex="-1" text="Colour Me OK" parse-escape-sequences="true" display-tooltip-when-elided="true" name="Name" style="color: rgb(208, 152, 194); -unity-font-style: bold; font-size: 58px; white-space: normal;" />
<ui:VisualElement name="Header" <ui:Label tabindex="-1" text="Color Me OK is a colour-matching game using the coordinates of the OKLCh colour model on the OKLab perceptually uniform colour space." parse-escape-sequences="true" display-tooltip-when-elided="true" name="Description" style="font-size: 16px; white-space: normal; text-overflow: clip; color: rgb(208, 152, 194);" />
style="flex-grow: 0; margin-top: 10%; margin-right: 10%; margin-bottom: 0; margin-left: 10%; justify-content: space-between; align-items: flex-start; flex-direction: column;">
<ui:Label tabindex="-1" text="Colour Me OK" parse-escape-sequences="true"
display-tooltip-when-elided="true" name="Name"
style="color: rgb(208, 152, 194); -unity-font-style: bold; font-size: 58px; white-space: normal;"/>
<ui:Label tabindex="-1"
text="Color Me OK is a colour-matching game using the coordinates of the OKLCh colour model on the OKLab perceptually uniform colour space."
parse-escape-sequences="true" display-tooltip-when-elided="true" name="Description"
style="font-size: 16px; white-space: normal; text-overflow: clip; color: rgb(208, 152, 194);"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="Content" <ui:VisualElement name="Content" style="flex-grow: 0; padding-right: 10%; padding-bottom: 10%; padding-left: 10%;">
style="flex-grow: 0; padding-right: 10%; padding-bottom: 10%; padding-left: 10%;"> <ui:Button text="Play ↗" parse-escape-sequences="true" display-tooltip-when-elided="true" name="PlayButton" style="display: none;" />
<ui:Button text="Play ↗" parse-escape-sequences="true" display-tooltip-when-elided="true" <ui:Button text="Leaderboard ↗" parse-escape-sequences="true" display-tooltip-when-elided="true" name="LeaderboardButton" style="display: none;" />
name="PlayButton" style="display: none;"/> <ui:Button text="Account ↗" parse-escape-sequences="true" display-tooltip-when-elided="true" name="AccountButton" style="display: none;" />
<ui:Button text="Leaderboard ↗" parse-escape-sequences="true" display-tooltip-when-elided="true" <ui:VisualElement name="AccountSection" style="flex-grow: 0; border-top-color: rgb(208, 152, 194); margin-top: 0; border-top-width: 1px; margin-right: 0; margin-bottom: 0; margin-left: 0; border-bottom-color: rgb(208, 152, 194); padding-bottom: 12px; border-bottom-width: 1px; display: flex;">
name="LeaderboardButton" style="display: none;"/> <ui:VisualElement name="PlayerDetails" style="flex-grow: 1; flex-direction: row; align-items: stretch; justify-content: space-between; font-size: 10px; align-self: stretch;">
<ui:Button text="Account ↗" parse-escape-sequences="true" display-tooltip-when-elided="true"
name="AccountButton" style="display: none;"/>
<ui:VisualElement name="AccountSection"
style="flex-grow: 0; border-top-color: rgb(208, 152, 194); margin-top: 0; border-top-width: 1px; margin-right: 0; margin-bottom: 0; margin-left: 0; border-bottom-color: rgb(208, 152, 194); padding-bottom: 12px; border-bottom-width: 1px; display: flex;">
<ui:VisualElement name="PlayerDetails"
style="flex-grow: 1; flex-direction: row; align-items: stretch; justify-content: space-between; font-size: 10px; align-self: stretch;">
<ui:VisualElement name="PlayerNameDetail" style="flex-grow: 1;"> <ui:VisualElement name="PlayerNameDetail" style="flex-grow: 1;">
<ui:Label tabindex="-1" text="Player" parse-escape-sequences="true" <ui:Label tabindex="-1" text="Player" parse-escape-sequences="true" display-tooltip-when-elided="true" name="PlayerHeader" style="-unity-font-style: normal; font-size: 14px; padding-bottom: 0; -unity-text-align: lower-left;" />
display-tooltip-when-elided="true" name="PlayerHeader" <ui:Label tabindex="-1" text="Not Signed In" parse-escape-sequences="true" display-tooltip-when-elided="true" name="PlayerText" style="-unity-font-style: normal; font-size: 18px; padding-top: 6px; text-overflow: clip;" />
style="-unity-font-style: normal; font-size: 14px; padding-bottom: 0; -unity-text-align: lower-left;"/>
<ui:Label tabindex="-1" text="Not Signed In" parse-escape-sequences="true"
display-tooltip-when-elided="true" name="PlayerText"
style="-unity-font-style: normal; font-size: 18px; padding-top: 6px;"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="PlayerRatingDetail" style="flex-grow: 0;"> <ui:VisualElement name="PlayerRatingDetail" style="flex-grow: 0;">
<ui:Label tabindex="-1" text="Rating" parse-escape-sequences="true" <ui:Label tabindex="-1" text="Rating" parse-escape-sequences="true" display-tooltip-when-elided="true" name="RatingHeader" style="-unity-font-style: normal; font-size: 14px; padding-bottom: 0; -unity-text-align: lower-right;" />
display-tooltip-when-elided="true" name="RatingHeader" <ui:Label tabindex="-1" text="00.00%" parse-escape-sequences="true" display-tooltip-when-elided="true" name="RatingText" style="-unity-font-style: normal; font-size: 18px; padding-top: 6px; -unity-text-align: upper-right; text-overflow: ellipsis;" />
style="-unity-font-style: normal; font-size: 14px; padding-bottom: 0; -unity-text-align: lower-right;"/>
<ui:Label tabindex="-1" text="00.00%" parse-escape-sequences="true"
display-tooltip-when-elided="true" name="RatingText"
style="-unity-font-style: normal; font-size: 18px; padding-top: 6px; -unity-text-align: upper-right;"/>
</ui:VisualElement> </ui:VisualElement>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="AccuracyDetails" <ui:VisualElement name="AccuracyDetails" style="flex-grow: 1; flex-direction: row; align-items: stretch; justify-content: space-between; font-size: 10px; align-self: stretch; padding-top: 4px;">
style="flex-grow: 1; flex-direction: row; align-items: stretch; justify-content: space-between; font-size: 10px; align-self: stretch; padding-top: 4px;">
<ui:VisualElement name="LightnessAccuracyDetail" style="flex-grow: 0;"> <ui:VisualElement name="LightnessAccuracyDetail" style="flex-grow: 0;">
<ui:Label tabindex="-1" text="Lightness&#10;Accuracy" parse-escape-sequences="true" <ui:Label tabindex="-1" text="Lightness&#10;Accuracy" parse-escape-sequences="true" display-tooltip-when-elided="true" name="LightnessAccuracyHeader" style="-unity-font-style: normal; font-size: 14px; padding-bottom: 0; -unity-text-align: lower-left; padding-top: 0;" />
display-tooltip-when-elided="true" name="LightnessAccuracyHeader" <ui:Label tabindex="-1" text="00.0%" parse-escape-sequences="true" display-tooltip-when-elided="true" name="LightnessAccuracyText" style="-unity-font-style: normal; font-size: 18px; padding-top: 6px; padding-bottom: 0;" />
style="-unity-font-style: normal; font-size: 14px; padding-bottom: 0; -unity-text-align: lower-left; padding-top: 0;"/>
<ui:Label tabindex="-1" text="00.0%" parse-escape-sequences="true"
display-tooltip-when-elided="true" name="LightnessAccuracyText"
style="-unity-font-style: normal; font-size: 18px; padding-top: 6px; padding-bottom: 0;"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="ChromaAccuracyDetail" style="flex-grow: 0;"> <ui:VisualElement name="ChromaAccuracyDetail" style="flex-grow: 0;">
<ui:Label tabindex="-1" text="Chroma&#10;Accuracy" parse-escape-sequences="true" <ui:Label tabindex="-1" text="Chroma&#10;Accuracy" parse-escape-sequences="true" display-tooltip-when-elided="true" name="ChromaAccuracyHeader" style="-unity-font-style: normal; font-size: 14px; padding-bottom: 0; -unity-text-align: lower-center; padding-top: 0;" />
display-tooltip-when-elided="true" name="ChromaAccuracyHeader" <ui:Label tabindex="-1" text="00.0%" parse-escape-sequences="true" display-tooltip-when-elided="true" name="ChromaAccuracyText" style="-unity-font-style: normal; font-size: 18px; padding-top: 6px; -unity-text-align: upper-center; padding-bottom: 0;" />
style="-unity-font-style: normal; font-size: 14px; padding-bottom: 0; -unity-text-align: lower-center; padding-top: 0;"/>
<ui:Label tabindex="-1" text="00.0%" parse-escape-sequences="true"
display-tooltip-when-elided="true" name="ChromaAccuracyText"
style="-unity-font-style: normal; font-size: 18px; padding-top: 6px; -unity-text-align: upper-center; padding-bottom: 0;"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="HueAccuracyDetail" style="flex-grow: 0;"> <ui:VisualElement name="HueAccuracyDetail" style="flex-grow: 0;">
<ui:Label tabindex="-1" text="Hue&#10;Accuracy" parse-escape-sequences="true" <ui:Label tabindex="-1" text="Hue&#10;Accuracy" parse-escape-sequences="true" display-tooltip-when-elided="true" name="HueAccuracyHeader" style="-unity-font-style: normal; font-size: 14px; padding-bottom: 0; -unity-text-align: lower-right; padding-top: 0;" />
display-tooltip-when-elided="true" name="HueAccuracyHeader" <ui:Label tabindex="-1" text="00.0%" parse-escape-sequences="true" display-tooltip-when-elided="true" name="HueAccuracyText" style="-unity-font-style: normal; font-size: 18px; padding-top: 6px; -unity-text-align: upper-right; padding-bottom: 0;" />
style="-unity-font-style: normal; font-size: 14px; padding-bottom: 0; -unity-text-align: lower-right; padding-top: 0;"/>
<ui:Label tabindex="-1" text="00.0%" parse-escape-sequences="true"
display-tooltip-when-elided="true" name="HueAccuracyText"
style="-unity-font-style: normal; font-size: 18px; padding-top: 6px; -unity-text-align: upper-right; padding-bottom: 0;"/>
</ui:VisualElement> </ui:VisualElement>
</ui:VisualElement> </ui:VisualElement>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="ConnectionStatus" <ui:VisualElement name="ConnectionStatus" style="flex-grow: 0; border-top-color: rgb(208, 152, 194); margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; border-bottom-color: rgb(208, 152, 194); padding-bottom: 12px; display: flex; border-bottom-width: 1px;">
style="flex-grow: 0; border-top-color: rgb(208, 152, 194); margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; border-bottom-color: rgb(208, 152, 194); padding-bottom: 12px; display: flex; border-bottom-width: 1px;"> <ui:Label tabindex="-1" text="Status: Unknown" parse-escape-sequences="true" display-tooltip-when-elided="true" name="ConnectionStatusText" style="-unity-font-style: normal; font-size: 14px; padding-bottom: 0; -unity-text-align: lower-left; display: flex;" />
<ui:Label tabindex="-1" text="Status: Unknown" parse-escape-sequences="true"
display-tooltip-when-elided="true" name="ConnectionStatusText"
style="-unity-font-style: normal; font-size: 14px; padding-bottom: 0; -unity-text-align: lower-left; display: flex;"/>
</ui:VisualElement> </ui:VisualElement>
</ui:VisualElement> </ui:VisualElement>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="MainView" <ui:VisualElement name="MainView" style="flex-grow: 0; flex-shrink: 0; width: 75%; justify-content: space-between;">
style="flex-grow: 0; flex-shrink: 0; width: 75%; justify-content: space-between;"> <ui:VisualElement name="DefaultView" style="flex-grow: 0; justify-content: space-around; height: 100%; align-self: stretch; display: none;">
<ui:VisualElement name="DefaultView" <ui:VisualElement name="DemoResponseColour" style="flex-grow: 1; background-color: rgb(0, 0, 0); align-self: stretch; justify-content: center;">
style="flex-grow: 0; justify-content: space-around; height: 100%; align-self: stretch; display: none;"> <ui:VisualElement name="DemoResponseSliderContainer" style="flex-grow: 0; margin-top: 3.25%; margin-right: 3.25%; margin-bottom: 3.25%; margin-left: 3.25%; padding-top: 2%; padding-right: 2%; padding-bottom: 2%; padding-left: 2%; border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; background-color: rgb(208, 152, 194);">
<ui:VisualElement name="DemoResponseColour" <ui:Slider label="Lightness" high-value="100" name="DemoResponseLightnessSlider" class="lch-slider" />
style="flex-grow: 1; background-color: rgb(0, 0, 0); align-self: stretch; justify-content: center;">
<ui:VisualElement name="DemoResponseSliderContainer"
style="flex-grow: 0; margin-top: 3.25%; margin-right: 3.25%; margin-bottom: 3.25%; margin-left: 3.25%; padding-top: 2%; padding-right: 2%; padding-bottom: 2%; padding-left: 2%; border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; background-color: rgb(208, 152, 194);">
<ui:Slider label="Lightness" high-value="100" name="DemoResponseLightnessSlider"
class="lch-slider"/>
<ui:Slider label="Chroma" high-value="0.5" name="DemoResponseChromaSlider" class="lch-slider" /> <ui:Slider label="Chroma" high-value="0.5" name="DemoResponseChromaSlider" class="lch-slider" />
<ui:Slider label="Hue" high-value="360" name="DemoResponseHueSlider" class="lch-slider" /> <ui:Slider label="Hue" high-value="360" name="DemoResponseHueSlider" class="lch-slider" />
</ui:VisualElement> </ui:VisualElement>
</ui:VisualElement> </ui:VisualElement>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="GameView" <ui:VisualElement name="GameView" style="flex-grow: 0; margin-top: 3.25%; margin-right: 3.25%; margin-bottom: 3.25%; margin-left: 3.25%; justify-content: space-between; height: 100%; align-self: stretch; display: none;">
style="flex-grow: 0; margin-top: 3.25%; margin-right: 3.25%; margin-bottom: 3.25%; margin-left: 3.25%; justify-content: space-between; height: 100%; align-self: stretch; display: none;"> <ui:VisualElement name="GameHeader" style="flex-grow: 0; flex-direction: row; justify-content: space-between; align-self: stretch;">
<ui:VisualElement name="GameHeader" <ui:Label tabindex="-1" text="1/5" parse-escape-sequences="true" display-tooltip-when-elided="true" name="RoundText" style="font-size: 58px; -unity-font-style: normal;" />
style="flex-grow: 0; flex-direction: row; justify-content: space-between; align-self: stretch;"> <ui:Label tabindex="-1" text="0.00s" parse-escape-sequences="true" display-tooltip-when-elided="true" name="TimeText" style="-unity-text-align: lower-right; font-size: 58px;" />
<ui:Label tabindex="-1" text="1/5" parse-escape-sequences="true" display-tooltip-when-elided="true"
name="RoundText" style="font-size: 58px; -unity-font-style: normal;"/>
<ui:Label tabindex="-1" text="0.00s" parse-escape-sequences="true"
display-tooltip-when-elided="true" name="TimeText"
style="-unity-text-align: lower-right; font-size: 58px;"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="ColourPreview" <ui:VisualElement name="ColourPreview" style="flex-grow: 0; height: 50%; background-color: rgb(255, 255, 255); border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; flex-direction: row; padding-top: 2%; padding-right: 2%; padding-bottom: 2%; padding-left: 2%; justify-content: space-between;">
style="flex-grow: 0; height: 50%; background-color: rgb(255, 255, 255); border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; flex-direction: row; padding-top: 2%; padding-right: 2%; padding-bottom: 2%; padding-left: 2%; justify-content: space-between;"> <ui:VisualElement name="TemplatePreview" style="flex-grow: 0; flex-shrink: 0; height: 100%; width: 49%;">
<ui:VisualElement name="TemplatePreview" <ui:Label tabindex="-1" text="Template" parse-escape-sequences="true" display-tooltip-when-elided="true" name="TemplateText" style="margin-bottom: 12px; margin-top: 0; -unity-font-style: normal;" />
style="flex-grow: 0; flex-shrink: 0; height: 100%; width: 49%;"> <ui:VisualElement name="TemplateColour" style="flex-grow: 1; border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; background-color: rgb(0, 0, 0);" />
<ui:Label tabindex="-1" text="Template" parse-escape-sequences="true"
display-tooltip-when-elided="true" name="TemplateText"
style="margin-bottom: 12px; margin-top: 0; -unity-font-style: normal;"/>
<ui:VisualElement name="TemplateColour"
style="flex-grow: 1; border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; background-color: rgb(0, 0, 0);"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="ResponsePreview" <ui:VisualElement name="ResponsePreview" style="flex-grow: 0; flex-shrink: 0; height: 100%; width: 49%;">
style="flex-grow: 0; flex-shrink: 0; height: 100%; width: 49%;"> <ui:Label tabindex="-1" text="Response" parse-escape-sequences="true" display-tooltip-when-elided="true" name="ResponseText" style="margin-bottom: 12px; margin-top: 0; -unity-font-style: normal; -unity-text-align: upper-right;" />
<ui:Label tabindex="-1" text="Response" parse-escape-sequences="true" <ui:VisualElement name="ResponseColour" style="flex-grow: 1; border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; background-color: rgb(0, 0, 0);" />
display-tooltip-when-elided="true" name="ResponseText"
style="margin-bottom: 12px; margin-top: 0; -unity-font-style: normal; -unity-text-align: upper-right;"/>
<ui:VisualElement name="ResponseColour"
style="flex-grow: 1; border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; background-color: rgb(0, 0, 0);"/>
</ui:VisualElement> </ui:VisualElement>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="ResponseSliders" style="flex-grow: 0; display: flex;"> <ui:VisualElement name="ResponseSliders" style="flex-grow: 0; display: flex;">
@ -131,115 +72,65 @@
<ui:Slider label="Hue" high-value="360" name="ResponseHueSlider" class="lch-slider" /> <ui:Slider label="Hue" high-value="360" name="ResponseHueSlider" class="lch-slider" />
</ui:VisualElement> </ui:VisualElement>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="ResultsView" <ui:VisualElement name="ResultsView" style="flex-grow: 1; display: none; margin-top: 3.25%; margin-right: 3.25%; margin-bottom: 3.25%; margin-left: 3.25%; justify-content: space-between;">
style="flex-grow: 1; display: none; margin-top: 3.25%; margin-right: 3.25%; margin-bottom: 3.25%; margin-left: 3.25%; justify-content: space-between;"> <ui:VisualElement name="ColourShowcase" style="flex-grow: 1; background-color: rgb(255, 255, 255); border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; padding-top: 2%; padding-right: 2%; padding-bottom: 2%; padding-left: 2%; margin-bottom: 2%; margin-top: 0; margin-right: 0; margin-left: 0;">
<ui:VisualElement name="ColourShowcase" <ui:Label tabindex="-1" text="Templates" parse-escape-sequences="true" display-tooltip-when-elided="true" name="ShowcaseTemplatesText" style="-unity-text-align: upper-center; margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; padding-top: 0; padding-right: 0; padding-bottom: 2%; padding-left: 0;" />
style="flex-grow: 1; background-color: rgb(255, 255, 255); border-top-left-radius: 8px; border-top-right-radius: 8px; border-bottom-right-radius: 8px; border-bottom-left-radius: 8px; padding-top: 2%; padding-right: 2%; padding-bottom: 2%; padding-left: 2%; margin-bottom: 2%; margin-top: 0; margin-right: 0; margin-left: 0;">
<ui:Label tabindex="-1" text="Templates" parse-escape-sequences="true"
display-tooltip-when-elided="true" name="ShowcaseTemplatesText"
style="-unity-text-align: upper-center; margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0; padding-top: 0; padding-right: 0; padding-bottom: 2%; padding-left: 0;"/>
<ui:VisualElement name="Gallery" style="flex-grow: 1; flex-direction: row;"> <ui:VisualElement name="Gallery" style="flex-grow: 1; flex-direction: row;">
<ui:VisualElement name="ShowcasePair1" style="flex-grow: 1;"> <ui:VisualElement name="ShowcasePair1" style="flex-grow: 1;">
<ui:VisualElement name="ShowcasePair1TemplateColour" <ui:VisualElement name="ShowcasePair1TemplateColour" style="flex-grow: 1; background-color: rgb(15, 13, 27); border-top-left-radius: 8px; border-bottom-left-radius: 8px;" />
style="flex-grow: 1; background-color: rgb(15, 13, 27); border-top-left-radius: 8px; border-bottom-left-radius: 8px;"/> <ui:Label tabindex="-1" text="100% 100% 100% (100%)" parse-escape-sequences="true" display-tooltip-when-elided="true" name="ShowcasePair1Info" style="-unity-text-align: upper-center; font-size: 18px;" />
<ui:Label tabindex="-1" text="100% 100% 100% (100%)" parse-escape-sequences="true" <ui:VisualElement name="ShowcasePair1ResponseColour" style="flex-grow: 1; border-bottom-left-radius: 8px; border-left-color: rgb(26, 22, 40); border-right-color: rgb(26, 22, 40); border-top-color: rgb(26, 22, 40); border-bottom-color: rgb(26, 22, 40); background-color: rgb(26, 22, 40); border-top-left-radius: 8px;" />
display-tooltip-when-elided="true" name="ShowcasePair1Info"
style="-unity-text-align: upper-center; font-size: 18px;"/>
<ui:VisualElement name="ShowcasePair1ResponseColour"
style="flex-grow: 1; border-bottom-left-radius: 8px; border-left-color: rgb(26, 22, 40); border-right-color: rgb(26, 22, 40); border-top-color: rgb(26, 22, 40); border-bottom-color: rgb(26, 22, 40); background-color: rgb(26, 22, 40); border-top-left-radius: 8px;"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="ShowcasePair2" style="flex-grow: 1;"> <ui:VisualElement name="ShowcasePair2" style="flex-grow: 1;">
<ui:VisualElement name="ShowcasePair2TemplateColour" <ui:VisualElement name="ShowcasePair2TemplateColour" style="flex-grow: 1; background-color: rgb(42, 33, 56);" />
style="flex-grow: 1; background-color: rgb(42, 33, 56);"/> <ui:Label tabindex="-1" text="100% 100% 100% (100%)" parse-escape-sequences="true" display-tooltip-when-elided="true" name="ShowcasePair2Info" style="-unity-text-align: upper-center; font-size: 18px;" />
<ui:Label tabindex="-1" text="100% 100% 100% (100%)" parse-escape-sequences="true" <ui:VisualElement name="ShowcasePair2ResponseColour" style="flex-grow: 1; background-color: rgb(63, 48, 76);" />
display-tooltip-when-elided="true" name="ShowcasePair2Info"
style="-unity-text-align: upper-center; font-size: 18px;"/>
<ui:VisualElement name="ShowcasePair2ResponseColour"
style="flex-grow: 1; background-color: rgb(63, 48, 76);"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="ShowcasePair3" style="flex-grow: 1;"> <ui:VisualElement name="ShowcasePair3" style="flex-grow: 1;">
<ui:VisualElement name="ShowcasePair3TemplateColour" <ui:VisualElement name="ShowcasePair3TemplateColour" style="flex-grow: 1; background-color: rgb(63, 48, 76);" />
style="flex-grow: 1; background-color: rgb(63, 48, 76);"/> <ui:Label tabindex="-1" text="100% 100% 100% (100%)" parse-escape-sequences="true" display-tooltip-when-elided="true" name="ShowcasePair3Info" style="-unity-text-align: upper-center; font-size: 18px;" />
<ui:Label tabindex="-1" text="100% 100% 100% (100%)" parse-escape-sequences="true" <ui:VisualElement name="ShowcasePair3ResponseColour" style="flex-grow: 1; background-color: rgb(89, 67, 100);" />
display-tooltip-when-elided="true" name="ShowcasePair3Info"
style="-unity-text-align: upper-center; font-size: 18px;"/>
<ui:VisualElement name="ShowcasePair3ResponseColour"
style="flex-grow: 1; background-color: rgb(89, 67, 100);"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="ShowcasePair4" style="flex-grow: 1;"> <ui:VisualElement name="ShowcasePair4" style="flex-grow: 1;">
<ui:VisualElement name="ShowcasePair4TemplateColour" <ui:VisualElement name="ShowcasePair4TemplateColour" style="flex-grow: 1; background-color: rgb(89, 67, 100);" />
style="flex-grow: 1; background-color: rgb(89, 67, 100);"/> <ui:Label tabindex="-1" text="100% 100% 100% (100%)" parse-escape-sequences="true" display-tooltip-when-elided="true" name="ShowcasePair4Info" style="-unity-text-align: upper-center; font-size: 18px;" />
<ui:Label tabindex="-1" text="100% 100% 100% (100%)" parse-escape-sequences="true" <ui:VisualElement name="ShowcasePair4ResponseColour" style="flex-grow: 1; background-color: rgb(122, 90, 126);" />
display-tooltip-when-elided="true" name="ShowcasePair4Info"
style="-unity-text-align: upper-center; font-size: 18px;"/>
<ui:VisualElement name="ShowcasePair4ResponseColour"
style="flex-grow: 1; background-color: rgb(122, 90, 126);"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="ShowcasePair5" style="flex-grow: 1;"> <ui:VisualElement name="ShowcasePair5" style="flex-grow: 1;">
<ui:VisualElement name="ShowcasePair5TemplateColour" <ui:VisualElement name="ShowcasePair5TemplateColour" style="flex-grow: 1; background-color: rgb(162, 118, 158); border-top-right-radius: 8px; border-bottom-right-radius: 8px;" />
style="flex-grow: 1; background-color: rgb(162, 118, 158); border-top-right-radius: 8px; border-bottom-right-radius: 8px;"/> <ui:Label tabindex="-1" text="100% 100% 100% (100%)" parse-escape-sequences="true" display-tooltip-when-elided="true" name="ShowcasePair5Info" style="-unity-text-align: upper-center; font-size: 18px;" />
<ui:Label tabindex="-1" text="100% 100% 100% (100%)" parse-escape-sequences="true" <ui:VisualElement name="ShowcasePair5ResponseColour" style="flex-grow: 1; background-color: rgb(208, 152, 194); border-top-right-radius: 8px; border-bottom-right-radius: 8px;" />
display-tooltip-when-elided="true" name="ShowcasePair5Info"
style="-unity-text-align: upper-center; font-size: 18px;"/>
<ui:VisualElement name="ShowcasePair5ResponseColour"
style="flex-grow: 1; background-color: rgb(208, 152, 194); border-top-right-radius: 8px; border-bottom-right-radius: 8px;"/>
</ui:VisualElement> </ui:VisualElement>
</ui:VisualElement> </ui:VisualElement>
<ui:Label tabindex="-1" text="Responses" parse-escape-sequences="true" <ui:Label tabindex="-1" text="Responses" parse-escape-sequences="true" display-tooltip-when-elided="true" name="ShowcaseResponsesText" style="-unity-text-align: upper-center; padding-top: 1.5%; padding-right: 0; padding-bottom: 0; padding-left: 0; margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0;" />
display-tooltip-when-elided="true" name="ShowcaseResponsesText"
style="-unity-text-align: upper-center; padding-top: 1.5%; padding-right: 0; padding-bottom: 0; padding-left: 0; margin-top: 0; margin-right: 0; margin-bottom: 0; margin-left: 0;"/>
</ui:VisualElement> </ui:VisualElement>
<ui:Label tabindex="-1" <ui:Label tabindex="-1" text="Over n rounds,&#10;you were 100.00% accurate.&#10;&#10;Lightness was 100.00% accurate. (+100.00% from your average)&#10;Chroma was 100.00% accurate. (+100.00% from your average)&#10;Hue was 100.00% accurate. (+100.00% from your average)&#10;&#10;Your RATING has increased by 100.00%." parse-escape-sequences="true" display-tooltip-when-elided="true" name="ResultsText" style="flex-grow: 0; margin-top: 2%; margin-right: 0; margin-bottom: 0; margin-left: 0; padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 0;" />
text="Over n rounds,&#10;you were 100.00% accurate.&#10;&#10;Lightness was 100.00% accurate. (+100.00% from your average)&#10;Chroma was 100.00% accurate. (+100.00% from your average)&#10;Hue was 100.00% accurate. (+100.00% from your average)&#10;&#10;Your RATING has increased by 100.00%."
parse-escape-sequences="true" display-tooltip-when-elided="true" name="ResultsText"
style="flex-grow: 0; margin-top: 2%; margin-right: 0; margin-bottom: 0; margin-left: 0; padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 0;"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="LeaderboardView" <ui:VisualElement name="LeaderboardView" style="flex-grow: 1; display: none; padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 0; margin-top: 3.25%; margin-right: 3.25%; margin-bottom: 3.25%; margin-left: 3.25%; flex-direction: column; justify-content: space-between;">
style="flex-grow: 1; display: none; padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 0; margin-top: 3.25%; margin-right: 3.25%; margin-bottom: 3.25%; margin-left: 3.25%; flex-direction: column; justify-content: space-between;"> <ui:Label tabindex="-1" text="Leaderboard" parse-escape-sequences="true" display-tooltip-when-elided="true" name="LeaderboardHeader" style="font-size: 58px; -unity-font-style: normal;" />
<ui:Label tabindex="-1" text="Leaderboard" parse-escape-sequences="true"
display-tooltip-when-elided="true" name="LeaderboardHeader"
style="font-size: 58px; -unity-font-style: normal;"/>
<ui:ListView name="LeaderboardListView" /> <ui:ListView name="LeaderboardListView" />
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="AccountView" <ui:VisualElement name="AccountView" style="flex-grow: 1; display: flex; padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 0; margin-top: 3.25%; margin-right: 3.25%; margin-bottom: 3.25%; margin-left: 3.25%; flex-direction: column; justify-content: space-between;">
style="flex-grow: 1; display: flex; padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 0; margin-top: 3.25%; margin-right: 3.25%; margin-bottom: 3.25%; margin-left: 3.25%; flex-direction: column; justify-content: space-between;"> <ui:Label tabindex="-1" text="You are not signed in." parse-escape-sequences="true" display-tooltip-when-elided="true" name="AccountHeader" style="font-size: 58px; -unity-font-style: normal;" />
<ui:Label tabindex="-1" text="You are not signed in." parse-escape-sequences="true"
display-tooltip-when-elided="true" name="AccountHeader"
style="font-size: 58px; -unity-font-style: normal;"/>
<ui:VisualElement name="AccountFields" style="flex-grow: 0;"> <ui:VisualElement name="AccountFields" style="flex-grow: 0;">
<ui:VisualElement name="UsernameContainer" <ui:VisualElement name="UsernameContainer" style="flex-grow: 1; flex-direction: row; justify-content: space-between;">
style="flex-grow: 1; flex-direction: row; justify-content: space-between;">
<ui:TextField picking-mode="Ignore" label="Username" name="UsernameField" /> <ui:TextField picking-mode="Ignore" label="Username" name="UsernameField" />
<ui:Button text="Update" parse-escape-sequences="true" display-tooltip-when-elided="true" <ui:Button text="Update" parse-escape-sequences="true" display-tooltip-when-elided="true" name="UsernameUpdateButton" />
name="UsernameUpdateButton"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="EmailContainer" <ui:VisualElement name="EmailContainer" style="flex-grow: 1; flex-direction: row; justify-content: space-between;">
style="flex-grow: 1; flex-direction: row; justify-content: space-between;"> <ui:TextField picking-mode="Ignore" label="Email" name="EmailField" keyboard-type="EmailAddress" />
<ui:TextField picking-mode="Ignore" label="Email" name="EmailField" <ui:Button text="Update" parse-escape-sequences="true" display-tooltip-when-elided="true" name="EmailUpdateButton" />
keyboard-type="EmailAddress"/>
<ui:Button text="Update" parse-escape-sequences="true" display-tooltip-when-elided="true"
name="EmailUpdateButton"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="PasswordContainer" <ui:VisualElement name="PasswordContainer" style="flex-grow: 1; flex-direction: row; justify-content: space-between;">
style="flex-grow: 1; flex-direction: row; justify-content: space-between;">
<ui:TextField picking-mode="Ignore" label="Password" name="PasswordField" password="true" /> <ui:TextField picking-mode="Ignore" label="Password" name="PasswordField" password="true" />
<ui:Button text="Update" parse-escape-sequences="true" display-tooltip-when-elided="true" <ui:Button text="Update" parse-escape-sequences="true" display-tooltip-when-elided="true" name="PasswordUpdateButton" />
name="PasswordUpdateButton"/>
</ui:VisualElement> </ui:VisualElement>
<ui:Label tabindex="-1" text="A verification email has been sent. Check your inbox." <ui:Label tabindex="-1" text="A verification email has been sent. Check your inbox." parse-escape-sequences="true" display-tooltip-when-elided="true" name="AccompanyingText" style="padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 0; margin-top: 1.5%; margin-right: 0; margin-bottom: 0.75%; margin-left: 0; -unity-text-align: upper-left; display: none;" />
parse-escape-sequences="true" display-tooltip-when-elided="true" name="AccompanyingText"
style="padding-top: 0; padding-right: 0; padding-bottom: 0; padding-left: 0; margin-top: 1.5%; margin-right: 0; margin-bottom: 0.75%; margin-left: 0; -unity-text-align: upper-left; display: none;"/>
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="AccountButtons" style="flex-grow: 0; align-items: flex-start;"> <ui:VisualElement name="AccountButtons" style="flex-grow: 0; align-items: flex-start;">
<ui:Button text="Primary Action Button →" parse-escape-sequences="true" <ui:Button text="Primary Action Button →" parse-escape-sequences="true" display-tooltip-when-elided="true" name="PrimaryActionButton" style="-unity-text-align: middle-center; margin-bottom: 1%; margin-right: 1%; margin-top: 1%; -unity-font-style: bold;" />
display-tooltip-when-elided="true" name="PrimaryActionButton" <ui:Button text="Secondary Action Button →" parse-escape-sequences="true" display-tooltip-when-elided="true" name="SecondaryActionButton" style="-unity-text-align: middle-center; margin-bottom: 1%; margin-right: 1%; margin-top: 1%; -unity-font-style: bold;" />
style="-unity-text-align: middle-center; margin-bottom: 1%; margin-right: 1%; margin-top: 1%; -unity-font-style: bold;"/> <ui:Button text="Tertiary Action Button →" parse-escape-sequences="true" display-tooltip-when-elided="true" name="TertiaryActionButton" style="margin-top: 1%; margin-right: 1%; -unity-font-style: bold;" />
<ui:Button text="Secondary Action Button →" parse-escape-sequences="true"
display-tooltip-when-elided="true" name="SecondaryActionButton"
style="-unity-text-align: middle-center; margin-bottom: 1%; margin-right: 1%; margin-top: 1%; -unity-font-style: bold;"/>
<ui:Button text="Tertiary Action Button →" parse-escape-sequences="true"
display-tooltip-when-elided="true" name="TertiaryActionButton"
style="margin-top: 1%; margin-right: 1%; -unity-font-style: bold;"/>
</ui:VisualElement> </ui:VisualElement>
</ui:VisualElement> </ui:VisualElement>
</ui:VisualElement> </ui:VisualElement>

View file

@ -4,5 +4,8 @@
EditorBuildSettings: EditorBuildSettings:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
serializedVersion: 2 serializedVersion: 2
m_Scenes: [] m_Scenes:
- enabled: 1
path: Assets/Scenes/GameScene.unity
guid: 9fc0d4010bbf28b4594072e72b8655ab
m_configObjects: {} m_configObjects: {}

View file

@ -12,8 +12,8 @@ PlayerSettings:
targetDevice: 2 targetDevice: 2
useOnDemandResources: 0 useOnDemandResources: 0
accelerometerFrequency: 60 accelerometerFrequency: 60
companyName: DefaultCompany companyName: Mark Joshwel
productName: ColourMeOKLABGame productName: Colour Me OK
defaultCursor: {fileID: 0} defaultCursor: {fileID: 0}
cursorHotspot: {x: 0, y: 0} cursorHotspot: {x: 0, y: 0}
m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
@ -42,8 +42,8 @@ PlayerSettings:
m_SplashScreenLogos: [] m_SplashScreenLogos: []
m_VirtualRealitySplashScreen: {fileID: 0} m_VirtualRealitySplashScreen: {fileID: 0}
m_HolographicTrackingLossScreen: {fileID: 0} m_HolographicTrackingLossScreen: {fileID: 0}
defaultScreenWidth: 1920 defaultScreenWidth: 1280
defaultScreenHeight: 1080 defaultScreenHeight: 720
defaultScreenWidthWeb: 960 defaultScreenWidthWeb: 960
defaultScreenHeightWeb: 600 defaultScreenHeightWeb: 600
m_StereoRenderingPath: 0 m_StereoRenderingPath: 0
@ -93,7 +93,7 @@ PlayerSettings:
bakeCollisionMeshes: 0 bakeCollisionMeshes: 0
forceSingleInstance: 0 forceSingleInstance: 0
useFlipModelSwapchain: 1 useFlipModelSwapchain: 1
resizableWindow: 0 resizableWindow: 1
useMacAppStoreValidation: 0 useMacAppStoreValidation: 0
macAppStoreCategory: public.app-category.games macAppStoreCategory: public.app-category.games
gpuSkinning: 1 gpuSkinning: 1
@ -104,7 +104,7 @@ PlayerSettings:
xboxEnableFitness: 0 xboxEnableFitness: 0
visibleInBackground: 1 visibleInBackground: 1
allowFullscreenSwitch: 1 allowFullscreenSwitch: 1
fullscreenMode: 1 fullscreenMode: 3
xboxSpeechDB: 0 xboxSpeechDB: 0
xboxEnableHeadOrientation: 0 xboxEnableHeadOrientation: 0
xboxEnableGuest: 0 xboxEnableGuest: 0
@ -140,7 +140,7 @@ PlayerSettings:
loadStoreDebugModeEnabled: 0 loadStoreDebugModeEnabled: 0
visionOSBundleVersion: 1.0 visionOSBundleVersion: 1.0
tvOSBundleVersion: 1.0 tvOSBundleVersion: 1.0
bundleVersion: 0.1 bundleVersion: 1.0.0
preloadedAssets: [] preloadedAssets: []
metroInputSource: 0 metroInputSource: 0
wsaTransparentSwapchain: 0 wsaTransparentSwapchain: 0
@ -161,13 +161,14 @@ PlayerSettings:
resetResolutionOnWindowResize: 0 resetResolutionOnWindowResize: 0
androidSupportedAspectRatio: 1 androidSupportedAspectRatio: 1
androidMaxAspectRatio: 2.1 androidMaxAspectRatio: 2.1
applicationIdentifier: {} applicationIdentifier:
Standalone: co.joshwel.colourmeok
buildNumber: buildNumber:
Standalone: 0 Standalone: 0
VisionOS: 0 VisionOS: 0
iPhone: 0 iPhone: 0
tvOS: 0 tvOS: 0
overrideDefaultApplicationIdentifier: 0 overrideDefaultApplicationIdentifier: 1
AndroidBundleVersionCode: 1 AndroidBundleVersionCode: 1
AndroidMinSdkVersion: 22 AndroidMinSdkVersion: 22
AndroidTargetSdkVersion: 0 AndroidTargetSdkVersion: 0
@ -838,7 +839,8 @@ PlayerSettings:
scriptingDefineSymbols: {} scriptingDefineSymbols: {}
additionalCompilerArguments: {} additionalCompilerArguments: {}
platformArchitecture: {} platformArchitecture: {}
scriptingBackend: {} scriptingBackend:
Standalone: 0
il2cppCompilerConfiguration: {} il2cppCompilerConfiguration: {}
il2cppCodeGeneration: {} il2cppCodeGeneration: {}
managedStrippingLevel: managedStrippingLevel: