Fan website of IMMORTAL: Gates of Pyre.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

96 lines
2.4 KiB

using Services.Website;
namespace Services.Immortal;
public class TimingService : ITimingService, IDisposable
{
private readonly IStorageService _storageService;
private int attackTime = 1500;
private int travelTime = 30;
public TimingService(IStorageService storageService)
{
_storageService = storageService;
_storageService.Subscribe(RefreshDefaults);
RefreshDefaults();
}
void IDisposable.Dispose()
{
_storageService.Unsubscribe(RefreshDefaults);
}
public void Subscribe(Action? action)
{
OnChange += action;
}
public void Unsubscribe(Action? action)
{
OnChange -= action;
}
public int BuildingInputDelay { get; set; } = 2;
public int WaitTime { get; set; } = 30;
public int WaitTo { get; set; } = 60;
public int GetAttackTime()
{
return attackTime;
}
public void SetAttackTime(int timing)
{
if (attackTime != timing)
{
attackTime = timing;
NotifyDataChanged();
}
}
public int GetTravelTime()
{
return travelTime;
}
public void SetTravelTime(int timing)
{
if (travelTime != timing)
{
travelTime = timing;
NotifyDataChanged();
}
}
private void RefreshDefaults()
{
//TODO Timing has changed in Storage
//TODO Timing has changed in itself
var foundAttackTime = _storageService.GetValue<int?>(StorageKeys.AttackTime);
var foundTravelTime = _storageService.GetValue<int?>(StorageKeys.TravelTime);
var foundBuildInputDefault = _storageService.GetValue<int?>(StorageKeys.BuildInputDelay);
var foundWaitTime = _storageService.GetValue<int?>(StorageKeys.WaitTime);
var foundWaitTo = _storageService.GetValue<int?>(StorageKeys.WaitTo);
if (foundAttackTime != null) attackTime = (int)foundAttackTime;
if (foundTravelTime != null) travelTime = (int)foundTravelTime;
if (foundBuildInputDefault != null) BuildingInputDelay = (int)foundBuildInputDefault;
if (foundWaitTime != null) WaitTime = (int)foundWaitTime;
if (foundWaitTo != null) WaitTo = (int)foundWaitTo;
NotifyDataChanged();
}
private event Action? OnChange;
private void NotifyDataChanged()
{
OnChange?.Invoke();
}
}