Ice anomaly (#15925)

Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
This commit is contained in:
ThunderBear2006
2023-05-03 14:37:33 -04:00
committed by GitHub
parent d52184a561
commit 8951b9f26a
18 changed files with 472 additions and 65 deletions

View File

@@ -0,0 +1,32 @@
using Content.Shared.Explosion;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
namespace Content.Server.Anomaly.Components;
[RegisterComponent]
public sealed class ExplosionAnomalyComponent : Component
{
/// <summary>
/// The explosion prototype to spawn
/// </summary>
[DataField("supercriticalExplosion", required: true, customTypeSerializer: typeof(PrototypeIdSerializer<ExplosionPrototype>))]
public string ExplosionPrototype = default!;
/// <summary>
/// The total amount of intensity an explosion can achieve
/// </summary>
[DataField("explosionTotalIntensity")]
public float TotalIntensity = 100f;
/// <summary>
/// How quickly does the explosion's power slope? Higher = smaller area and more concentrated damage, lower = larger area and more spread out damage
/// </summary>
[DataField("explosionDropoff")]
public float Dropoff = 10f;
/// <summary>
/// How much intensity can be applied per tile?
/// </summary>
[DataField("explosionMaxTileIntensity")]
public float MaxTileIntensity = 10f;
}

View File

@@ -0,0 +1,40 @@
using Content.Shared.Atmos;
namespace Content.Server.Anomaly.Components;
/// <summary>
/// This component is used for handling gas producing anomalies
/// </summary>
[RegisterComponent]
public sealed class GasProducerAnomalyComponent : Component
{
/// <summary>
/// Should this gas be released when an anomaly reaches max severity?
/// </summary>
[DataField("releaseOnMaxSeverity")]
public bool ReleaseOnMaxSeverity = false;
/// <summary>
/// Should this gas be released over time?
/// </summary>
[DataField("releasePassively")]
public bool ReleasePassively = false; // In case there are any future anomalies that release gas passively
/// <summary>
/// The gas to release
/// </summary>
[DataField("releasedGas", required: true)]
public Gas ReleasedGas = Gas.WaterVapor; // There is no entry for none, and Gas cannot be null
/// <summary>
/// The amount of gas released when the anomaly reaches max severity
/// </summary>
[DataField("criticalMoleAmount")]
public float SuperCriticalMoleAmount = 150f;
/// <summary>
/// The amount of gas released passively
/// </summary>
[DataField("passiveMoleAmount")]
public float PassiveMoleAmount = 1f;
}

View File

@@ -0,0 +1,38 @@
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
namespace Content.Server.Anomaly.Components;
[RegisterComponent]
public sealed class ProjectileAnomalyComponent : Component
{
/// <sumarry>
/// The prototype of the projectile that will be shot when the anomaly pulses
/// </summary>
[DataField("projectilePrototype", required: true, customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>))]
public string ProjectilePrototype = default!;
/// <summary>
/// The MAXIMUM speed <see cref="ProjectilePrototype"/> can travel
/// </summary>
[DataField("maxProjectileSpeed")]
public float MaxProjectileSpeed = 30f;
/// <summary>
/// The MAXIMUM number of projectiles shot per pulse
/// </summary>
[DataField("maxProjectiles")]
public int MaxProjectiles = 5;
/// <summary>
/// The MAXIMUM range for targeting entities
/// </summary>
[DataField("projectileRange")]
public float ProjectileRange = 50f;
/// <summary>
/// Chance that a non sentient entity will be targeted, value must be between 0.0-1.0
/// </summary>
[DataField("targetNonSentientChance")]
public float TargetNonSentientChance = 0.5f;
}

View File

@@ -0,0 +1,34 @@
namespace Content.Server.Anomaly.Components;
/// <summary>
/// This component is used for handling anomalies that affect the temperature
/// </summary>
[RegisterComponent]
public sealed class TempAffectingAnomalyComponent : Component
{
/// <summary>
/// The the amount the tempurature should be modified by (negative for decreasing temp)
/// </summary>
[DataField("tempChangePerSecond")]
public float TempChangePerSecond = 0;
/// <summary>
/// The minimum amount of severity required
/// before the anomaly becomes a hotspot.
/// </summary>
[DataField("anomalyHotSpotThreshold")]
public float AnomalyHotSpotThreshold = 0.6f;
/// <summary>
/// The temperature of the hotspot where the anomaly is
/// </summary>
[DataField("hotspotExposeTemperature")]
public float HotspotExposeTemperature = 0;
/// <summary>
/// The volume of the hotspot where the anomaly is.
/// </summary>
[DataField("hotspotExposeVolume")]
public float HotspotExposeVolume = 50;
}