# Vending machine descriptions are stored in vendingMachineInventory YAML files.
- type: entity
  id: VendingMachine
  parent: BaseConstructible
  name: Vending machine
  abstract: true
  components:
  - type: InteractionOutline
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/empty.rsi
    netsync: false
  - type: Physics
    bodyType: Static
    fixtures:
    - shape:
        !type:PhysShapeAabb
          bounds: "-0.5,-0.25,0.5,0.25"
      mask:
      - Impassable
      - VaultImpassable
      - SmallImpassable
      layer:
      - Opaque
      - MobImpassable
  - type: Damageable
    resistances: metallicResistances
  - type: Destructible
    thresholds:
    - trigger:
        !type:DamageTrigger
        damage: 50
      behaviors:
      - !type:DoActsBehavior
        acts: ["Breakage"]
  - type: UserInterface
    interfaces:
    - key: enum.VendingMachineUiKey.Key
      type: VendingMachineBoundUserInterface
    - key: enum.WiresUiKey.Key
      type: WiresBoundUserInterface
  - type: PowerReceiver
  - type: Wires
    BoardName: "Vending Machine"
    LayoutId: Vending
  - type: Anchorable

- type: entity
  parent: VendingMachine
  id: VendingMachineAmmo
  name: Liberation Station
  description: An overwhelming amount of ancient patriotism washes over you just by looking at the machine.
  components:
  - type: VendingMachine
    pack: AmmoVendInventory
  - type: Advertise
    pack: AmmoVendAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Speech
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/ammo.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      broken: true
    - type: WiresVisualizer

- type: entity
  parent: VendingMachine
  id: VendingMachineBooze
  name: Booze-O-Mat
  description: A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one.
  components:
  - type: VendingMachine
    pack: BoozeOMatInventory
  - type: Advertise
    pack: BoozeOMatAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Speech
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/boozeomat.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      broken: true
    - type: WiresVisualizer
  - type: AccessReader
    access: [["Service"]]

- type: entity
  parent: VendingMachine
  id: VendingBarDrobe
  name: BarDrobe
  description: A stylish vendor to dispense the most stylish bar clothing!
  components:
  - type: VendingMachine
    pack: BarDrobe
  - type: Advertise
    pack: BarDrobeAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/bardrobe.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      broken: true
    - type: WiresVisualizer
  - type: AccessReader
    access: [["Service"]]

- type: entity
  parent: VendingMachine
  id: VendingMachineCart
  name: PTech
  description: Cartridges for PDAs.
  components:
  - type: VendingMachine
    pack: PTechInventory
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/cart.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      ejectUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer

- type: entity
  parent: VendingMachine
  id: VendingMachineCigs
  name: ShadyCigs Deluxe
  description: If you want to get cancer, might as well do it in style.
  components:
  - type: VendingMachine
    pack: CigaretteMachineInventory
  - type: Advertise
    pack: CigaretteMachineAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Speech
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/cigs.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      ejectUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer

- type: entity
  parent: VendingMachine
  id: VendingMachineClothing
  name: ClothesMate
  description: A vending machine for clothing.
  components:
  - type: VendingMachine
    pack: ClothesMateInventory
  - type: Advertise
    pack: ClothesMateAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Speech
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/clothing.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer

- type: entity
  parent: VendingMachine
  id: VendingMachineCoffee
  name: Solar's Best Hot Drinks
  description: A vending machine which dispenses hot drinks.
  components:
  - type: VendingMachine
    pack: HotDrinksMachineInventory
  - type: Advertise
    pack: HotDrinksMachineAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Speech
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/coffee.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: "screen"
      map: ["enum.VendingMachineVisualLayers.Screen"]
      shader: unshaded
    - texture: Constructible/Power/VendingMachines/maintenance_panel.png
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      screen: true
      normalUnshaded: true
      ejectUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer

- type: entity
  parent: VendingMachine
  id: VendingMachineCola
  name: Robust Softdrinks
  description: A softdrink vendor provided by Robust Industries, LLC.
  components:
  - type: VendingMachine
    pack: RobustSoftdrinksInventory
  - type: Advertise
    pack: RobustSoftdrinksAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Speech
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/cola.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      ejectUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer

- type: entity
  parent: VendingMachine
  id: VendingMachineDinnerware
  name: Plasteel Chef's Dinnerware Vendor
  description: A kitchen and restaurant equipment vendor.
  components:
  - type: VendingMachine
    pack: DinnerwareInventory
  - type: Advertise
    pack: DinnerwareAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/dinnerware.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - texture: Constructible/Power/VendingMachines/maintenance_panel.png
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      ejectUnshaded: true
      broken: true
    - type: WiresVisualizer
  - type: AccessReader
    access: [["Service"]]

- type: entity
  parent: VendingMachine
  id: VendingMachineDiscount
  name: Discount Dan's
  components:
  - type: VendingMachine
    pack: DiscountDansInventory
  - type: Advertise
    pack: DiscountDansAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Speech
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/discount.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - texture: Constructible/Power/VendingMachines/maintenance_panel.png
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      broken: true
    - type: WiresVisualizer

- type: entity
  parent: VendingMachine
  id: VendingMachineEngivend
  name: Engi-Vend
  description: Spare tool vending. What? Did you expect some witty description?
  components:
  - type: VendingMachine
    pack: EngiVendInventory
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/engivend.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      ejectUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer
  - type: AccessReader
    access: [["Engineering"]]

- type: entity
  parent: VendingMachine
  id: VendingMachineMedical
  name: NanoMed Plus
  description: Medical drug dispenser.
  components:
  - type: VendingMachine
    pack: NanoMedPlusInventory
  - type: Advertise
    pack: NanoMedAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/medical.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      ejectUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer
  - type: AccessReader
    access: [["Medical"]]

- type: entity
  parent: VendingMachine
  id: VendingMachineNutri
  name: NutriMax
  description: A plant nutrients vendor.
  components:
  - type: VendingMachine
    pack: NutriMaxInventory
  - type: Advertise
    pack: NutriMaxAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/nutri.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - texture: Constructible/Power/VendingMachines/maintenance_panel.png
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      ejectUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer
  - type: AccessReader
    access: [["Service"]]

- type: entity
  parent: VendingMachine
  id: VendingMachineSec
  name: SecTech
  components:
  - type: VendingMachine
    pack: SecTechInventory
  - type: Advertise
    pack: SecTechAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/sec.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer
  - type: AccessReader
    access: [["Security"]]

- type: entity
  parent: VendingMachine
  id: VendingMachineSeeds
  name: MegaSeed Servitor
  components:
  - type: VendingMachine
    pack: MegaSeedServitorInventory
  - type: Advertise
    pack: MegaSeedAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/seeds.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - texture: Constructible/Power/VendingMachines/maintenance_panel.png
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      ejectUnshaded: true
      broken: true
    - type: WiresVisualizer
  - type: AccessReader
    access: [["Service"]]

- type: entity
  parent: VendingMachine
  id: VendingMachineSmartFridge
  name: SmartFridge
  components:
  - type: VendingMachine
    pack: SmartFridgeInventory
  - type: Advertise
    pack: SmartFridgeAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Speech
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/smartfridge.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - texture: Constructible/Power/VendingMachines/maintenance_panel.png
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      broken: true
    - type: WiresVisualizer

- type: entity
  parent: VendingMachine
  id: VendingMachineSnack
  name: Getmore Chocolate Corp
  components:
  - type: VendingMachine
    pack: GetmoreChocolateCorpInventory
  - type: Advertise
    pack: GetmoreChocolateCorpAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Speech
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/snack.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      ejectUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer

- type: entity
  parent: VendingMachine
  id: VendingMachineSovietSoda
  name: BODA
  components:
  - type: VendingMachine
    pack: BodaInventory
  - type: Advertise
    pack: BodaAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Speech
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/sovietsoda.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      ejectUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer

- type: entity
  parent: VendingMachine
  id: VendingMachineTheater
  name: AutoDrobe
  components:
  - type: VendingMachine
    pack: AutoDrobeInventory
  - type: Advertise
    pack: AutoDrobeAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Speech
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/theater.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
    - state: "screen"
      map: ["enum.VendingMachineVisualLayers.Screen"]
      shader: unshaded
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      screen: true
      normalUnshaded: true
      ejectUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer

- type: entity
  parent: VendingMachine
  id: VendingMachineVendomat
  name: Vendomat
  components:
  - type: VendingMachine
    pack: VendomatInventory
  - type: Advertise
    pack: VendomatAds
    minWait: 480 # 8 minutes
    maxWait: 600 # 10 minutes
  - type: Speech
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/vendomat.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      eject: true
      ejectUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer

- type: entity
  parent: VendingMachine
  id: VendingMachineWallMedical
  name: NanoMed
  components:
  - type: VendingMachine
    pack: NanoMedInventory
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/wallmed.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - texture: Constructible/Power/VendingMachines/maintenance_panel.png
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer
  - type: AccessReader
    access: [["Medical"]]

- type: entity
  parent: VendingMachine
  id: VendingMachineYouTool
  name: YouTool
  components:
  - type: VendingMachine
    pack: YouToolInventory
  - type: Sprite
    sprite: Constructible/Power/VendingMachines/youtool.rsi
    layers:
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Unlit"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.Base"]
    - state: "off"
      map: ["enum.VendingMachineVisualLayers.BaseUnshaded"]
      shader: unshaded
    - state: panel
      map: ["enum.WiresVisualLayers.MaintenancePanel"]
  - type: Appearance
    visuals:
    - type: VendingMachineVisualizer
      normalUnshaded: true
      eject: true
      ejectUnshaded: true
      denyUnshaded: true
      broken: true
    - type: WiresVisualizer
