| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- using Content.Shared.Containers.ItemSlots;
- using Content.Shared.Paper;
- using Robust.Shared.Audio;
- using Robust.Shared.GameStates;
- using Robust.Shared.Prototypes;
- using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
- namespace Content.Shared.Fax.Components;
- [RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
- public sealed partial class FaxMachineComponent : Component
- {
- /// <summary>
- /// Name with which the fax will be visible to others on the network
- /// </summary>
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField("name")]
- public string FaxName { get; set; } = "Unknown";
- /// <summary>
- /// Sprite to use when inserting an object.
- /// </summary>
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField, AutoNetworkedField]
- public string InsertingState = "inserting";
- /// <summary>
- /// Device address of fax in network to which data will be send
- /// </summary>
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField("destinationAddress")]
- public string? DestinationFaxAddress { get; set; }
- /// <summary>
- /// Contains the item to be sent, assumes it's paper...
- /// </summary>
- [DataField(required: true)]
- public ItemSlot PaperSlot = new();
- /// <summary>
- /// Is fax machine should respond to pings in network
- /// This will make it visible to others on the network
- /// </summary>
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField]
- public bool ResponsePings { get; set; } = true;
- /// <summary>
- /// Should admins be notified on message receive
- /// </summary>
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField]
- public bool NotifyAdmins { get; set; } = false;
- /// <summary>
- /// Should that fax receive nuke codes send by admins. Probably should be captain fax only
- /// </summary>
- [ViewVariables(VVAccess.ReadWrite)]
- [DataField]
- public bool ReceiveNukeCodes { get; set; } = false;
- /// <summary>
- /// Sound to play when fax printing new message
- /// </summary>
- [DataField]
- public SoundSpecifier PrintSound = new SoundPathSpecifier("/Audio/Machines/printer.ogg");
- /// <summary>
- /// Sound to play when fax successfully send message
- /// </summary>
- [DataField]
- public SoundSpecifier SendSound = new SoundPathSpecifier("/Audio/Machines/high_tech_confirm.ogg");
- /// <summary>
- /// Known faxes in network by address with fax names
- /// </summary>
- [ViewVariables]
- public Dictionary<string, string> KnownFaxes { get; } = new();
- /// <summary>
- /// Print queue of the incoming message
- /// </summary>
- [ViewVariables]
- [DataField]
- public Queue<FaxPrintout> PrintingQueue { get; private set; } = new();
- /// <summary>
- /// Message sending timeout
- /// </summary>
- [ViewVariables]
- [DataField]
- public float SendTimeoutRemaining;
- /// <summary>
- /// Message sending timeout
- /// </summary>
- [ViewVariables]
- [DataField]
- public float SendTimeout = 5f;
- /// <summary>
- /// Remaining time of inserting animation
- /// </summary>
- [DataField]
- public float InsertingTimeRemaining;
- /// <summary>
- /// How long the inserting animation will play
- /// </summary>
- [ViewVariables]
- public float InsertionTime = 1.88f; // 0.02 off for correct animation
- /// <summary>
- /// Remaining time of printing animation
- /// </summary>
- [DataField]
- public float PrintingTimeRemaining;
- /// <summary>
- /// How long the printing animation will play
- /// </summary>
- [ViewVariables]
- public float PrintingTime = 2.3f;
- /// <summary>
- /// The prototype ID to use for faxed or copied entities if we can't get one from
- /// the paper entity for whatever reason.
- /// </summary>
- [DataField]
- public EntProtoId PrintPaperId = "Paper";
- /// <summary>
- /// The prototype ID to use for faxed or copied entities if we can't get one from
- /// the paper entity for whatever reason of the Office type.
- /// </summary>
- [DataField]
- public EntProtoId PrintOfficePaperId = "PaperOffice";
- }
- [DataDefinition]
- public sealed partial class FaxPrintout
- {
- [DataField(required: true)]
- public string Name { get; private set; } = default!;
- [DataField]
- public string? Label { get; private set; }
- [DataField(required: true)]
- public string Content { get; private set; } = default!;
- [DataField(customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>), required: true)]
- public string PrototypeId { get; private set; } = default!;
- [DataField("stampState")]
- public string? StampState { get; private set; }
- [DataField("stampedBy")]
- public List<StampDisplayInfo> StampedBy { get; private set; } = new();
- [DataField]
- public bool Locked { get; private set; }
- private FaxPrintout()
- {
- }
- public FaxPrintout(string content, string name, string? label = null, string? prototypeId = null, string? stampState = null, List<StampDisplayInfo>? stampedBy = null, bool locked = false)
- {
- Content = content;
- Name = name;
- Label = label;
- PrototypeId = prototypeId ?? "";
- StampState = stampState;
- StampedBy = stampedBy ?? new List<StampDisplayInfo>();
- Locked = locked;
- }
- }
|