using System.Collections.Generic;
using Content.Server.Cargo;
using Robust.Shared.GameObjects.Systems;
namespace Content.Server.GameObjects.EntitySystems
{
public class CargoConsoleSystem : EntitySystem
{
///
/// How much time to wait (in seconds) before increasing bank accounts balance.
///
private const float Delay = 10f;
///
/// How many points to give to every bank account every seconds.
///
private const int PointIncrease = 10;
///
/// Keeps track of how much time has elapsed since last balance increase.
///
private float _timer;
///
/// Stores all bank accounts.
///
private readonly Dictionary _accountsDict = new Dictionary();
///
/// Used to assign IDs to bank accounts. Incremental counter.
///
private int _accountIndex = 0;
///
/// Enumeration of all bank accounts.
///
public IEnumerable BankAccounts => _accountsDict.Values;
///
/// The station's bank account.
///
public CargoBankAccount StationAccount => GetBankAccount(0);
public override void Initialize()
{
CreateBankAccount("Orbital Monitor IV Station", 100000);
}
public override void Update(float frameTime)
{
_timer += frameTime;
if (_timer < Delay)
{
return;
}
_timer -= Delay;
foreach (var account in BankAccounts)
{
account.Balance += PointIncrease;
}
}
///
/// Creates a new bank account.
///
public void CreateBankAccount(string name, int balance)
{
var account = new CargoBankAccount(_accountIndex, name, balance);
_accountsDict.Add(_accountIndex, account);
_accountIndex += 1;
}
///
/// Returns the bank account associated with the given ID.
///
public CargoBankAccount GetBankAccount(int id)
{
return _accountsDict[id];
}
///
/// Returns whether the account exists, eventually passing the account in the out parameter.
///
public bool TryGetBankAccount(int id, out CargoBankAccount account)
{
return _accountsDict.TryGetValue(id, out account);
}
///
/// Attempts to change the given account's balance.
/// Returns false if there's no account associated with the given ID
/// or if the balance would end up being negative.
///
public bool ChangeBalance(int id, int amount)
{
if (!TryGetBankAccount(id, out var account))
{
return false;
}
if (account.Balance + amount < 0)
{
return false;
}
account.Balance += amount;
return true;
}
}
}