2025-12-11 13:14:43 +01:00

130 lines
3.6 KiB
C#

// HangarTutorialUI.cs
// Zweck: Einfache Paging-UI im Hangar; per Input weiterklicken; blendet sich weich aus.
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.InputSystem;
public class HangarTutorialUI : MonoBehaviour
{
[Header("UI")]
[SerializeField] private CanvasGroup canvasGroup; // Sichtbarkeit/Interaktion
[SerializeField] private TMP_Text bodyText; // Textfeld
[Header("Controls")]
[SerializeField] private InputActionReference advanceAction; // Eingabe zum Weiterklicken
[Header("Behaviour")]
[SerializeField] private bool startOnAwake = true; // direkt beim Laden starten
[SerializeField] private float fadeSpeed = 6f; // Fade-Out Geschwindigkeit
[TextArea(2, 4)]
[SerializeField]
private List<string> pages = new()
{
"Willkommen zu deiner <b>Mission</b>, Rekrut! Ich bin Solan, deine persönliche <b>KI</b> und unterstütze dich mit allem was du brauchst.",
"Wie du sicherlich schon mitbekommen hast, verschwinden die <b>Englischen Worte</b> auf dieser Welt...",
"Doch wir sind hier um sie zurückzuholen, damit die Englische Sprache nicht ausstirbt!",
"Lass uns keine Zeit verschwenden! Laufe mit dem <b>linken Stick</b> zu deinem <b>Schiff</b>.",
"Sobald du dort bist, drückst du den <b>rechten Trigger</b>, dann beame ich dich rein."
};
private int pageIndex = -1;
private bool visible;
private void Awake()
{
// Startzustand: versteckt
if (canvasGroup)
{
canvasGroup.alpha = 0f;
canvasGroup.interactable = false;
canvasGroup.blocksRaycasts = false;
}
}
private void Start()
{
if (startOnAwake) BeginTutorial();
}
private void OnEnable()
{
if (advanceAction != null)
{
advanceAction.action.performed += OnAdvance;
advanceAction.action.Enable();
}
}
private void OnDisable()
{
if (advanceAction != null)
{
advanceAction.action.performed -= OnAdvance;
advanceAction.action.Disable();
}
}
private void Update()
{
if (!canvasGroup) return;
// Einblenden sofort, Ausblenden per Fade
float target = visible ? 1f : 0f;
canvasGroup.alpha = Mathf.MoveTowards(canvasGroup.alpha, target, fadeSpeed * Time.deltaTime);
bool interactable = canvasGroup.alpha > 0.95f;
canvasGroup.interactable = interactable;
canvasGroup.blocksRaycasts = interactable;
}
/// <summary>Startet das Hangar-Tutorial (erste Seite direkt sichtbar).</summary>
public void BeginTutorial()
{
visible = true;
if (canvasGroup)
{
canvasGroup.alpha = 1f;
canvasGroup.interactable = true;
canvasGroup.blocksRaycasts = true;
}
pageIndex = -1;
ShowNextPage();
}
/// <summary>Schließt die UI (blendet aus).</summary>
public void CloseTutorial()
{
visible = false; // Update() fade-t aus
if (canvasGroup)
{
canvasGroup.interactable = false;
canvasGroup.blocksRaycasts = false;
}
pageIndex = -1;
}
private void OnAdvance(InputAction.CallbackContext _)
{
if (!visible) return;
ShowNextPage();
}
private void ShowNextPage()
{
pageIndex++;
if (pageIndex >= pages.Count)
{
// Ende: einfach verschwinden
CloseTutorial();
return;
}
if (bodyText) bodyText.text = pages[pageIndex];
}
}