Files
unity-application/Assets/Courses/Scripts/StartPause.cs
Dries Van Schuylenbergh 2fa54620ef Wes xx build fix
2023-03-09 12:44:11 +00:00

137 lines
4.0 KiB
C#

using UnityEngine;
using UnityEngine.Video;
using UnityEngine.UI;
using TMPro;
public class StartPause : MonoBehaviour
{
[Header("UI References")]
// Reference to instructional video player
public VideoPlayer player;
// Reference to pause button
public Button button;
// Reference to sprite for the pause button
public Sprite pauseSprite;
// Reference to the image for displaying the current words sprite
public Image wordImage;
// Reference to the text object for displaying the current word
public TextMeshProUGUI title;
[Header("User")]
// Reference to user list to get current user
public UserList userList;
// The current user
private User user;
// Current user progress for this course
private Progress progress = null;
[Header("Course")]
// ScriptableObject with list of all courses
public CourseList courselist;
// Reference to Course ScriptableObject
private Course course;
// Index of the current word/letter in the course.learnables list
private int currentWordIndex = 0;
// This holds the amount of words in the course
private int maxWords;
// Number of correct words so far
// (can be modified to a list or something like that to give better feedback)
private int correctWords = 0;
public void Awake()
{
// Setting up course
course = courselist.courses[courselist.currentCourseIndex];
maxWords = course.learnables.Count;
// Create entry in current user for keeping track of progress
user = userList.GetCurrentUser();
progress = user.courses.Find((p) => p != null && p.Get<CourseIndex>("courseIndex") == course.index);
if (progress == null)
{
progress = new Progress();
progress.AddOrUpdate<CourseIndex>("courseIndex", CourseIndex.FINGERSPELLING);
progress.AddOrUpdate<float>("courseProgress", -1.0f);
user.courses.Add(progress);
}
userList.Save();
// Setup UI
button.image.sprite = pauseSprite;
title.text = course.name;
NextVideo();
NextImage();
}
// These two functions generate video and image from files
private void NextVideo()
{
player.clip = course.learnables[currentWordIndex].clip;
// This loads first frame, so that it can be used as a sort-of preview for the video
player.Play();
// As the video will start playiing -> hide button
Color col = button.image.color;
col.a = 0;
button.image.color = col;
}
// This doesn't work
private void NextImage()
{
wordImage.sprite = course.learnables[currentWordIndex].image;
}
// Activate by pressing the center of the screen
public void Pause()
{
if (!player.isPlaying)
{
// Play video and hide button
player.Play();
Color col = button.image.color;
col.a = 0;
button.image.color = col;
}
else
{
// Pause video and show button
player.Pause();
Color col = button.image.color;
col.a = 255;
button.image.color = col;
}
}
// Press next-sign button for next word
public void NextSign()
{
// Goto the next word/letter
currentWordIndex++;
// TODO: fix correct word count
correctWords++;
progress.AddOrUpdate<float>("courseProgress", (float)correctWords / (float)maxWords);
userList.Save();
// Update UI if course is not finished yet
if (currentWordIndex < maxWords)
{
NextVideo();
NextImage();
}
// Finish course and record progress
else
{
FinishCourse();
}
}
public void FinishCourse()
{
// TODO: update progress (maybe this can also be at the `NextSign()`-method)
progress.AddOrUpdate<float>("courseProgress", correctWords / maxWords);
userList.Save();
}
}