Resolve WES-192 "Fix progress screen"
This commit is contained in:
130
Assets/Accounts/Scripts/PanelCourseProgress.cs
Normal file
130
Assets/Accounts/Scripts/PanelCourseProgress.cs
Normal file
@@ -0,0 +1,130 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
/// <summary>
|
||||
/// Class to handle course list progress display
|
||||
/// </summary>
|
||||
public class PanelCourseProgress : MonoBehaviour
|
||||
{
|
||||
/// <summary>
|
||||
/// Reference to the current user
|
||||
/// </summary>
|
||||
private User user;
|
||||
|
||||
/// <summary>
|
||||
/// Reference to the courses list
|
||||
/// </summary>
|
||||
public CourseList courseList;
|
||||
|
||||
/// <summary>
|
||||
/// Prefab of a course card
|
||||
/// </summary>
|
||||
public GameObject courseCardPrefab;
|
||||
|
||||
/// <summary>
|
||||
/// UI reference to the container holding all course cards
|
||||
/// </summary>
|
||||
public Transform coursesContainer;
|
||||
|
||||
/// <summary>
|
||||
/// UI reference to the course info panel
|
||||
/// </summary>
|
||||
public GameObject courseInfo;
|
||||
|
||||
/// <summary>
|
||||
/// UI reference to the message that displays when no course progress is present
|
||||
/// </summary>
|
||||
public GameObject emptyCourses;
|
||||
|
||||
/// <summary>
|
||||
/// Reference to the title on the info panel
|
||||
/// </summary>
|
||||
public TMP_Text courseTitle;
|
||||
|
||||
/// <summary>
|
||||
/// Reference to the learnable card prefab
|
||||
/// </summary>
|
||||
public GameObject learnableCardPrefab;
|
||||
|
||||
/// <summary>
|
||||
/// Reference to the container for holding the learnable cards
|
||||
/// </summary>
|
||||
public Transform learnablesContainer;
|
||||
|
||||
/// <summary>
|
||||
/// Reference to the course progress bar on the info panel
|
||||
/// </summary>
|
||||
public SlicedSlider progressBar;
|
||||
|
||||
/// <summary>
|
||||
/// Current selected course
|
||||
/// </summary>
|
||||
private int selectedCourse = 0;
|
||||
|
||||
/// <summary>
|
||||
/// List of course backgrounds and indices
|
||||
/// </summary>
|
||||
private List<Tuple<Image, CourseIndex>> courseCards = new List<Tuple<Image, CourseIndex>>();
|
||||
|
||||
/// <summary>
|
||||
/// Start is called before the first frame update
|
||||
/// </summary>
|
||||
void Start()
|
||||
{
|
||||
PersistentDataController.GetInstance().Load();
|
||||
user = UserList.GetCurrentUser();
|
||||
|
||||
var courses = user.GetCourses();
|
||||
courseInfo.SetActive(0 < courses.Count);
|
||||
emptyCourses.SetActive(courses.Count <= 0);
|
||||
int i = 0;
|
||||
foreach (var courseProgress in courses)
|
||||
{
|
||||
// Create instance of prefab
|
||||
GameObject instance = GameObject.Instantiate(courseCardPrefab, coursesContainer);
|
||||
int j = i++;
|
||||
|
||||
// Initialize card
|
||||
CourseProgressCard cpc = instance.GetComponent<CourseProgressCard>();
|
||||
cpc.courseProgress = courseProgress;
|
||||
cpc.selectActivity = () => UpdateSelection(j);
|
||||
|
||||
// Store reference to background so we can apply fancy coloring
|
||||
Image background = instance.GetComponent<Image>();
|
||||
background.color = Color.gray;
|
||||
this.courseCards.Add(Tuple.Create(background, courseProgress.courseIndex));
|
||||
}
|
||||
if (0 < courses.Count)
|
||||
UpdateSelection(0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Update the current selected course
|
||||
/// </summary>
|
||||
/// <param name="newCourse">Index to the new course</param>
|
||||
private void UpdateSelection(int newCourse)
|
||||
{
|
||||
courseCards[selectedCourse].Item1.color = Color.gray;
|
||||
selectedCourse = newCourse;
|
||||
courseCards[selectedCourse].Item1.color = Color.blue;
|
||||
|
||||
var progress = user.GetCourseProgress(courseCards[selectedCourse].Item2);
|
||||
var course = courseList.GetCourseByIndex(progress.courseIndex);
|
||||
courseTitle.text = course.title;
|
||||
progressBar.fillAmount = progress.progress;
|
||||
|
||||
foreach (Transform child in learnablesContainer)
|
||||
Destroy(child.gameObject);
|
||||
|
||||
for (int i = 0; i < course.theme.learnables.Count; i++)
|
||||
{
|
||||
GameObject instance = GameObject.Instantiate(learnableCardPrefab, learnablesContainer);
|
||||
var script = instance.GetComponent<LearnableProgressCard>();
|
||||
script.learnable = course.theme.learnables[i];
|
||||
script.progress = progress.learnables[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user