using Content.Shared.Atmos;
using Content.Shared.Gravity;
using Content.Shared.Light.Components;
using Content.Shared.Procedural.Components;
using Robust.Shared.Map.Components;
using Robust.Shared.Prototypes;
namespace Content.Server.Procedural;
public sealed partial class BiomeSystem
{
///
/// Copies the biomecomponent to the specified map.
///
public BiomeComponent? AddBiome(Entity mapUid, EntProtoId biomeTemplate, int? seed = null)
{
if (!_protomanager.Index(biomeTemplate).Components.TryGetComponent(Factory.GetComponentName(), out var template))
{
return null;
}
var biome = Factory.GetComponent();
var biomeObj = (object)biome;
_serManager.CopyTo(template, ref biomeObj, notNullableOverride: true);
seed ??= _random.Next();
biome.Seed = seed.Value;
AddComp(mapUid, biome, true);
return biome;
}
///
/// Creates a simple planet setup for a map.
///
public void EnsurePlanet(EntityUid mapUid, EntProtoId biomeTemplate, int? seed = null, MetaDataComponent? metadata = null, Color? mapLight = null)
{
if (!Resolve(mapUid, ref metadata))
return;
EnsureComp(mapUid);
AddBiome(mapUid, biomeTemplate, seed);
var gravity = EnsureComp(mapUid);
gravity.Enabled = true;
gravity.Inherent = true;
Dirty(mapUid, gravity, metadata);
var light = EnsureComp(mapUid);
light.AmbientLightColor = mapLight ?? Color.FromHex("#D8B059");
Dirty(mapUid, light, metadata);
EnsureComp(mapUid);
EnsureComp(mapUid);
EnsureComp(mapUid);
EnsureComp(mapUid);
var moles = new float[Atmospherics.AdjustedNumberOfGases];
moles[(int)Gas.Oxygen] = 21.824779f;
moles[(int)Gas.Nitrogen] = 82.10312f;
var mixture = new GasMixture(moles, Atmospherics.T20C);
_atmos.SetMapAtmosphere(mapUid, false, mixture);
}
}