Beam Component and Lightning Component (#10196)
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
using Content.Shared.Physics;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
||||
|
||||
namespace Content.Shared.Lightning.Components;
|
||||
/// <summary>
|
||||
/// Handles how lightning acts and is spawned. Use the ShootLightning method to fire lightning from one user to a target.
|
||||
/// </summary>
|
||||
public abstract class SharedLightningComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// Can this lightning arc?
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField("canArc")]
|
||||
public bool CanArc;
|
||||
|
||||
/// <summary>
|
||||
/// How much should lightning arc in total?
|
||||
/// Controls the amount of bolts that will spawn.
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField("maxTotalArc")]
|
||||
public int MaxTotalArcs = 50;
|
||||
|
||||
/// <summary>
|
||||
/// The prototype ID used for arcing bolts. Usually will be the same name as the main proto but it could be flexible.
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField("lightningPrototype", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
|
||||
public string LightningPrototype = "Lightning";
|
||||
|
||||
/// <summary>
|
||||
/// The target that the lightning will Arc to.
|
||||
/// </summary>
|
||||
[ViewVariables]
|
||||
[DataField("arcTarget")]
|
||||
public EntityUid ArcTarget;
|
||||
|
||||
/// <summary>
|
||||
/// How far should this lightning go?
|
||||
/// </summary>
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
[DataField("maxLength")]
|
||||
public float MaxLength = 5f;
|
||||
|
||||
/// <summary>
|
||||
/// List of targets that this collided with already
|
||||
/// </summary>
|
||||
[ViewVariables]
|
||||
[DataField("arcTargets")]
|
||||
public HashSet<EntityUid> ArcTargets = new();
|
||||
|
||||
/// <summary>
|
||||
/// What should this arc to?
|
||||
/// </summary>
|
||||
[ViewVariables]
|
||||
[DataField("collisionMask")]
|
||||
public int CollisionMask = (int) (CollisionGroup.MobMask | CollisionGroup.MachineMask);
|
||||
}
|
||||
19
Content.Shared/Lightning/SharedLightningSystem.cs
Normal file
19
Content.Shared/Lightning/SharedLightningSystem.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Shared.Lightning;
|
||||
|
||||
public abstract class SharedLightningSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
|
||||
/// <summary>
|
||||
/// Picks a random sprite state for the lightning. It's just data that gets passed to the <see cref="BeamComponent"/>
|
||||
/// </summary>
|
||||
/// <returns>Returns a string "lightning_" + the chosen random number.</returns>
|
||||
public string LightningRandomizer()
|
||||
{
|
||||
//When the lightning is made with TryCreateBeam, spawns random sprites for each beam to make it look nicer.
|
||||
var spriteStateNumber = _random.Next(1, 12);
|
||||
return ("lightning_" + spriteStateNumber);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user