This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
breakpilot-pwa/breakpilot-drive/UnityScripts/UI/GameHUD.cs
BreakPilot Dev 19855efacc
Some checks failed
Tests / Go Tests (push) Has been cancelled
Tests / Python Tests (push) Has been cancelled
Tests / Integration Tests (push) Has been cancelled
Tests / Go Lint (push) Has been cancelled
Tests / Python Lint (push) Has been cancelled
Tests / Security Scan (push) Has been cancelled
Tests / All Checks Passed (push) Has been cancelled
Security Scanning / Secret Scanning (push) Has been cancelled
Security Scanning / Dependency Vulnerability Scan (push) Has been cancelled
Security Scanning / Go Security Scan (push) Has been cancelled
Security Scanning / Python Security Scan (push) Has been cancelled
Security Scanning / Node.js Security Scan (push) Has been cancelled
Security Scanning / Docker Image Security (push) Has been cancelled
Security Scanning / Security Summary (push) Has been cancelled
CI/CD Pipeline / Go Tests (push) Has been cancelled
CI/CD Pipeline / Python Tests (push) Has been cancelled
CI/CD Pipeline / Website Tests (push) Has been cancelled
CI/CD Pipeline / Linting (push) Has been cancelled
CI/CD Pipeline / Security Scan (push) Has been cancelled
CI/CD Pipeline / Docker Build & Push (push) Has been cancelled
CI/CD Pipeline / Integration Tests (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / CI Summary (push) Has been cancelled
ci/woodpecker/manual/build-ci-image Pipeline was successful
ci/woodpecker/manual/main Pipeline failed
feat: BreakPilot PWA - Full codebase (clean push without large binaries)
All services: admin-v2, studio-v2, website, ai-compliance-sdk,
consent-service, klausur-service, voice-service, and infrastructure.
Large PDFs and compiled binaries excluded via .gitignore.
2026-02-11 13:25:58 +01:00

145 lines
4.3 KiB
C#

// ==============================================
// GameHUD.cs - Spiel-UI Anzeige
// ==============================================
// Zeigt Score, Leben, Distanz und andere
// Spielinformationen an.
using UnityEngine;
using TMPro;
using UnityEngine.UI;
namespace BreakpilotDrive
{
public class GameHUD : MonoBehaviour
{
[Header("Score")]
[SerializeField] private TextMeshProUGUI scoreText;
[SerializeField] private TextMeshProUGUI highScoreText;
[Header("Leben")]
[SerializeField] private TextMeshProUGUI livesText;
[SerializeField] private Image[] heartImages;
[Header("Distanz")]
[SerializeField] private TextMeshProUGUI distanceText;
[Header("Quiz-Statistik")]
[SerializeField] private TextMeshProUGUI quizStatsText;
[Header("Animationen")]
[SerializeField] private Animator scoreAnimator;
private int displayedScore = 0;
private int targetScore = 0;
void Start()
{
// Events abonnieren
if (GameManager.Instance != null)
{
GameManager.Instance.OnScoreChanged += UpdateScore;
GameManager.Instance.OnLivesChanged += UpdateLives;
GameManager.Instance.OnDistanceChanged += UpdateDistance;
}
// Initial-Werte setzen
UpdateScore(0);
UpdateLives(3);
UpdateDistance(0);
}
void OnDestroy()
{
// Events abbestellen
if (GameManager.Instance != null)
{
GameManager.Instance.OnScoreChanged -= UpdateScore;
GameManager.Instance.OnLivesChanged -= UpdateLives;
GameManager.Instance.OnDistanceChanged -= UpdateDistance;
}
}
void Update()
{
// Score-Animation (zaehlt hoch)
if (displayedScore != targetScore)
{
displayedScore = (int)Mathf.MoveTowards(displayedScore, targetScore, Time.deltaTime * 1000);
if (scoreText != null)
{
scoreText.text = displayedScore.ToString("N0");
}
}
// Quiz-Statistik aktualisieren
UpdateQuizStats();
}
// ==============================================
// Score
// ==============================================
private void UpdateScore(int newScore)
{
targetScore = newScore;
// Animation ausloesen bei Punkte-Gewinn
if (newScore > displayedScore && scoreAnimator != null)
{
scoreAnimator.SetTrigger("ScoreUp");
}
}
// ==============================================
// Leben
// ==============================================
private void UpdateLives(int lives)
{
if (livesText != null)
{
livesText.text = $"x{lives}";
}
// Herz-Icons aktualisieren
if (heartImages != null)
{
for (int i = 0; i < heartImages.Length; i++)
{
heartImages[i].enabled = i < lives;
}
}
}
// ==============================================
// Distanz
// ==============================================
private void UpdateDistance(float distance)
{
if (distanceText != null)
{
distanceText.text = $"{distance:F0}m";
}
}
// ==============================================
// Quiz-Statistik
// ==============================================
private void UpdateQuizStats()
{
if (quizStatsText == null || QuizManager.Instance == null) return;
int answered = QuizManager.Instance.GetQuestionsAnswered();
int correct = QuizManager.Instance.GetQuestionsCorrect();
if (answered > 0)
{
float accuracy = QuizManager.Instance.GetAccuracy() * 100;
quizStatsText.text = $"Quiz: {correct}/{answered} ({accuracy:F0}%)";
}
else
{
quizStatsText.text = "Quiz: 0/0";
}
}
}
}