51 lines
1.2 KiB
C#
51 lines
1.2 KiB
C#
using System;
|
|
|
|
namespace Core.Systems
|
|
{
|
|
public class TimeAttackSystem : IDisposable
|
|
{
|
|
private float _timeRemaining;
|
|
private readonly float _penaltyPerDrop;
|
|
|
|
public TimeAttackSystem(float initialTime, float penaltyPerDrop = 5f)
|
|
{
|
|
_timeRemaining = initialTime;
|
|
_penaltyPerDrop = penaltyPerDrop;
|
|
|
|
GameEvents.ReportTimeUpdated(_timeRemaining);
|
|
|
|
GameEvents.PresentDropped += OnPresentDropped;
|
|
}
|
|
|
|
public void Tick(float deltaTime)
|
|
{
|
|
if (_timeRemaining <= 0) return;
|
|
|
|
_timeRemaining -= deltaTime;
|
|
|
|
if (_timeRemaining <= 0)
|
|
{
|
|
_timeRemaining = 0;
|
|
GameEvents.ReportTimeUpdated(0f);
|
|
GameEvents.ReportGameOver();
|
|
}
|
|
else
|
|
{
|
|
GameEvents.ReportTimeUpdated(_timeRemaining);
|
|
}
|
|
}
|
|
|
|
private void OnPresentDropped()
|
|
{
|
|
if (_timeRemaining > 0)
|
|
{
|
|
_timeRemaining -= _penaltyPerDrop;
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
GameEvents.PresentDropped -= OnPresentDropped;
|
|
}
|
|
}
|
|
} |