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; } } }