From e90e8052c40e23a2789b1bd6e0478e2305fa01ef Mon Sep 17 00:00:00 2001 From: keronshb <54602815+keronshb@users.noreply.github.com> Date: Thu, 15 Sep 2022 11:49:01 -0400 Subject: [PATCH] Beam Component and Lightning Component (#10196) --- Content.Client/Beam/BeamSystem.cs | 31 ++++ .../Beam/Components/BeamComponent.cs | 8 + .../Components/LightningComponent.cs | 8 + .../Tests/PrototypeSaveTest.cs | 3 +- Content.Server/Beam/BeamSystem.cs | 172 ++++++++++++++++++ .../Beam/Components/BeamComponent.cs | 8 + .../Components/LightningComponent.cs | 8 + Content.Server/Lightning/LightningSystem.cs | 138 ++++++++++++++ .../Beam/Components/SharedBeamComponent.cs | 120 ++++++++++++ Content.Shared/Beam/SharedBeamSystem.cs | 6 + .../Components/SharedLightningComponent.cs | 60 ++++++ .../Lightning/SharedLightningSystem.cs | 19 ++ .../Audio/Effects/Lightning/licenses.txt | 6 + .../Effects/Lightning/lightningshock.ogg | Bin 0 -> 20149 bytes .../Prototypes/Entities/Effects/lightning.yml | 106 +++++++++++ .../Prototypes/Entities/Virtual/beam.yml | 12 ++ .../Effects/lightning.rsi/blue_lightning.png | Bin 0 -> 5351 bytes .../Effects/lightning.rsi/lightning_1.png | Bin 0 -> 2795 bytes .../Effects/lightning.rsi/lightning_10.png | Bin 0 -> 2722 bytes .../Effects/lightning.rsi/lightning_11.png | Bin 0 -> 2424 bytes .../Effects/lightning.rsi/lightning_12.png | Bin 0 -> 2421 bytes .../Effects/lightning.rsi/lightning_2.png | Bin 0 -> 2090 bytes .../Effects/lightning.rsi/lightning_3.png | Bin 0 -> 2919 bytes .../Effects/lightning.rsi/lightning_4.png | Bin 0 -> 2529 bytes .../Effects/lightning.rsi/lightning_5.png | Bin 0 -> 2677 bytes .../Effects/lightning.rsi/lightning_6.png | Bin 0 -> 2813 bytes .../Effects/lightning.rsi/lightning_7.png | Bin 0 -> 2231 bytes .../Effects/lightning.rsi/lightning_8.png | Bin 0 -> 2934 bytes .../Effects/lightning.rsi/lightning_9.png | Bin 0 -> 2571 bytes .../Textures/Effects/lightning.rsi/meta.json | 152 ++++++++++++++++ .../Effects/lightning.rsi/red_lightning.png | Bin 0 -> 5431 bytes .../lightning.rsi/yellow_lightning.png | Bin 0 -> 4836 bytes 32 files changed, 856 insertions(+), 1 deletion(-) create mode 100644 Content.Client/Beam/BeamSystem.cs create mode 100644 Content.Client/Beam/Components/BeamComponent.cs create mode 100644 Content.Client/Lightning/Components/LightningComponent.cs create mode 100644 Content.Server/Beam/BeamSystem.cs create mode 100644 Content.Server/Beam/Components/BeamComponent.cs create mode 100644 Content.Server/Lightning/Components/LightningComponent.cs create mode 100644 Content.Server/Lightning/LightningSystem.cs create mode 100644 Content.Shared/Beam/Components/SharedBeamComponent.cs create mode 100644 Content.Shared/Beam/SharedBeamSystem.cs create mode 100644 Content.Shared/Lightning/Components/SharedLightningComponent.cs create mode 100644 Content.Shared/Lightning/SharedLightningSystem.cs create mode 100644 Resources/Audio/Effects/Lightning/licenses.txt create mode 100644 Resources/Audio/Effects/Lightning/lightningshock.ogg create mode 100644 Resources/Prototypes/Entities/Effects/lightning.yml create mode 100644 Resources/Prototypes/Entities/Virtual/beam.yml create mode 100644 Resources/Textures/Effects/lightning.rsi/blue_lightning.png create mode 100644 Resources/Textures/Effects/lightning.rsi/lightning_1.png create mode 100644 Resources/Textures/Effects/lightning.rsi/lightning_10.png create mode 100644 Resources/Textures/Effects/lightning.rsi/lightning_11.png create mode 100644 Resources/Textures/Effects/lightning.rsi/lightning_12.png create mode 100644 Resources/Textures/Effects/lightning.rsi/lightning_2.png create mode 100644 Resources/Textures/Effects/lightning.rsi/lightning_3.png create mode 100644 Resources/Textures/Effects/lightning.rsi/lightning_4.png create mode 100644 Resources/Textures/Effects/lightning.rsi/lightning_5.png create mode 100644 Resources/Textures/Effects/lightning.rsi/lightning_6.png create mode 100644 Resources/Textures/Effects/lightning.rsi/lightning_7.png create mode 100644 Resources/Textures/Effects/lightning.rsi/lightning_8.png create mode 100644 Resources/Textures/Effects/lightning.rsi/lightning_9.png create mode 100644 Resources/Textures/Effects/lightning.rsi/meta.json create mode 100644 Resources/Textures/Effects/lightning.rsi/red_lightning.png create mode 100644 Resources/Textures/Effects/lightning.rsi/yellow_lightning.png diff --git a/Content.Client/Beam/BeamSystem.cs b/Content.Client/Beam/BeamSystem.cs new file mode 100644 index 0000000000..c221e79769 --- /dev/null +++ b/Content.Client/Beam/BeamSystem.cs @@ -0,0 +1,31 @@ +using Content.Client.Beam.Components; +using Content.Shared.Beam; +using Content.Shared.Beam.Components; +using Robust.Client.GameObjects; + +namespace Content.Client.Beam; + +public sealed class BeamSystem : SharedBeamSystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeNetworkEvent(BeamVisualizerMessage); + } + + //TODO: Sometime in the future this needs to be replaced with tiled sprites + private void BeamVisualizerMessage(BeamVisualizerEvent args) + { + if (TryComp(args.Beam, out var sprites)) + { + sprites.Rotation = args.UserAngle; + + if (args.BodyState != null) + { + sprites.LayerSetState(0, args.BodyState); + sprites.LayerSetShader(0, args.Shader); + } + } + } +} diff --git a/Content.Client/Beam/Components/BeamComponent.cs b/Content.Client/Beam/Components/BeamComponent.cs new file mode 100644 index 0000000000..eb10d32f53 --- /dev/null +++ b/Content.Client/Beam/Components/BeamComponent.cs @@ -0,0 +1,8 @@ +using Content.Shared.Beam.Components; + +namespace Content.Client.Beam.Components; +[RegisterComponent] +public sealed class BeamComponent : SharedBeamComponent +{ + +} diff --git a/Content.Client/Lightning/Components/LightningComponent.cs b/Content.Client/Lightning/Components/LightningComponent.cs new file mode 100644 index 0000000000..4edc97597f --- /dev/null +++ b/Content.Client/Lightning/Components/LightningComponent.cs @@ -0,0 +1,8 @@ +using Content.Shared.Lightning.Components; + +namespace Content.Client.Lightning.Components; +[RegisterComponent] +public sealed class LightningComponent : SharedLightningComponent +{ + +} diff --git a/Content.IntegrationTests/Tests/PrototypeSaveTest.cs b/Content.IntegrationTests/Tests/PrototypeSaveTest.cs index a59d38fe46..5fe857dcf5 100644 --- a/Content.IntegrationTests/Tests/PrototypeSaveTest.cs +++ b/Content.IntegrationTests/Tests/PrototypeSaveTest.cs @@ -8,6 +8,7 @@ using NUnit.Framework; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Map; +using Robust.Shared.Physics; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.Manager; using Robust.Shared.Serialization.Markdown; @@ -232,7 +233,7 @@ public sealed class PrototypeSaveTest var compName = compFact.GetComponentName(compType); compNames.Add(compName); - if (compType == typeof(MetaDataComponent) || compType == typeof(TransformComponent)) + if (compType == typeof(MetaDataComponent) || compType == typeof(TransformComponent) || compType == typeof(FixturesComponent)) continue; MappingDataNode compMapping; diff --git a/Content.Server/Beam/BeamSystem.cs b/Content.Server/Beam/BeamSystem.cs new file mode 100644 index 0000000000..73d44a24d4 --- /dev/null +++ b/Content.Server/Beam/BeamSystem.cs @@ -0,0 +1,172 @@ +using Content.Server.Beam.Components; +using Content.Server.Lightning; +using Content.Shared.Beam; +using Content.Shared.Beam.Components; +using Content.Shared.Interaction; +using Content.Shared.Lightning; +using Content.Shared.Physics; +using Robust.Server.GameObjects; +using Robust.Shared.Map; +using Robust.Shared.Physics; +using Robust.Shared.Physics.Collision.Shapes; +using Robust.Shared.Physics.Components; +using Robust.Shared.Physics.Dynamics; +using Robust.Shared.Physics.Systems; + +namespace Content.Server.Beam; + +public sealed class BeamSystem : SharedBeamSystem +{ + [Dependency] private readonly FixtureSystem _fixture = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnBeamCreationSuccess); + SubscribeLocalEvent(OnControllerCreated); + SubscribeLocalEvent(OnBeamFired); + SubscribeLocalEvent(OnRemove); + } + + private void OnBeamCreationSuccess(EntityUid uid, BeamComponent component, CreateBeamSuccessEvent args) + { + component.BeamShooter = args.User; + } + + private void OnControllerCreated(EntityUid uid, BeamComponent component, BeamControllerCreatedEvent args) + { + component.OriginBeam = args.OriginBeam; + } + + private void OnBeamFired(EntityUid uid, BeamComponent component, BeamFiredEvent args) + { + component.CreatedBeams.Add(args.CreatedBeam); + } + + private void OnRemove(EntityUid uid, BeamComponent component, ComponentRemove args) + { + if (component.VirtualBeamController == null) + return; + + if (component.CreatedBeams.Count == 0 && component.VirtualBeamController.Value.Valid) + QueueDel(component.VirtualBeamController.Value); + } + + /// + /// If is successful, it spawns a beam from the user to the target. + /// + /// The prototype used to make the beam + /// Angle of the user firing the beam + /// The calculated distance from the user to the target. + /// Where the beam will spawn in + /// Calculated correction so the can be properly dynamically created + /// The virtual beam controller that this beam will use. If one doesn't exist it will be created here. + /// Optional sprite state for the if it needs a dynamic one + /// Optional shader for the and if it needs something other than default + private void CreateBeam(string prototype, + Angle userAngle, + Vector2 calculatedDistance, + MapCoordinates beamStartPos, + Vector2 distanceCorrection, + EntityUid? controller, + string? bodyState = null, + string shader = "unshaded") + { + var beamSpawnPos = beamStartPos; + var ent = Spawn(prototype, beamSpawnPos); + var shape = new EdgeShape(distanceCorrection, new Vector2(0,0)); + var distanceLength = distanceCorrection.Length; + + if (TryComp(ent, out var physics) && TryComp(ent, out var beam)) + { + var fixture = new Fixture(physics, shape) + { + ID = "BeamBody", + Hard = false, + CollisionMask = (int)CollisionGroup.ItemMask, //Change to MobMask + CollisionLayer = (int)CollisionGroup.MobLayer //Change to WallLayer + }; + + _fixture.TryCreateFixture(physics, fixture); + physics.BodyType = BodyType.Dynamic; + + var beamVisualizerEvent = new BeamVisualizerEvent(ent, distanceLength, userAngle, bodyState, shader); + RaiseNetworkEvent(beamVisualizerEvent); + + if (controller != null) + beam.VirtualBeamController = controller; + + else + { + var controllerEnt = Spawn("VirtualBeamEntityController", beamSpawnPos); + beam.VirtualBeamController = controllerEnt; + + _audio.PlayPvs(beam.Sound, beam.Owner); + + var beamControllerCreatedEvent = new BeamControllerCreatedEvent(ent, controllerEnt); + RaiseLocalEvent(controllerEnt, beamControllerCreatedEvent); + } + + //Create the rest of the beam, sprites handled through the BeamVisualizerEvent + for (int i = 0; i < distanceLength-1; i++) + { + beamSpawnPos = beamSpawnPos.Offset(calculatedDistance.Normalized); + var newEnt = Spawn(prototype, beamSpawnPos); + + var ev = new BeamVisualizerEvent(newEnt, distanceLength, userAngle, bodyState, shader); + RaiseNetworkEvent(ev); + } + + var beamFiredEvent = new BeamFiredEvent(ent); + RaiseLocalEvent(beam.VirtualBeamController.Value, beamFiredEvent); + } + } + + /// + /// Called where you want an entity to create a beam from one target to another. + /// Tries to create the beam and does calculations like the distance, angle, and offset. + /// + /// The entity that's firing off the beam + /// The entity that's being targeted by the user + /// The prototype spawned when this beam is created + /// Optional sprite state for the if a default one is not given + /// Optional shader for the if a default one is not given + /// + public void TryCreateBeam(EntityUid user, EntityUid target, string bodyPrototype, string? bodyState = null, string shader = "unshaded", EntityUid? controller = null) + { + if (!user.IsValid() || !target.IsValid()) + return; + + var userMapPos = Transform(user).MapPosition; + var targetMapPos = Transform(target).MapPosition; + + //The distance between the target and the user. + var calculatedDistance = targetMapPos.Position - userMapPos.Position; + var userAngle = calculatedDistance.ToWorldAngle(); + + if (userMapPos.MapId != targetMapPos.MapId) + return; + + //Where the start of the beam will spawn + var beamStartPos = userMapPos.Offset(calculatedDistance.Normalized); + + //Don't divide by zero + if (calculatedDistance.Length == 0) + return; + + if (controller != null && TryComp(controller, out var controllerBeamComp)) + { + controllerBeamComp.HitTargets.Add(user); + controllerBeamComp.HitTargets.Add(target); + } + + var distanceCorrection = calculatedDistance - calculatedDistance.Normalized; + + CreateBeam(bodyPrototype, userAngle, calculatedDistance, beamStartPos, distanceCorrection, controller, bodyState, shader); + + var ev = new CreateBeamSuccessEvent(user, target); + RaiseLocalEvent(user, ev); + } +} diff --git a/Content.Server/Beam/Components/BeamComponent.cs b/Content.Server/Beam/Components/BeamComponent.cs new file mode 100644 index 0000000000..960b59f9a4 --- /dev/null +++ b/Content.Server/Beam/Components/BeamComponent.cs @@ -0,0 +1,8 @@ +using Content.Shared.Beam.Components; + +namespace Content.Server.Beam.Components; +[RegisterComponent] +public sealed class BeamComponent : SharedBeamComponent +{ + +} diff --git a/Content.Server/Lightning/Components/LightningComponent.cs b/Content.Server/Lightning/Components/LightningComponent.cs new file mode 100644 index 0000000000..598d4112a5 --- /dev/null +++ b/Content.Server/Lightning/Components/LightningComponent.cs @@ -0,0 +1,8 @@ +using Content.Shared.Lightning.Components; + +namespace Content.Server.Lightning.Components; +[RegisterComponent] +public sealed class LightningComponent : SharedLightningComponent +{ + +} diff --git a/Content.Server/Lightning/LightningSystem.cs b/Content.Server/Lightning/LightningSystem.cs new file mode 100644 index 0000000000..523cf734ab --- /dev/null +++ b/Content.Server/Lightning/LightningSystem.cs @@ -0,0 +1,138 @@ +using System.Linq; +using Content.Server.Beam; +using Content.Server.Beam.Components; +using Content.Server.Lightning.Components; +using Content.Shared.Lightning; +using Robust.Server.GameObjects; +using Robust.Shared.Physics; +using Robust.Shared.Physics.Dynamics; +using Robust.Shared.Physics.Events; +using Robust.Shared.Random; + +namespace Content.Server.Lightning; + +public sealed class LightningSystem : SharedLightningSystem +{ + [Dependency] private readonly PhysicsSystem _physics = default!; + [Dependency] private readonly BeamSystem _beam = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnCollide); + SubscribeLocalEvent(OnRemove); + } + + private void OnRemove(EntityUid uid, LightningComponent component, ComponentRemove args) + { + if (!TryComp(uid, out var lightningBeam) || !TryComp(lightningBeam.VirtualBeamController, out var beamController)) + { + return; + } + + beamController.CreatedBeams.Remove(uid); + } + + private void OnCollide(EntityUid uid, LightningComponent component, ref StartCollideEvent args) + { + if (!TryComp(uid, out var lightningBeam) || !TryComp(lightningBeam.VirtualBeamController, out var beamController)) + { + return; + } + + if (component.CanArc) + { + while (beamController.CreatedBeams.Count < component.MaxTotalArcs) + { + Arc(component, args.OtherFixture.Body.Owner, lightningBeam.VirtualBeamController.Value); + + var spriteState = LightningRandomizer(); + + component.ArcTargets.Add(args.OtherFixture.Body.Owner); + component.ArcTargets.Add(component.ArcTarget); + + _beam.TryCreateBeam(args.OtherFixture.Body.Owner, component.ArcTarget, component.LightningPrototype, spriteState, controller: lightningBeam.VirtualBeamController.Value); + + //Break from this loop so other created bolts can collide and arc + break; + } + } + } + + /// + /// Fires lightning from user to target + /// + /// Where the lightning fires from + /// Where the lightning fires to + /// The prototype for the lightning to be created + public void ShootLightning(EntityUid user, EntityUid target, string lightningPrototype = "Lightning") + { + var spriteState = LightningRandomizer(); + _beam.TryCreateBeam(user, target, lightningPrototype, spriteState); + } + + /// + /// Looks for a target to arc to in all 8 directions, adds the closest to a local dictionary and picks at random + /// + /// + /// + /// + private void Arc(LightningComponent component, EntityUid target, EntityUid controllerEntity) + { + if (!TryComp(controllerEntity, out var controller)) + return; + + var targetXForm = Transform(target); + var directions = Enum.GetValues().Length; + + var lightningQuery = GetEntityQuery(); + var beamQuery = GetEntityQuery(); + var xformQuery = GetEntityQuery(); + + Dictionary arcDirections = new(); + + //TODO: Add scoring system for the Tesla PR which will have grounding rods + for (int i = 0; i < directions; i++) + { + var direction = (Direction) i; + var (targetPos, targetRot) = targetXForm.GetWorldPositionRotation(xformQuery); + var dirRad = direction.ToAngle() + targetRot; + var ray = new CollisionRay(targetPos, dirRad.ToVec(), component.CollisionMask); + var rayCastResults = _physics.IntersectRay(targetXForm.MapID, ray, component.MaxLength, target, false).ToList(); + + RayCastResults? closestResult = null; + + foreach (var result in rayCastResults) + { + if (lightningQuery.HasComponent(result.HitEntity) + || beamQuery.HasComponent(result.HitEntity) + || component.ArcTargets.Contains(result.HitEntity) + || controller.HitTargets.Contains(result.HitEntity) + || controller.BeamShooter == result.HitEntity) + { + continue; + } + + closestResult = result; + break; + } + + if (closestResult == null) + { + continue; + } + + arcDirections.Add(direction, closestResult.Value.HitEntity); + } + + var randomDirection = (Direction) _random.Next(0, 7); + + if (arcDirections.ContainsKey(randomDirection)) + { + component.ArcTarget = arcDirections.GetValueOrDefault(randomDirection); + arcDirections.Clear(); + } + } +} diff --git a/Content.Shared/Beam/Components/SharedBeamComponent.cs b/Content.Shared/Beam/Components/SharedBeamComponent.cs new file mode 100644 index 0000000000..f5935447fd --- /dev/null +++ b/Content.Shared/Beam/Components/SharedBeamComponent.cs @@ -0,0 +1,120 @@ +using Robust.Shared.Audio; +using Robust.Shared.Map; +using Robust.Shared.Serialization; + +namespace Content.Shared.Beam.Components; +/// +/// Use this as a generic beam. Not for something like a laser gun, more for something continuous like lightning. +/// +public abstract class SharedBeamComponent : Component +{ + /// + /// A unique list of targets that this beam collided with. + /// Useful for code like Arcing in the Lightning Component. + /// + [ViewVariables] + [DataField("hitTargets")] + public HashSet HitTargets = new(); + + /// + /// The virtual entity representing a beam. + /// + [ViewVariables] + [DataField("virtualBeamController")] + public EntityUid? VirtualBeamController; + + /// + /// The first beam created, useful for keeping track of chains. + /// + [ViewVariables] + [DataField("originBeam")] + public EntityUid OriginBeam; + + /// + /// The entity that fired the beam originally + /// + [ViewVariables] + [DataField("beamShooter")] + public EntityUid BeamShooter; + + /// + /// A unique list of created beams that the controller keeps track of. + /// + [ViewVariables] + [DataField("createdBeams")] + public HashSet CreatedBeams = new(); + + /// + /// Sound played upon creation + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("sound")] + public SoundSpecifier? Sound; +} + +/// +/// Called where a is first created. Stores the originator beam euid and the controller euid. +/// Raised on the and broadcast. +/// +public sealed class BeamControllerCreatedEvent : EntityEventArgs +{ + public EntityUid OriginBeam; + public EntityUid BeamControllerEntity; + + public BeamControllerCreatedEvent(EntityUid originBeam, EntityUid beamControllerEntity) + { + OriginBeam = originBeam; + BeamControllerEntity = beamControllerEntity; + } +} + +/// +/// Called after TryCreateBeam succeeds. +/// +public sealed class CreateBeamSuccessEvent : EntityEventArgs +{ + public readonly EntityUid User; + public readonly EntityUid Target; + + public CreateBeamSuccessEvent(EntityUid user, EntityUid target) + { + User = user; + Target = target; + } +} + +/// +/// Called once the beam is fully created +/// +public sealed class BeamFiredEvent : EntityEventArgs +{ + public readonly EntityUid CreatedBeam; + + public BeamFiredEvent(EntityUid createdBeam) + { + CreatedBeam = createdBeam; + } +} + +/// +/// Raised on the new entity created after the creates one. +/// Used to get sprite data over to the client. +/// +[Serializable, NetSerializable] +public sealed class BeamVisualizerEvent : EntityEventArgs +{ + public readonly EntityUid Beam; + public readonly float DistanceLength; + public readonly Angle UserAngle; + public readonly string? BodyState; + public readonly string Shader = "unshaded"; + + public BeamVisualizerEvent(EntityUid beam, float distanceLength, Angle userAngle, string? bodyState = null, string shader = "unshaded") + { + Beam = beam; + DistanceLength = distanceLength; + UserAngle = userAngle; + BodyState = bodyState; + Shader = shader; + } +} diff --git a/Content.Shared/Beam/SharedBeamSystem.cs b/Content.Shared/Beam/SharedBeamSystem.cs new file mode 100644 index 0000000000..1127982cbb --- /dev/null +++ b/Content.Shared/Beam/SharedBeamSystem.cs @@ -0,0 +1,6 @@ +namespace Content.Shared.Beam; + +public abstract class SharedBeamSystem : EntitySystem +{ + +} diff --git a/Content.Shared/Lightning/Components/SharedLightningComponent.cs b/Content.Shared/Lightning/Components/SharedLightningComponent.cs new file mode 100644 index 0000000000..243a97ed04 --- /dev/null +++ b/Content.Shared/Lightning/Components/SharedLightningComponent.cs @@ -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; +/// +/// Handles how lightning acts and is spawned. Use the ShootLightning method to fire lightning from one user to a target. +/// +public abstract class SharedLightningComponent : Component +{ + /// + /// Can this lightning arc? + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("canArc")] + public bool CanArc; + + /// + /// How much should lightning arc in total? + /// Controls the amount of bolts that will spawn. + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("maxTotalArc")] + public int MaxTotalArcs = 50; + + /// + /// The prototype ID used for arcing bolts. Usually will be the same name as the main proto but it could be flexible. + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("lightningPrototype", customTypeSerializer:typeof(PrototypeIdSerializer))] + public string LightningPrototype = "Lightning"; + + /// + /// The target that the lightning will Arc to. + /// + [ViewVariables] + [DataField("arcTarget")] + public EntityUid ArcTarget; + + /// + /// How far should this lightning go? + /// + [ViewVariables(VVAccess.ReadWrite)] + [DataField("maxLength")] + public float MaxLength = 5f; + + /// + /// List of targets that this collided with already + /// + [ViewVariables] + [DataField("arcTargets")] + public HashSet ArcTargets = new(); + + /// + /// What should this arc to? + /// + [ViewVariables] + [DataField("collisionMask")] + public int CollisionMask = (int) (CollisionGroup.MobMask | CollisionGroup.MachineMask); +} diff --git a/Content.Shared/Lightning/SharedLightningSystem.cs b/Content.Shared/Lightning/SharedLightningSystem.cs new file mode 100644 index 0000000000..dc79a81c32 --- /dev/null +++ b/Content.Shared/Lightning/SharedLightningSystem.cs @@ -0,0 +1,19 @@ +using Robust.Shared.Random; + +namespace Content.Shared.Lightning; + +public abstract class SharedLightningSystem : EntitySystem +{ + [Dependency] private readonly IRobustRandom _random = default!; + + /// + /// Picks a random sprite state for the lightning. It's just data that gets passed to the + /// + /// Returns a string "lightning_" + the chosen random number. + 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); + } +} diff --git a/Resources/Audio/Effects/Lightning/licenses.txt b/Resources/Audio/Effects/Lightning/licenses.txt new file mode 100644 index 0000000000..65cf9df2dc --- /dev/null +++ b/Resources/Audio/Effects/Lightning/licenses.txt @@ -0,0 +1,6 @@ +LightningShock.ogg taken from Citadel Station at commit: https://github.com/Citadel-Station-13/Citadel-Station-13/commit/35a1723e98a60f375df590ca572cc90f1bb80bd5 + +- files: ["LightningShock.ogg"] + license: "CC-BY-NC-SA-3.0" + copyright: "LightningShock.ogg taken from Citadel Station." + source: "https://github.com/Citadel-Station-13/Citadel-Station-13/commit/35a1723e98a60f375df590ca572cc90f1bb80bd5" \ No newline at end of file diff --git a/Resources/Audio/Effects/Lightning/lightningshock.ogg b/Resources/Audio/Effects/Lightning/lightningshock.ogg new file mode 100644 index 0000000000000000000000000000000000000000..341a2934d6b37de3fbfd8486c1c286029ece4762 GIT binary patch literal 20149 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 FV1kn~B8UJ0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/lightning.rsi/lightning_1.png b/Resources/Textures/Effects/lightning.rsi/lightning_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d7d187947d1eceaeba1c59527df33c17feead113 GIT binary patch literal 2795 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 xP=@D=2sVJCSmlq@`@ZC=Cgt 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/lightning.rsi/lightning_11.png b/Resources/Textures/Effects/lightning.rsi/lightning_11.png new file mode 100644 index 0000000000000000000000000000000000000000..2c1de9e27e2b0033a977c4603758b70c63c98cc8 GIT binary patch literal 2424 zcmV-;35WKHP)vx`qT=T;&; zKsby{rGmq;C_W(VE2@fbG#y3KT8aV(P@JFRu&n^jIIwUZS}2U9s^B=8P3CeyFpOC~ z|3}f$jKzS}0!mN;S?kMSa&rSOHyXHIETG6eEM@%Xd2B1dtud(n8pr}iqfuPHKMy2g zc&%PXzGcH09#)z{H#g_ls)l?($7`hdIFrHk%_?4^Hg0i`62@UamH?x_Qsl+ra?bg} zv~YwQ&y>sfI2go{V9z7EL>w>-gzJXO975|4V(#G6Z2`9%`c4Fn<0wWIYN>+wh5;l~ zK(mP?@Av`N+>=$S@cH~mh9f|^1o$+>sVP<7<#4v!e@6jigW{^=v=r3rEkzP!1Ez@u z0(5m{g`4O|$egSR4TY=KOgNz(n0pdH22b1~>Q@5+yu!yxO~WTG3olWCJNyl_@SNtu zCqgSUP0}`1&UzT01n3`tv#@}QQODwgMPTHYz*-TX(i%qP#Pu3J9f$(AZvp8v7AZ_c z-szYC94+qFG;L%v{kXWkhJOeaIG5px5efmEgRB`QvOymNe4W#P;6MO3dl%&oKf?4M zevemmAFk2XPteg2f&BRKs_kG}wNO4d1Y7ZN|DFYSCXiaD}8_9YR zmxrHeJD%(kF7F$}bqX@y+q=8{JPR;B?kHrSX<>x)I#N76k4sdVZUhudNHHFSNMn-L z9v|NDzbv=<_qZNuaRex@Dw^fsIXM2+E=Lbu7O5CQ9$T<9ISf&wgMz z>!=LDee{4+68-oa!4Q5Y0?-xwm8|}>N`X>o91R6g;X9U>y*&wV^QNPakv|eeLew4b z;|&I!yR|wB5)0`4PH76BeeNhe;9P<-`T0)s{P_-OzzxR+G_#JVWg{hXwM{I=d+}o` zg-yl>hCWm%P)OGN8dAE3=nF5v5bxQMaJ-UpG|34AAxt{7bY?#`15kr0n#FVt%oQ7q zmbR=ZDkdq=NW;WhD75o6c+!Bx{CWdQE)N`f)@7(Uiu!yvz9PUwY()=&t$8F7cKAR1Ndr3X&M@5ek< z4?3G`bjiP^St=3@LjfG&bzGwfLTD&hMc(nUw`WK6)F4d8{5<3T1*3r*Ouhfcg zu|fM6)wjAD4LPh04W)y_c$+oAA6YRWJ%G3CnH zF`)-=@A-qB?GL0W#4%#QM>G72_x!*9009|bskV<6G0K9a$-gfXF$qc??hjD?buy1q zh#{KVtc2r-{Q;RHd5}1$2yHj|1390L&zX#l5sYV90~IO2*OC*`JV&XDvs^Q&rO$=7 zks%8Z0dgGXpXL@qb71@6Pwtx{y+=Kkcxgo6V30-2GZf%n z*ZKpJ5lv0u%(=73@ZP5>%$%yYRxnJ<$S_?y13&6r>kot@NWXXvk!TD*GX8(Z)8^89JW;W57Hs;OTT48(aN>bqdr&k9dGNLq=B-??!*1 zPxIp>%|61@T4dVn+3F7n78r!2YD)5R(ljvBFtOUv{(xaZ^)W#W1Zn;4et?RH{Q>zc zb6jUCrZ9Y~;V$$C@|ub%H|Yd21Y|E6Hn#c$V*Qf18bZ@(A>Wn$0CRyEGC7QPdS1k|Yr8WtL?l4=Il z_o_coC1U|xLe?Y~G#aSxWq)9W_LpZq@S>z-G{HP^v69X0U4OvOCrLuAEdgwv-rx29 z0AqfPYTr+W$H_NM=0CXMm?arw!swMN(DQjb;FVOm(I4;;?L%aCju7vo^{vw6rrb?* q348Ng#Q9nIs8QhhOK-60000kFL literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/lightning.rsi/lightning_12.png b/Resources/Textures/Effects/lightning.rsi/lightning_12.png new file mode 100644 index 0000000000000000000000000000000000000000..739f48982b21b6d710084ddc31121090868cfea0 GIT binary patch literal 2421 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 U!rKc{6aWAK07*qoM6N<$f@)XP00000 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/lightning.rsi/lightning_3.png b/Resources/Textures/Effects/lightning.rsi/lightning_3.png new file mode 100644 index 0000000000000000000000000000000000000000..649af10dcb708a722d7313f34fe52816c0f403da GIT binary patch literal 2919 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/lightning.rsi/lightning_5.png b/Resources/Textures/Effects/lightning.rsi/lightning_5.png new file mode 100644 index 0000000000000000000000000000000000000000..575c86f60bb0833eb9e3edf26f1bdf13b156ea1f GIT binary patch literal 2677 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/lightning.rsi/lightning_6.png b/Resources/Textures/Effects/lightning.rsi/lightning_6.png new file mode 100644 index 0000000000000000000000000000000000000000..4150ef0d28141e979971baffd590f466a1bfdff9 GIT binary patch literal 2813 zcmVl>zC|ML-^CNxc<@Fsv?4Y?Qm^N0dxD=S%nJ) zr6N%sXlqq(yhU1Gl9C;oPbB1-ZQ8}!mI7aXrEp7JX)b(hZAGUuol?0ZwYTc|h^1M! z)V0g?oeG$n=kp59&np%VYoFujbj@v;UACQe3HOc;+0B>6g+`Ug$uA-!T9j&|izz8p{1H>t*r&sa= z`NfK&?wUeLvuiIgU`!9d98TlnC!0^HV)MAVLH4~7w90N383 z$Fc1ULQB!OymD0wCJdu7y-=%3E?AhD2>jvUow48z6r_2s-)Nlg>R4Opo0DpzzEOT;T>c@S06 z_LWP;#VM+Omo>hjfZ25Jd=Nmp>zx@X(W=*sj|;1YjdTw#83*-VninKB13TV}wf2{a zdIKf?WX=FPT0v}ozaEW7HJZx>WQ?2ViY+ea%E(_|*COFJLfSn*(s^rukgHa8J2YI# z<&^L2R6Sv-QmktnLYl`VM^Ur|7lonc&O?XwcHrv_5p+_vMwbc=o-lO1g)6oy(4{)B z0zWF*f$}JE(l%ri)mx>KenL84T3V6^21;Nf*VChQlv*QC1g@(Pds8U;wAqhKKB!gn zbk)=N#ImlEve!1PadQPWH8jNLA}B|mJ722m(W_T=W?)cnJI=GL-X5JO=d1DKb=MxAFKR-2(lID(ZjU}9h?r`Os#)EbY<`ZgeMs=&2P`LbMYor^|5 zz8YAFfbw#70(W(9M1TuEY)cD7$uhTgtLs`Vd!%S^f*U$b^#rS0HA~hlG4SnW;&@Z* zGVeBI;~{V=mDULkzmv##od|go>l`)uUbvtTq-BGLR&am7j_5C@dg61bva_)s#ugmk_yUYrSSO(_;`OGg)7|fs1s4Ht!-=JvZJE( zI%V8TmjatQK~-Nb88_gT?$Pr~;rliC;Wp3P5YGFv;gH6_&MFbJg%x+Kz_k@8A(UMC zL`nk(xZqT>T@P|%9`-x{9!vz7(rpne6v!v;jo5Hk3K&dKgwz4v;>b}w3G=;&AaU~% zBElsM{|FPxq;iO8h0@LK>f0t0ZfBXBu)u>>vRPg9%6h(~U9XhNdO4kz;0vu5Bqyem zSYs|7z47gLt-$6APMuQy{u8QNp+<%@EGn|6$)>*!MRXR^Pom`Nx$MpB#a+9=yg%}Y zqFznCoPHaoSN75dH?*|sT)m=;5Koz6w%*-s?X3c4O-{;zpgJ+}@mNAH{_nuBo5zA%fbl&gS9oDw>2O3(0j)on?@heJer394*OYBLIdjMJ0lMR)VK-jC zDM1RTOXTd?3&u!heLYJ1D)D3A0adMHoq@4Ld>you%k3k(w8pG9RG1 z$l&izV!lXS_Yn>0CuTl?lwp)IKzx8q_;q{O%!&4XKF~=edmFwsWz{5qpQYlR&M&Ee zy+22h4loe{B;n@F2dY%LfsRwlEmP}%%&jLudodE1OTNEKHI##dR(wa6TTyJU=L0>M z_9>z}px65tD||}zyU1hTHS+<4`0XOFZ1ya*R zwjDr;{p5mf0C_K#XrW(liHtSd*Fq{zZ@J6)K*5P?m1g2$4nAgkx?B(RKA~9dNU2B< zScRmrVBl{&zl%s2MtBO$7$ppb0xWZZcJA|BE-*^$cs?*sQTcmXuOkKvK}f@)K!ksL4FoGXq|8s$-MAg&ziDgZZvRAdk z`M@Ia{-0`1K0I(2W*y+*eqJ=%4PjUE%euh+$>c^c;;rN<(TW-MTg(SSr=@g+iLKW0=`$Q1n5%a242R9r;&_S#*%J#+U<^%00c{m)^3G&Jc`_}hvK5#_^ ztT4)#SX^B^O>_Iq`v2zxU0CFPZf(HpgQL^nVScaY0~LH7aI+2omLW|0FN`Wpy|@N@ z4guJQxp^AQ{1fHAYRY_|=nzgF9uW-R~)8_*e z9S)4w$IW|SBV*$%7P)AIH+?>^IIqr-LzeUOocSIe@Te7vSfRYr`M`ex?Uk(;0b3-f P00000NkvXXu0mjfhWAlK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/lightning.rsi/lightning_7.png b/Resources/Textures/Effects/lightning.rsi/lightning_7.png new file mode 100644 index 0000000000000000000000000000000000000000..2a18c12484fec917123627b3ace0277eecf10880 GIT binary patch literal 2231 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Effects/lightning.rsi/lightning_9.png b/Resources/Textures/Effects/lightning.rsi/lightning_9.png new file mode 100644 index 0000000000000000000000000000000000000000..b038cceca111cf260b6135af658e29a54fad6e03 GIT binary patch literal 2571 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 KMNUMnLSTZM7d0LL literal 0 HcmV?d00001