Resolve WES-192 "Fix progress screen"
This commit is contained in:
127
Assets/Accounts/Scripts/PanelMinigameProgress.cs
Normal file
127
Assets/Accounts/Scripts/PanelMinigameProgress.cs
Normal file
@@ -0,0 +1,127 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
/// <summary>
|
||||
/// Class to handle minigame list progress display
|
||||
/// </summary>
|
||||
public class PanelMinigameProgress : MonoBehaviour
|
||||
{
|
||||
/// <summary>
|
||||
/// Reference to the current user
|
||||
/// </summary>
|
||||
private User user;
|
||||
|
||||
/// <summary>
|
||||
/// Reference to the minigames list
|
||||
/// </summary>
|
||||
public MinigameList minigameList;
|
||||
|
||||
/// <summary>
|
||||
/// Prefab of a minigame card
|
||||
/// </summary>
|
||||
public GameObject minigameCardPrefab;
|
||||
|
||||
/// <summary>
|
||||
/// UI reference to the container holding all the minigame cards
|
||||
/// </summary>
|
||||
public Transform minigamesContainer;
|
||||
|
||||
/// <summary>
|
||||
/// UI reference to the minigame info panel
|
||||
/// </summary>
|
||||
public GameObject minigameInfo;
|
||||
|
||||
/// <summary>
|
||||
/// UI reference to the message that displays when no minigame progress is present
|
||||
/// </summary>
|
||||
public GameObject emptyMinigames;
|
||||
|
||||
/// <summary>
|
||||
/// UI reference to the plot
|
||||
/// </summary>
|
||||
public ProgressGraph progressGraph;
|
||||
|
||||
/// <summary>
|
||||
/// Reference to the title of the minigame of the info panel
|
||||
/// </summary>
|
||||
public TMP_Text minigameTitle;
|
||||
|
||||
/// <summary>
|
||||
/// Reference to the text that will display when an empty minigame progress object is selected
|
||||
/// </summary>
|
||||
public GameObject emptyHighscore;
|
||||
|
||||
/// <summary>
|
||||
/// Current selected course
|
||||
/// </summary>
|
||||
private int selectedMinigame = 0;
|
||||
|
||||
/// <summary>
|
||||
/// List of course backgrounds and indices
|
||||
/// </summary>
|
||||
private List<Tuple<Image, MinigameIndex>> minigameCards = new List<Tuple<Image, MinigameIndex>>();
|
||||
|
||||
/// <summary>
|
||||
/// Start is called before the first frame update
|
||||
/// </summary>
|
||||
void Start()
|
||||
{
|
||||
PersistentDataController.GetInstance().Load();
|
||||
user = UserList.GetCurrentUser();
|
||||
|
||||
var minigames = user.GetMinigames();
|
||||
minigameInfo.SetActive(minigames.Count > 0);
|
||||
emptyMinigames.SetActive(minigames.Count <= 0);
|
||||
int i = 0;
|
||||
foreach (var minigameProgress in minigames)
|
||||
{
|
||||
// Create instance of prefab
|
||||
GameObject instance = GameObject.Instantiate(minigameCardPrefab, minigamesContainer);
|
||||
int j = i++;
|
||||
|
||||
// Initialize card
|
||||
MinigameProgressCard mpc = instance.GetComponent<MinigameProgressCard>();
|
||||
mpc.minigameProgress = minigameProgress;
|
||||
mpc.selectActivity = () => UpdateSelection(j);
|
||||
|
||||
// Store reference to background so we can apply fancy coloring
|
||||
Image background = instance.GetComponent<Image>();
|
||||
background.color = Color.gray;
|
||||
minigameCards.Add(Tuple.Create(background, minigameProgress.minigameIndex));
|
||||
}
|
||||
if (0 < minigames.Count)
|
||||
UpdateSelection(0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update the current selected course
|
||||
/// </summary>
|
||||
/// <param name="newMinigame">Index to the new course</param>
|
||||
private void UpdateSelection(int newMinigame)
|
||||
{
|
||||
minigameCards[selectedMinigame].Item1.color = Color.gray;
|
||||
selectedMinigame = newMinigame;
|
||||
minigameCards[selectedMinigame].Item1.color = Color.blue;
|
||||
|
||||
var progress = user.GetMinigameProgress(minigameCards[selectedMinigame].Item2);
|
||||
minigameTitle.text = minigameList.GetMinigameByIndex(progress.minigameIndex).title;
|
||||
|
||||
List<Score> latestScores = progress.latestScores;
|
||||
List<Score> highestScores = progress.highestScores;
|
||||
if (0 < highestScores.Count)
|
||||
{
|
||||
emptyHighscore.SetActive(false);
|
||||
progressGraph.gameObject.SetActive(true);
|
||||
progressGraph.Plot(latestScores.ConvertAll<double>((s) => (double)s.scoreValue), highestScores.Max((s) => s.scoreValue));
|
||||
}
|
||||
else
|
||||
{
|
||||
emptyHighscore.SetActive(true);
|
||||
progressGraph.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user