131 lines
3.9 KiB
C#
131 lines
3.9 KiB
C#
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];
|
|
}
|
|
}
|
|
}
|