estimate ui

This commit is contained in:
2022-12-14 21:57:03 +01:00
parent 5e2af5468c
commit 12b0acbcbe
7 changed files with 368 additions and 211 deletions

View File

@@ -19,24 +19,27 @@ namespace EscapeRoomEngine.Engine.Runtime.UI
[BoxGroup("Internal")] [SerializeField]
private Button startButton, stopButton, pauseButton, addTimeButton, removeTimeButton;
[BoxGroup("Internal")] [SerializeField]
private Text timeText, targetTimeText, estimateTimeText;
private Text timeText, roomTimeText, estimateTimeText, targetTimeText;
[BoxGroup("Internal")] [SerializeField]
private float uiUpdateInterval = 1;
[HideInInspector] public GameState gameState = GameState.Stopped;
private float _timeElapsed, _targetTime;
public float TimeElapsed { get; private set; }
public float TimeInRoom { get; set; }
public float TargetTime { get; private set; }
private float _previousUIUpdate;
private void Awake()
{
Instance = this;
_targetTime = Engine.Instance.initialTargetTime;
}
private void Start()
{
TargetTime = Engine.Instance.initialTargetTime;
SetTimeText();
}
@@ -45,7 +48,8 @@ namespace EscapeRoomEngine.Engine.Runtime.UI
// update time
if (gameState == GameState.Running)
{
_timeElapsed += Time.deltaTime;
TimeElapsed += Time.deltaTime;
TimeInRoom += Time.deltaTime;
}
// update ui
@@ -61,7 +65,7 @@ namespace EscapeRoomEngine.Engine.Runtime.UI
stopButton.interactable = gameState != GameState.Stopped;
pauseButton.interactable = gameState is GameState.Running or GameState.Paused;
addTimeButton.interactable = gameState != GameState.Stopped;
removeTimeButton.interactable = gameState != GameState.Stopped && _targetTime >= _timeElapsed + 60;
removeTimeButton.interactable = gameState != GameState.Stopped && TargetTime >= TimeElapsed + 60;
}
#region Time Controls
@@ -70,7 +74,7 @@ namespace EscapeRoomEngine.Engine.Runtime.UI
{
gameState = GameState.Running;
_timeElapsed = 0;
TimeElapsed = 0;
// generate the first room if it hasn't been generated yet
Engine.Instance.CurrentRoom.Match(none: () => Engine.Instance.GenerateRoom());
@@ -84,7 +88,7 @@ namespace EscapeRoomEngine.Engine.Runtime.UI
if (gameState != GameState.Stopped)
{
// was running
Measure.EndSession(_timeElapsed);
Measure.EndSession(TimeElapsed);
}
gameState = GameState.Stopped;
@@ -112,17 +116,25 @@ namespace EscapeRoomEngine.Engine.Runtime.UI
/// <param name="seconds">The amount of seconds that will be added to the time. Can be negative to remove time.</param>
public void ChangeTime(int seconds)
{
if (_targetTime + seconds >= _timeElapsed)
if (TargetTime + seconds >= TimeElapsed)
{
_targetTime += seconds;
TargetTime += seconds;
}
}
private void SetTimeText()
{
timeText.text = TimeToText(_timeElapsed);
targetTimeText.text = TimeToText(_targetTime);
estimateTimeText.text = TimeToText(_timeElapsed);
timeText.text = TimeToText(TimeElapsed);
roomTimeText.text = TimeToText(TimeInRoom);
targetTimeText.text = TimeToText(TargetTime);
Engine.Instance.CurrentRoom.Match(some: room =>
{
estimateTimeText.text = TimeToText(
TimeElapsed - TimeInRoom
+ Mathf.Max(TimeInRoom, Measure.AverageTime(room))
+ Engine.Instance.EstimatedTimeRemaining);
});
}
private static string TimeToText(float time) => $"{time.ToTimeSpan():mm':'ss}";