This repository has been archived on 2025-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
ADEPT/ADEPT-Godot/Core/Scripts/Lesson/LessonHandler.cs

104 lines
3.7 KiB
C#

using System;
using Cogwheel;
namespace ADEPT.Core.Lesson;
public class LessonHandler : ILessonHandler
{
public event EventHandler LessonLoaded;
public event EventHandler PageChanged;
public ILesson CurrentLesson { get; private set; }
public IPage CurrentPage { get; private set; }
public void Initialize()
{
COGWHEEL.RegisterObject(this);
}
[Command(Name = "lesson.load", Description = "Load a lesson.")]
public void LoadLesson(string lessonName)
{
var path = $"{Adept.Constants.DefaultLessonPath}{lessonName}{Adept.Constants.DefaultLessonFileExtension}";
COGWHEEL.Log($"[ADEPT] Attempting to load lesson '{lessonName}' at '{path}'");
// Lesson lesson = null;
//
// CurrentLesson = lesson;
// CurrentPage = CurrentLesson.Pages.ToArray()[0];
//
// LessonLoaded?.Invoke(this, EventArgs.Empty);
}
[Command(Name = "lesson.createtest", Description = "Create a test lesson.")]
private void CreateTestLesson()
{
COGWHEEL.Log($"[ADEPT] Creating a Test Lesson");
var lesson = new Lesson()
{
Title = "Test Lesson",
Description = "This is a test lesson.",
Pages = new()
{
new Page() { Title = "Test Page 1", Description = "A test page.", PageContext = PageContext.TwoD},
new Page() { Title = "Test Page 2", Description = "A test page #2.", PageContext = PageContext.ThreeD},
new Page() { Title = "Test Page 3", Description = "A test page #3.", PageContext = PageContext.TwoD},
new Page() { Title = "Test Page 4", Description = "A test page #4.", PageContext = PageContext.ThreeD},
new Page() { Title = "Test Page 5", Description = "A test page #5.", PageContext = PageContext.TwoD},
}
};
CurrentLesson = lesson;
CurrentPage = CurrentLesson.Pages.ToArray()[0];
LessonLoaded?.Invoke(this, EventArgs.Empty);
}
public void SaveLesson(ILesson lesson, string lessonName)
{
throw new System.NotImplementedException();
}
[Command(Name = "lesson.next", Description = "Load the next page in the current lesson.")]
public void LoadNextPage()
{
var nextIndex = CurrentLesson.Pages.IndexOf(CurrentPage) + 1;
if (nextIndex >= CurrentLesson.Pages.Count)
{
COGWHEEL.LogWarning("[LESSONHANDLER] Cannot load next page. No more pages in lesson.");
return;
}
CurrentPage = CurrentLesson.Pages.ToArray()[nextIndex];
PageChanged?.Invoke(this, EventArgs.Empty);
}
[Command(Name = "lesson.previous", Description = "Load the previous page in the current lesson.")]
public void LoadPreviousPage()
{
var prevIndex = CurrentLesson.Pages.IndexOf(CurrentPage) - 1;
if (prevIndex < 0)
{
COGWHEEL.LogWarning("[LESSONHANDLER] Cannot load previous page. No more pages in lesson.");
return;
}
CurrentPage = CurrentLesson.Pages.ToArray()[prevIndex];
PageChanged?.Invoke(this, EventArgs.Empty);
}
[Command(Name = "lesson.gotopage", Description = "Load a specific page in the current lesson.")]
public void LoadPageToIndex(int index)
{
if (index >= CurrentLesson.Pages.Count || index < 0)
{
COGWHEEL.LogWarning("[LESSONHANDLER] Cannot load page. No such page in lesson.");
return;
}
COGWHEEL.Log("[LESSONHANDLER] Loading Page at index " + index);
CurrentPage = CurrentLesson.Pages.ToArray()[index];
PageChanged?.Invoke(this, EventArgs.Empty);
}
}