using System.Collections.Generic; namespace Barotrauma { internal partial class Wallet { private readonly Queue transactions = new Queue(); public bool ShouldForceUpdate; partial void SettingsChanged(Option balanceChanged, Option rewardChanged) { transactions.Enqueue(new WalletChangedData { BalanceChanged = balanceChanged, RewardDistributionChanged = rewardChanged }); } /// /// Forces the server to sync the state of the wallet regardless if the balance/reward has changed /// public void ForceUpdate() { SettingsChanged(balanceChanged: Option.Some(0), rewardChanged: Option.None()); ShouldForceUpdate = true; } public bool HasTransactions() => transactions.Count > 0; public NetWalletTransaction DequeueAndMergeTransactions(ushort id) { Option targetCharacterID = id == Entity.NullEntityID ? Option.None() : Option.Some(id); WalletChangedData changedData = new WalletChangedData { BalanceChanged = Option.None(), RewardDistributionChanged = Option.None() }; while (transactions.TryDequeue(out WalletChangedData transactionOut)) { changedData = changedData.MergeInto(transactionOut); } return new NetWalletTransaction { CharacterID = targetCharacterID, ChangedData = changedData, Info = CreateWalletInfo() }; } } }