using Robust.Shared.Interfaces.Serialization; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using System; using Robust.Shared.Utility; using YamlDotNet.RepresentationModel; namespace Content.Shared.Atmos { [Prototype("gas")] public class GasPrototype : IPrototype, IIndexedPrototype { public string Name { get; private set; } // TODO: Control gas amount necessary for overlay to appear // TODO: Add interfaces for gas behaviours e.g. breathing, burning public string ID { get; private set; } /// /// Specific heat for gas. /// public float SpecificHeat { get; private set; } /// /// Minimum amount of moles for this gas to be visible. /// public float GasMolesVisible { get; private set; } /// /// Visibility for this gas will be max after this value. /// public float GasMolesVisibleMax => GasMolesVisible * Atmospherics.FactorGasVisibleMax; /// /// If this reagent is in gas form, this is the path to the overlay that will be used to make the gas visible. /// public string GasOverlayTexture { get; private set; } /// /// If this reagent is in gas form, this will be the path to the RSI sprite that will be used to make the gas visible. /// public string GasOverlayState { get; set; } /// /// State for the gas RSI overlay. /// public string GasOverlaySprite { get; set; } /// /// Sprite specifier for the gas overlay. /// public SpriteSpecifier GasOverlay { get { if(string.IsNullOrEmpty(GasOverlaySprite) && !string.IsNullOrEmpty(GasOverlayTexture)) return new SpriteSpecifier.Texture(new ResourcePath(GasOverlayTexture)); if(!string.IsNullOrEmpty(GasOverlaySprite) && !string.IsNullOrEmpty(GasOverlayState)) return new SpriteSpecifier.Rsi(new ResourcePath(GasOverlaySprite), GasOverlayState); return null; } } /// /// Path to the tile overlay used when this gas appears visible. /// public string OverlayPath { get; private set; } public void LoadFrom(YamlMappingNode mapping) { var serializer = YamlObjectSerializer.NewReader(mapping); serializer.DataField(this, x => ID, "id", string.Empty); serializer.DataField(this, x => Name, "name", string.Empty); serializer.DataField(this, x => OverlayPath, "overlayPath", string.Empty); serializer.DataField(this, x => SpecificHeat, "specificHeat", 0f); serializer.DataField(this, x => GasMolesVisible, "gasMolesVisible", 0.25f); serializer.DataField(this, x => GasOverlayTexture, "gasOverlayTexture", string.Empty); serializer.DataField(this, x => GasOverlaySprite, "gasOverlaySprite", string.Empty); serializer.DataField(this, x => GasOverlayState, "gasOverlayState", string.Empty); } } }