AmbientMusicPrototype.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using Content.Shared.Random;
  2. using Content.Shared.Random.Rules;
  3. using Robust.Shared.Audio;
  4. using Robust.Shared.Prototypes;
  5. using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
  6. namespace Content.Shared.Audio;
  7. /// <summary>
  8. /// Attaches a rules prototype to sound files to play ambience.
  9. /// </summary>
  10. [Prototype]
  11. public sealed partial class AmbientMusicPrototype : IPrototype
  12. {
  13. [IdDataField] public string ID { get; private set; } = string.Empty;
  14. /// <summary>
  15. /// Traditionally you'd prioritise most rules to least as priority but in our case we'll just be explicit.
  16. /// </summary>
  17. [ViewVariables(VVAccess.ReadWrite), DataField("priority")]
  18. public int Priority = 0;
  19. /// <summary>
  20. /// Can we interrupt this ambience for a better prototype if possible?
  21. /// </summary>
  22. [ViewVariables(VVAccess.ReadWrite), DataField("interruptable")]
  23. public bool Interruptable = false;
  24. /// <summary>
  25. /// Do we fade-in. Useful for songs.
  26. /// </summary>
  27. [ViewVariables(VVAccess.ReadWrite), DataField("fadeIn")]
  28. public bool FadeIn;
  29. [ViewVariables(VVAccess.ReadWrite), DataField("sound", required: true)]
  30. public SoundSpecifier Sound = default!;
  31. [ViewVariables(VVAccess.ReadWrite), DataField("rules", required: true, customTypeSerializer:typeof(PrototypeIdSerializer<RulesPrototype>))]
  32. public string Rules = string.Empty;
  33. }