biome flexibility changes (#28017)

make biome apply template on mapinit, add api for setting Enabled

Co-authored-by: deltanedas <@deltanedas:kde.org>
This commit is contained in:
deltanedas
2024-05-15 03:27:25 +00:00
committed by GitHub
parent c94751f2d2
commit e37f95c24c
2 changed files with 19 additions and 7 deletions

View File

@@ -39,6 +39,7 @@ public sealed partial class BiomeSystem : SharedBiomeSystem
[Dependency] private readonly IConsoleHost _console = default!; [Dependency] private readonly IConsoleHost _console = default!;
[Dependency] private readonly IMapManager _mapManager = default!; [Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IParallelManager _parallel = default!; [Dependency] private readonly IParallelManager _parallel = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!; [Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly AtmosphereSystem _atmos = default!; [Dependency] private readonly AtmosphereSystem _atmos = default!;
@@ -119,6 +120,9 @@ public sealed partial class BiomeSystem : SharedBiomeSystem
SetSeed(uid, component, _random.Next()); SetSeed(uid, component, _random.Next());
} }
if (_proto.TryIndex(component.Template, out var biome))
SetTemplate(uid, component, biome);
var xform = Transform(uid); var xform = Transform(uid);
var mapId = xform.MapID; var mapId = xform.MapID;
@@ -151,6 +155,15 @@ public sealed partial class BiomeSystem : SharedBiomeSystem
} }
} }
public void SetEnabled(Entity<BiomeComponent?> ent, bool enabled = true)
{
if (!Resolve(ent, ref ent.Comp) || ent.Comp.Enabled == enabled)
return;
ent.Comp.Enabled = enabled;
Dirty(ent, ent.Comp);
}
public void SetSeed(EntityUid uid, BiomeComponent component, int seed, bool dirty = true) public void SetSeed(EntityUid uid, BiomeComponent component, int seed, bool dirty = true)
{ {
component.Seed = seed; component.Seed = seed;

View File

@@ -30,14 +30,13 @@ public sealed partial class BiomeComponent : Component
public List<IBiomeLayer> Layers = new(); public List<IBiomeLayer> Layers = new();
/// <summary> /// <summary>
/// Templates to use for <see cref="Layers"/>. Optional as this can be set elsewhere. /// Templates to use for <see cref="Layers"/>.
/// If this is set on mapinit, it will fill out layers automatically.
/// If not set, use <c>BiomeSystem</c> to do it.
/// Prototype reloading will also use this.
/// </summary> /// </summary>
/// <remarks> [DataField]
/// This is really just here for prototype reload support. public ProtoId<BiomeTemplatePrototype>? Template;
/// </remarks>
[ViewVariables(VVAccess.ReadWrite),
DataField("template", customTypeSerializer: typeof(PrototypeIdSerializer<BiomeTemplatePrototype>))]
public string? Template;
/// <summary> /// <summary>
/// If we've already generated a tile and couldn't deload it then we won't ever reload it in future. /// If we've already generated a tile and couldn't deload it then we won't ever reload it in future.