diff --git a/Content.Server/Explosion/Components/OnTrigger/TwoStageTriggerComponent.cs b/Content.Server/Explosion/Components/OnTrigger/TwoStageTriggerComponent.cs index abef1ed476..357286b192 100644 --- a/Content.Server/Explosion/Components/OnTrigger/TwoStageTriggerComponent.cs +++ b/Content.Server/Explosion/Components/OnTrigger/TwoStageTriggerComponent.cs @@ -19,12 +19,15 @@ public sealed partial class TwoStageTriggerComponent : Component /// /// This list of components that will be added for the second trigger. /// - [ViewVariables(VVAccess.ReadOnly)] [DataField("components", required: true)] public ComponentRegistry SecondStageComponents = new(); [DataField("nextTriggerTime", customTypeSerializer: typeof(TimeOffsetSerializer))] public TimeSpan? NextTriggerTime; - [ViewVariables(VVAccess.ReadWrite), DataField("triggered")] public bool Triggered = false; + [DataField("triggered")] + public bool Triggered = false; + + [DataField("ComponentsIsLoaded")] + public bool ComponentsIsLoaded = false; } diff --git a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs index 787aa683fd..e5d8f69850 100644 --- a/Content.Server/Explosion/EntitySystems/TriggerSystem.cs +++ b/Content.Server/Explosion/EntitySystems/TriggerSystem.cs @@ -107,7 +107,7 @@ namespace Content.Server.Explosion.EntitySystems _transformSystem.AnchorEntity(uid, xform); - if(component.RemoveOnTrigger) + if (component.RemoveOnTrigger) RemCompDeferred(uid); } diff --git a/Content.Server/Explosion/EntitySystems/TwoStageTriggerSystem.cs b/Content.Server/Explosion/EntitySystems/TwoStageTriggerSystem.cs index 03837236b4..a8c48f21d6 100644 --- a/Content.Server/Explosion/EntitySystems/TwoStageTriggerSystem.cs +++ b/Content.Server/Explosion/EntitySystems/TwoStageTriggerSystem.cs @@ -33,7 +33,7 @@ public sealed class TwoStageTriggerSystem : EntitySystem component.NextTriggerTime = _timing.CurTime + component.TriggerDelay; } - public void LoadComponents(EntityUid uid, TwoStageTriggerComponent component) + private void LoadComponents(EntityUid uid, TwoStageTriggerComponent component) { foreach (var (name, entry) in component.SecondStageComponents) { @@ -47,6 +47,7 @@ public sealed class TwoStageTriggerSystem : EntitySystem _serializationManager.CopyTo(entry.Component, ref temp); EntityManager.AddComponent(uid, comp); } + component.ComponentsIsLoaded = true; } public override void Update(float frameTime) @@ -54,17 +55,18 @@ public sealed class TwoStageTriggerSystem : EntitySystem base.Update(frameTime); var enumerator = EntityQueryEnumerator(); - while (enumerator.MoveNext(out var uid, out var component)) { - if (component.NextTriggerTime == null) + if (!component.Triggered) continue; + if (!component.ComponentsIsLoaded) + LoadComponents(uid, component); + if (_timing.CurTime < component.NextTriggerTime) continue; component.NextTriggerTime = null; - LoadComponents(uid, component); _triggerSystem.Trigger(uid); } } diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml index 24a8bfcc4d..9f18b94d2c 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml @@ -148,7 +148,7 @@ - type: AnchorOnTrigger removeOnTrigger: true - type: TwoStageTrigger - triggerDelay: 10 + triggerDelay: 10.45 components: - type: AmbientSound enabled: true @@ -194,15 +194,15 @@ sound: path: /Audio/Effects/Grenades/Supermatter/whitehole_start.ogg volume: 5 - - type: AmbientSound - enabled: false - volume: -5 - range: 14 - sound: - path: /Audio/Effects/Grenades/Supermatter/whitehole_loop.ogg - type: TwoStageTrigger - triggerDelay: 10 + triggerDelay: 11.14 components: + - type: AmbientSound + enabled: true + volume: -5 + range: 14 + sound: + path: /Audio/Effects/Grenades/Supermatter/whitehole_loop.ogg - type: GravityWell maxRange: 10 baseRadialAcceleration: -180 @@ -222,10 +222,9 @@ sound: path: /Audio/Effects/Grenades/Supermatter/supermatter_end.ogg params: - volume: 5 + volume: 15 - type: DeleteOnTrigger - - type: entity name: the nuclear option description: Please don't throw it, think of the children.