using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; public class GameManager : MonoBehaviour { public static GameManager Instance { get; private set; } [SerializeField] private double _gameProgress = 0.0; [SerializeField] private double _baseGameDurationSeconds = 10.0 * 60.0; [SerializeField, ShowOnly] private double _currentEfficiency = 0.0; [SerializeField, ShowOnly] private double _remainingGameDurationSeconds = 0.0; [SerializeField] private List _developers = new(); /// /// Wie weit das Spiel bereits fortgeschritten ist. /// public double GameProgress => _gameProgress; /// /// Wie Effizient das Team derzeit arbeitet. /// public double CurrentEfficiency => _currentEfficiency; /// /// Wie viele Sekunden das Spiel voraussichtlich noch dauern wird, würden die Effizienz sich nicht verändern. /// public double RemainingGameDurationSeconds => _remainingGameDurationSeconds; /// /// Wie lange das Spiel voraussichtlich noch dauern wird, würden die Effizienz sich nicht verändern. /// public TimeSpan RemainingGameDuration => TimeSpan.FromSeconds(_remainingGameDurationSeconds); /// /// Wie lange voraussichtlich das gesamte Spiel dauern wird. /// public double ExpectedTotalGameSeconds => 0.0; private void Awake() { if (Instance == null) { Instance = this; } else { Debug.LogError("GameManager already exists. Deleting duplicate."); Destroy(gameObject); } } void Update() { UpdateEfficiency(); UpdateGameDuration(); } void UpdateEfficiency() { _currentEfficiency = _developers.Sum(d => d.Efficiency); } void UpdateGameDuration() { double baseSecondsLeft = _baseGameDurationSeconds * (1.0 - GameProgress); _remainingGameDurationSeconds = baseSecondsLeft / _currentEfficiency; } }