using Content.Shared.Prototypes.Cargo; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using System; using System.Collections; using System.Collections.Generic; namespace Content.Shared.GameObjects.Components.Cargo { public class SharedGalacticMarketComponent : Component, IEnumerable { public sealed override string Name => "GalacticMarket"; public sealed override uint? NetID => ContentNetIDs.GALACTIC_MARKET; protected List _products = new List(); /// /// A read-only list of products. /// public IReadOnlyList Products => _products; public IEnumerator GetEnumerator() { return _products.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } /// /// Returns a product from the string id; /// /// Product public CargoProductPrototype GetProduct(string productId) { var prototypeManager = IoCManager.Resolve(); if (!prototypeManager.TryIndex(productId, out CargoProductPrototype product) || !_products.Contains(product)) { return null; } return product; } /// /// Returns a list with the IDs of all products. /// /// A list of product IDs public List GetProductIdList() { List productIds = new List(); foreach (var product in _products) { productIds.Add(product.ID); } return productIds; } public override void ExposeData(ObjectSerializer serializer) { base.ExposeData(serializer); serializer.DataReadWriteFunction( "products", new List(), products => { var prototypeManager = IoCManager.Resolve(); _products.Clear(); foreach (var id in products) { if (!prototypeManager.TryIndex(id, out CargoProductPrototype product)) { continue; } _products.Add(product); } }, GetProductIdList); } } [Serializable, NetSerializable] public class GalacticMarketState : ComponentState { public List Products; public GalacticMarketState(List technologies) : base(ContentNetIDs.GALACTIC_MARKET) { Products = technologies; } } }