using System.Collections.Generic; using System.Linq; using System.Text.Json.Serialization; using Content.Server.Body.Components; using Content.Shared.Chemistry.Reaction; using Content.Shared.Chemistry.Reagent; using Content.Shared.Converters; using Robust.Shared.Maths; using Robust.Shared.Serialization.Manager.Attributes; namespace Content.Server.GuideGenerator; public class ReagentEntry { [JsonPropertyName("id")] public string Id { get; } [JsonPropertyName("name")] public string Name { get; } [JsonPropertyName("group")] public string Group { get; } [JsonPropertyName("desc")] public string Description { get; } [JsonPropertyName("physicalDesc")] public string PhysicalDescription { get; } [JsonPropertyName("color")] public string SubstanceColor { get; } [JsonPropertyName("recipes")] public List Recipes { get; } = new(); [JsonPropertyName("metabolisms")] public Dictionary? Metabolisms { get; } public ReagentEntry(ReagentPrototype proto) { Id = proto.ID; Name = proto.Name; Group = proto.Group; Description = proto.Description; PhysicalDescription = proto.PhysicalDescription; SubstanceColor = proto.SubstanceColor.ToHex(); Metabolisms = proto.Metabolisms; } } [JsonConverter(typeof(UniversalJsonConverter))] public class ReactionEntry { [JsonPropertyName("id")] public string Id { get; } [JsonPropertyName("name")] public string Name { get; } [JsonPropertyName("reactants")] public Dictionary Reactants { get; } [JsonPropertyName("products")] public Dictionary Products { get; } [JsonPropertyName("effects")] public List Effects { get; } public ReactionEntry(ReactionPrototype proto) { Id = proto.ID; Name = proto.Name; Reactants = proto.Reactants .Select(x => KeyValuePair.Create(x.Key, new ReactantEntry(x.Value.Amount.Float(), x.Value.Catalyst))) .ToDictionary(x => x.Key, x => x.Value); Products = proto.Products .Select(x => KeyValuePair.Create(x.Key, x.Value.Float())) .ToDictionary(x => x.Key, x => x.Value); Effects = proto.Effects; } } public class ReactantEntry { [JsonPropertyName("amount")] public float Amount { get; } [JsonPropertyName("catalyst")] public bool Catalyst { get; } public ReactantEntry(float amnt, bool cata) { Amount = amnt; Catalyst = cata; } }