GameManager: Pause und Resume
This commit is contained in:
parent
8013ec62a0
commit
85b4f86b31
|
@ -20,8 +20,11 @@ public class GameManager : MonoBehaviour
|
||||||
[SerializeField]
|
[SerializeField]
|
||||||
private List<Developer> _developers = new();
|
private List<Developer> _developers = new();
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private MultiFalsableBool _gameRunning = new(false);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Wie weit das Spiel bereits fortgeschritten ist, in Prozent.
|
/// Wie weit das Spiel bereits fortgeschritten ist.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double GameProgress => 1.0 - (_remainingGameDurationSeconds / _baseGameDurationSeconds);
|
public double GameProgress => 1.0 - (_remainingGameDurationSeconds / _baseGameDurationSeconds);
|
||||||
|
|
||||||
|
@ -31,10 +34,12 @@ public class GameManager : MonoBehaviour
|
||||||
public double CurrentEfficiency => _currentEfficiency;
|
public double CurrentEfficiency => _currentEfficiency;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Wie viele Sekunden das Spiel voraussichtlich noch dauern wird, würden die Effizienz sich nicht verändern.
|
/// Wie viele Sekunden das Spiel voraussichtlich noch dauern wird, würde die Effizienz sich nicht verändern.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public double ExpectedRemainingGameDuration => _remainingGameDurationSeconds / _currentEfficiency;
|
public double ExpectedRemainingGameDuration => _remainingGameDurationSeconds / _currentEfficiency;
|
||||||
|
|
||||||
|
public bool IsGameRunning => _gameRunning.IsTrue;
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
if (Instance == null)
|
if (Instance == null)
|
||||||
|
@ -46,13 +51,47 @@ public class GameManager : MonoBehaviour
|
||||||
Debug.LogError("GameManager already exists. Deleting duplicate.");
|
Debug.LogError("GameManager already exists. Deleting duplicate.");
|
||||||
Destroy(gameObject);
|
Destroy(gameObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
InvokeRepeating(nameof(UpdateProgress), 0.0f, 1.0f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Start()
|
private void Start()
|
||||||
|
{
|
||||||
|
StartGame();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Startet ein neues Spiel.
|
||||||
|
/// </summary>
|
||||||
|
[ContextMenu("Start Game")]
|
||||||
|
private void StartGame()
|
||||||
{
|
{
|
||||||
_remainingGameDurationSeconds = _baseGameDurationSeconds;
|
_remainingGameDurationSeconds = _baseGameDurationSeconds;
|
||||||
|
|
||||||
|
ResumeGame();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Hebt eine Pausierung auf und setzt das Spiel fort, wenn alle Pausierungen aufgehoben wurden.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>Hinweis: Für jedes PauseGame muss ein ResumeGame aufgerufen werden.</remarks>
|
||||||
|
[ContextMenu("Resume Game")]
|
||||||
|
public void ResumeGame()
|
||||||
|
{
|
||||||
|
if (_gameRunning.MakeTruer())
|
||||||
|
{
|
||||||
|
InvokeRepeating(nameof(UpdateProgress), 0.0f, 1.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Pausiert das Spiel. Ist Stapelbar.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>Hinweis: Für jedes PauseGame muss ein ResumeGame aufgerufen werden.</remarks>
|
||||||
|
[ContextMenu("Pause Game")]
|
||||||
|
public void PauseGame()
|
||||||
|
{
|
||||||
|
_gameRunning.MakeFalslier();
|
||||||
|
CancelInvoke(nameof(UpdateProgress));
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateProgress()
|
void UpdateProgress()
|
||||||
|
|
Loading…
Reference in New Issue