Rock and Meat anom rework (try 2) (#24449)

* rework

* bruh

* all fixed

* balance

* bb

* Update TileAnomalySystem.cs

* Update EntityAnomalySystem.cs

* spawn on shutdown variant

* fix entites, fix DataRecord

* fix some review

* god forgive me

* oh fuck wrong brench

* Revert "oh fuck wrong brench"

This reverts commit c81f57f7830c8e55fd47982500c57281af40b0dc.
This commit is contained in:
Ed
2024-01-27 05:52:07 +03:00
committed by GitHub
parent 149654be88
commit de9d7aed17
17 changed files with 768 additions and 285 deletions

View File

@@ -1,53 +1,25 @@
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
namespace Content.Shared.Anomaly.Effects.Components;
[RegisterComponent]
[RegisterComponent, NetworkedComponent, Access(typeof(SharedEntityAnomalySystem))]
public sealed partial class EntitySpawnAnomalyComponent : Component
{
/// <summary>
/// All types of entity spawns with their settings
/// </summary>
[DataField]
public List<EntitySpawnSettingsEntry> Entries = new();
}
[DataRecord]
public partial record struct EntitySpawnSettingsEntry()
{
/// <summary>
/// A list of entities that are random picked to be spawned on each pulse
/// </summary>
[DataField]
public List<EntProtoId> Spawns = new();
public List<EntProtoId> Spawns { get; set; } = new();
/// <summary>
/// A list of entities that are random picked to be spawned when supercritical;
/// </summary>
[DataField]
public List<EntProtoId> SuperCriticalSpawns = new();
/// <summary>
/// The maximum number of entities that spawn per pulse
/// scales with severity.
/// </summary>
[DataField("maxSpawnAmount"), ViewVariables(VVAccess.ReadWrite)]
public int MaxSpawnAmount = 7;
/// <summary>
/// The maximum radius the entities will spawn in.
/// Also governs the maximum reach of flesh tiles
/// scales with stability
/// </summary>
[DataField("spawnRange"), ViewVariables(VVAccess.ReadWrite)]
public float SpawnRange = 5f;
/// <summary>
/// Whether or not anomaly spawns entities on Pulse
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public bool SpawnOnPulse = true;
/// <summary>
/// Whether or not anomaly spawns entities on SuperCritical
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public bool SpawnOnSuperCritical = true;
/// <summary>
/// Whether or not anomaly spawns entities on StabilityChanged
/// The idea was to spawn entities either on Pulse/Supercritical OR StabilityChanged
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public bool SpawnOnStabilityChanged = false;
public AnomalySpawnSettings Settings { get; set; } = new();
}

View File

@@ -1,26 +0,0 @@
using Content.Shared.Maps;
using Robust.Shared.Prototypes;
namespace Content.Shared.Anomaly.Effects.Components;
[RegisterComponent]
public sealed partial class TileSpawnAnomalyComponent : Component
{
/// <summary>
/// The maximum radius of tiles scales with stability
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float SpawnRange = 5f;
/// <summary>
/// The probability a tile will spawn.
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public float SpawnChance = 0.33f;
/// <summary>
/// The tile that is spawned by the anomaly's effect
/// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)]
public ProtoId<ContentTileDefinition> FloorTileId = "FloorFlesh";
}

View File

@@ -0,0 +1,26 @@
using Content.Shared.Maps;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
namespace Content.Shared.Anomaly.Effects.Components;
[RegisterComponent, NetworkedComponent, Access(typeof(SharedTileAnomalySystem))]
public sealed partial class TileSpawnAnomalyComponent : Component
{
/// <summary>
/// All types of floors spawns with their settings
/// </summary>
[DataField]
public List<TileSpawnSettingsEntry> Entries = new();
}
[DataRecord]
public partial record struct TileSpawnSettingsEntry()
{
/// <summary>
/// The tile that is spawned by the anomaly's effect
/// </summary>
public ProtoId<ContentTileDefinition> Floor { get; set; } = default!;
public AnomalySpawnSettings Settings { get; set; } = new();
}