using Robust.Shared.Audio;
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Content.Shared._White.Event;
[RegisterComponent, AutoGenerateComponentState(true), NetworkedComponent]
public sealed partial class EventItemDispenserComponent : Component
{
[DataField("dispensing"), AutoNetworkedField]
public EntProtoId DispensingPrototype;
[DataField, AutoNetworkedField]
public bool CanManuallyDispose = true;
[DataField, AutoNetworkedField]
public bool AutoDispose = true;
[DataField, AutoNetworkedField]
public bool Infinite = true;
[DataField, AutoNetworkedField]
public int Limit = 3;
[DataField, AutoNetworkedField]
public bool AutoCleanUp = true;
[DataField, AutoNetworkedField]
public SoundSpecifier DispenseSound = new SoundPathSpecifier("/Audio/Machines/machine_vend.ogg");
[DataField, AutoNetworkedField]
public SoundSpecifier FailSound = new SoundPathSpecifier("/Audio/Machines/custom_deny.ogg");
[DataField, AutoNetworkedField]
public SoundSpecifier ManualDisposeSound = new SoundCollectionSpecifier("trashBagRustle");
[DataField, AutoNetworkedField]
public bool ReplaceDisposedItems = true;
[DataField, AutoNetworkedField]
public EntProtoId DisposedReplacement = "EffectTeslaSparksSilent";
[DataField, AutoNetworkedField]
public float ItemPreviewScale = 0f;
///
/// Stores Lists with all (currently existing) items.
/// Owners' Uids used as keys.
///
[ViewVariables]
public Dictionary> dispensedItems = new();
///
/// Stores the amount of items spawned by each person in this dispenser's lifetime.
/// Owners' Uids used as keys.
///
[ViewVariables]
public Dictionary dispensedItemsAmount = new();
}
///
/// Stores relevant info about who dispensed this item to avoid having to look for it in the dispensedItems dict.
///
[RegisterComponent]
public sealed partial class EventDispensedComponent : Component
{
///
/// The person who took the item.
///
[ViewVariables]
public EntityUid ItemOwner;
///
/// The dispenser which dispensed (duh) the item.
///
[ViewVariables]
public EntityUid Dispenser;
///
///
///
[ViewVariables]
public List Slaved = new();
}
[Serializable, NetSerializable]
public enum EventItemDispenserUiKey : byte
{
Key,
}
[Serializable, NetSerializable]
public class EventItemDispenserNewConfigBoundUserInterfaceMessage : BoundUserInterfaceMessage
{
public string DispensingPrototype = "FoodBanana";
public bool CanManuallyDispose;
public bool AutoDispose;
public bool Infinite;
public int Limit;
public bool AutoCleanUp;
public bool ReplaceDisposedItems;
public string DisposedReplacement = "EffectTeslaSparksSilent";
}
[Serializable, NetSerializable]
public class EventItemDispenserNewProtoBoundUserInterfaceMessage : BoundUserInterfaceMessage
{
public string DispensingPrototype = "FoodBanana";
public EventItemDispenserNewProtoBoundUserInterfaceMessage(string proto) { DispensingPrototype = proto; }
}