ciggie sounds (#32426)
* add sounds * change _active to BurningComponent * play sound when lighting and snuffing a cigar * network it * mono * attribution * doc --------- Co-authored-by: deltanedas <@deltanedas:kde.org>
This commit is contained in:
@@ -15,6 +15,7 @@ using Content.Shared.Nutrition.Components;
|
|||||||
using Content.Shared.Smoking;
|
using Content.Shared.Smoking;
|
||||||
using Content.Shared.Temperature;
|
using Content.Shared.Temperature;
|
||||||
using Robust.Server.GameObjects;
|
using Robust.Server.GameObjects;
|
||||||
|
using Robust.Shared.Audio.Systems;
|
||||||
using Robust.Shared.Containers;
|
using Robust.Shared.Containers;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Content.Shared.Atmos;
|
using Content.Shared.Atmos;
|
||||||
@@ -30,6 +31,7 @@ namespace Content.Server.Nutrition.EntitySystems
|
|||||||
[Dependency] private readonly TransformSystem _transformSystem = default!;
|
[Dependency] private readonly TransformSystem _transformSystem = default!;
|
||||||
[Dependency] private readonly InventorySystem _inventorySystem = default!;
|
[Dependency] private readonly InventorySystem _inventorySystem = default!;
|
||||||
[Dependency] private readonly ClothingSystem _clothing = default!;
|
[Dependency] private readonly ClothingSystem _clothing = default!;
|
||||||
|
[Dependency] private readonly SharedAudioSystem _audio = default!;
|
||||||
[Dependency] private readonly SharedItemSystem _items = default!;
|
[Dependency] private readonly SharedItemSystem _items = default!;
|
||||||
[Dependency] private readonly SharedContainerSystem _container = default!;
|
[Dependency] private readonly SharedContainerSystem _container = default!;
|
||||||
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
|
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
|
||||||
@@ -39,11 +41,6 @@ namespace Content.Server.Nutrition.EntitySystems
|
|||||||
|
|
||||||
private float _timer;
|
private float _timer;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// We keep a list of active smokables, because iterating all existing smokables would be dumb.
|
|
||||||
/// </summary>
|
|
||||||
private readonly HashSet<EntityUid> _active = new();
|
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
SubscribeLocalEvent<SmokableComponent, IsHotEvent>(OnSmokableIsHotEvent);
|
SubscribeLocalEvent<SmokableComponent, IsHotEvent>(OnSmokableIsHotEvent);
|
||||||
@@ -65,7 +62,7 @@ namespace Content.Server.Nutrition.EntitySystems
|
|||||||
public void SetSmokableState(EntityUid uid, SmokableState state, SmokableComponent? smokable = null,
|
public void SetSmokableState(EntityUid uid, SmokableState state, SmokableComponent? smokable = null,
|
||||||
AppearanceComponent? appearance = null, ClothingComponent? clothing = null)
|
AppearanceComponent? appearance = null, ClothingComponent? clothing = null)
|
||||||
{
|
{
|
||||||
if (!Resolve(uid, ref smokable, ref appearance, ref clothing))
|
if (!Resolve(uid, ref smokable, ref appearance, ref clothing) || smokable.State == state)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
smokable.State = state;
|
smokable.State = state;
|
||||||
@@ -83,17 +80,17 @@ namespace Content.Server.Nutrition.EntitySystems
|
|||||||
|
|
||||||
if (state == SmokableState.Lit)
|
if (state == SmokableState.Lit)
|
||||||
{
|
{
|
||||||
|
EnsureComp<BurningComponent>(uid);
|
||||||
|
_audio.PlayPvs(smokable.LightSound, uid);
|
||||||
var igniteEvent = new IgnitedEvent();
|
var igniteEvent = new IgnitedEvent();
|
||||||
RaiseLocalEvent(uid, ref igniteEvent);
|
RaiseLocalEvent(uid, ref igniteEvent);
|
||||||
|
|
||||||
_active.Add(uid);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var igniteEvent = new ExtinguishedEvent();
|
RemComp<BurningComponent>(uid);
|
||||||
RaiseLocalEvent(uid, ref igniteEvent);
|
_audio.PlayPvs(smokable.SnuffSound, uid);
|
||||||
|
var extinguishEvent = new ExtinguishedEvent();
|
||||||
_active.Remove(uid);
|
RaiseLocalEvent(uid, ref extinguishEvent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,7 +101,7 @@ namespace Content.Server.Nutrition.EntitySystems
|
|||||||
|
|
||||||
private void OnSmokableShutdownEvent(Entity<SmokableComponent> entity, ref ComponentShutdown args)
|
private void OnSmokableShutdownEvent(Entity<SmokableComponent> entity, ref ComponentShutdown args)
|
||||||
{
|
{
|
||||||
_active.Remove(entity);
|
RemComp<BurningComponent>(entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnSmokeableEquipEvent(Entity<SmokableComponent> entity, ref GotEquippedEvent args)
|
private void OnSmokeableEquipEvent(Entity<SmokableComponent> entity, ref GotEquippedEvent args)
|
||||||
@@ -122,18 +119,12 @@ namespace Content.Server.Nutrition.EntitySystems
|
|||||||
if (_timer < UpdateTimer)
|
if (_timer < UpdateTimer)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// TODO Use an "active smoke" component instead, EntityQuery over that.
|
var query = EntityQueryEnumerator<BurningComponent, SmokableComponent>();
|
||||||
foreach (var uid in _active.ToArray())
|
while (query.MoveNext(out var uid, out _, out var smokable))
|
||||||
{
|
{
|
||||||
if (!TryComp(uid, out SmokableComponent? smokable))
|
|
||||||
{
|
|
||||||
_active.Remove(uid);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!_solutionContainerSystem.TryGetSolution(uid, smokable.Solution, out var soln, out var solution))
|
if (!_solutionContainerSystem.TryGetSolution(uid, smokable.Solution, out var soln, out var solution))
|
||||||
{
|
{
|
||||||
_active.Remove(uid);
|
SetSmokableState(uid, SmokableState.Unlit, smokable);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using Content.Shared.FixedPoint;
|
using Content.Shared.FixedPoint;
|
||||||
using Content.Shared.Smoking;
|
using Content.Shared.Smoking;
|
||||||
|
using Robust.Shared.Audio;
|
||||||
using Robust.Shared.GameStates;
|
using Robust.Shared.GameStates;
|
||||||
|
|
||||||
namespace Content.Shared.Nutrition.Components
|
namespace Content.Shared.Nutrition.Components
|
||||||
@@ -32,5 +33,17 @@ namespace Content.Shared.Nutrition.Components
|
|||||||
public string LitPrefix = "lit";
|
public string LitPrefix = "lit";
|
||||||
[DataField("unlitPrefix")]
|
[DataField("unlitPrefix")]
|
||||||
public string UnlitPrefix = "unlit";
|
public string UnlitPrefix = "unlit";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sound played when lighting this smokable.
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public SoundSpecifier? LightSound = new SoundPathSpecifier("/Audio/Effects/cig_light.ogg");
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sound played when this smokable is extinguished or runs out.
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public SoundSpecifier? SnuffSound = new SoundPathSpecifier("/Audio/Effects/cig_snuff.ogg");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
12
Content.Shared/Smoking/BurningComponent.cs
Normal file
12
Content.Shared/Smoking/BurningComponent.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
using Robust.Shared.GameStates;
|
||||||
|
|
||||||
|
namespace Content.Shared.Smoking;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Marker component used to track active burning objects.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Right now only smoking uses this, but flammable could use it as well in the future.
|
||||||
|
/// </remarks>
|
||||||
|
[RegisterComponent, NetworkedComponent]
|
||||||
|
public sealed partial class BurningComponent : Component;
|
||||||
@@ -241,3 +241,8 @@
|
|||||||
copyright: 'created by Vrymaa on Freesound and modified by Chaboricks'
|
copyright: 'created by Vrymaa on Freesound and modified by Chaboricks'
|
||||||
license: "CC0-1.0"
|
license: "CC0-1.0"
|
||||||
source: https://freesound.org/people/Vrymaa/sounds/785128/
|
source: https://freesound.org/people/Vrymaa/sounds/785128/
|
||||||
|
|
||||||
|
- files: ["cig_light.ogg", "cig_snuff.ogg"]
|
||||||
|
license: "CC-BY-SA-3.0"
|
||||||
|
copyright: "Created by mattroks101 for Bee Station. cig_snuff converted to mono"
|
||||||
|
source: "https://github.com/BeeStation/BeeStation-Hornet/pull/29"
|
||||||
|
|||||||
BIN
Resources/Audio/Effects/cig_light.ogg
Normal file
BIN
Resources/Audio/Effects/cig_light.ogg
Normal file
Binary file not shown.
BIN
Resources/Audio/Effects/cig_snuff.ogg
Normal file
BIN
Resources/Audio/Effects/cig_snuff.ogg
Normal file
Binary file not shown.
Reference in New Issue
Block a user