using Content.Shared.Chemistry.Reagent;
using Content.Shared.EntityEffects;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Set;
namespace Content.Shared.Chemistry.Reaction;
[RegisterComponent]
public sealed partial class ReactiveComponent : Component
{
///
/// A dictionary of reactive groups -> methods that work on them.
///
[DataField("groups", readOnly: true, serverOnly: true,
customTypeSerializer:
typeof(PrototypeIdDictionarySerializer, ReactiveGroupPrototype>))]
public Dictionary>? ReactiveGroups;
///
/// Special reactions that this prototype can specify, outside of any that reagents already apply.
/// Useful for things like monkey cubes, which have a really prototype-specific effect.
///
[DataField("reactions", true, serverOnly: true)]
public List? Reactions;
}
[DataDefinition]
public sealed partial class ReactiveReagentEffectEntry
{
[DataField("methods")]
public HashSet Methods = default!;
[DataField("reagents", customTypeSerializer: typeof(PrototypeIdHashSetSerializer))]
public HashSet? Reagents = null;
[DataField("effects", required: true)]
public EntityEffect[] Effects = default!;
[DataField("groups", readOnly: true, serverOnly: true,
customTypeSerializer:typeof(PrototypeIdDictionarySerializer, ReactiveGroupPrototype>))]
public Dictionary>? ReactiveGroups { get; private set; }
}