local ____exports = {}
local ____isaac_2Dtypescript_2Ddefinitions = require("isaac-typescript-definitions")
local PickupVariant = ____isaac_2Dtypescript_2Ddefinitions.PickupVariant
local ____constants = require("core.constants")
local VectorZero = ____constants.VectorZero
local ____entitiesSpecific = require("functions.entitiesSpecific")
local getPickups = ____entitiesSpecific.getPickups
local removeAllPickups = ____entitiesSpecific.removeAllPickups
local spawnPickup = ____entitiesSpecific.spawnPickup
--- Helper function to get all of the battery entities in the room.
-- 
-- @param batterySubType Optional. If specified, will only get the batteries that match the
-- sub-type. Default is -1, which matches every sub-type.
function ____exports.getBatteries(self, batterySubType)
    if batterySubType == nil then
        batterySubType = -1
    end
    return getPickups(nil, PickupVariant.LIL_BATTERY, batterySubType)
end
--- Helper function to get all of the bomb entities in the room. (Specifically, this refers to bomb
-- pickups, not the `EntityBomb` class.)
-- 
-- @param bombSubType Optional. If specified, will only get the bombs that match the sub-type.
-- Default is -1, which matches every sub-type.
function ____exports.getBombPickups(self, bombSubType)
    if bombSubType == nil then
        bombSubType = -1
    end
    return getPickups(nil, PickupVariant.BOMB, bombSubType)
end
--- Helper function to get all of the card entities in the room.
-- 
-- @param cardType Optional. If specified, will only get the cards that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getCards(self, cardType)
    if cardType == nil then
        cardType = -1
    end
    return getPickups(nil, PickupVariant.CARD, cardType)
end
--- Helper function to get all of the coin pickup entities in the room.
-- 
-- @param coinSubType Optional. If specified, will only get the coins that match the sub-type.
-- Default is -1, which matches every sub-type.
function ____exports.getCoins(self, coinSubType)
    if coinSubType == nil then
        coinSubType = -1
    end
    return getPickups(nil, PickupVariant.COIN, coinSubType)
end
--- Helper function to get all of the collectible entities in the room.
-- 
-- @param collectibleType Optional. If specified, will only get the collectibles that match the
-- sub-type. Default is -1, which matches every sub-type.
function ____exports.getCollectibles(self, collectibleType)
    if collectibleType == nil then
        collectibleType = -1
    end
    return getPickups(nil, PickupVariant.COLLECTIBLE, collectibleType)
end
--- Helper function to get all of the heart pickup entities in the room.
-- 
-- @param heartSubType Optional. If specified, will only get the hearts that match the sub-type.
-- Default is -1, which matches every sub-type.
function ____exports.getHearts(self, heartSubType)
    if heartSubType == nil then
        heartSubType = -1
    end
    return getPickups(nil, PickupVariant.HEART, heartSubType)
end
--- Helper function to get all of the key pickup entities in the room.
-- 
-- @param keySubType Optional. If specified, will only get the keys that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getKeys(self, keySubType)
    if keySubType == nil then
        keySubType = -1
    end
    return getPickups(nil, PickupVariant.KEY, keySubType)
end
--- Helper function to get all of the pill entities in the room.
-- 
-- @param pillColor Optional. If specified, will only get the pills that match the sub-type. Default
-- is -1, which matches every sub-type.
function ____exports.getPills(self, pillColor)
    if pillColor == nil then
        pillColor = -1
    end
    return getPickups(nil, PickupVariant.PILL, pillColor)
end
--- Helper function to get all of the sack (i.e. grab bag) entities in the room.
-- 
-- @param sackSubType Optional. If specified, will only get the sacks that match the sub-type.
-- Default is -1, which matches every sub-type.
function ____exports.getSacks(self, sackSubType)
    if sackSubType == nil then
        sackSubType = -1
    end
    return getPickups(nil, PickupVariant.SACK, sackSubType)
end
--- Helper function to get all of the trinket entities in the room.
-- 
-- @param trinketType Optional. If specified, will only get the trinkets that match the sub-type.
-- Default is -1, which matches every sub-type.
function ____exports.getTrinkets(self, trinketType)
    if trinketType == nil then
        trinketType = -1
    end
    return getPickups(nil, PickupVariant.TRINKET, trinketType)
end
--- Helper function to remove all of the batteries in the room.
-- 
-- @param batterySubType Optional. If specified, will only remove the batteries that match this
-- sub-type. Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of cards.
-- @returns The batteries that were removed.
function ____exports.removeAllBatteries(self, batterySubType, cap)
    if batterySubType == nil then
        batterySubType = -1
    end
    return removeAllPickups(nil, PickupVariant.LIL_BATTERY, batterySubType, cap)
end
--- Helper function to remove all of the bomb pickups in the room. (Specifically, this refers to bomb
-- pickups, not the `EntityBomb` class.)
-- 
-- @param bombSubType Optional. If specified, will only remove bombs that match this sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of bombs.
-- @returns The bombs that were removed.
function ____exports.removeAllBombPickups(self, bombSubType, cap)
    if bombSubType == nil then
        bombSubType = -1
    end
    return removeAllPickups(nil, PickupVariant.BOMB, bombSubType, cap)
end
--- Helper function to remove all of the cards in the room.
-- 
-- @param cardType Optional. If specified, will only remove cards that match this sub-type. Default
-- is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of cards.
-- @returns The cards that were removed.
function ____exports.removeAllCards(self, cardType, cap)
    if cardType == nil then
        cardType = -1
    end
    return removeAllPickups(nil, PickupVariant.CARD, cardType, cap)
end
--- Helper function to remove all of the coins in the room.
-- 
-- @param coinSubType Optional. If specified, will only remove coins that match this sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of coins.
-- @returns The coins that were removed.
function ____exports.removeAllCoins(self, coinSubType, cap)
    return removeAllPickups(nil, PickupVariant.COIN, coinSubType, cap)
end
--- Helper function to remove all of the collectibles in the room.
-- 
-- @param collectibleType Optional. If specified, will only remove collectibles that match this
-- sub-type. Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of collectibles.
-- @returns The collectibles that were removed.
function ____exports.removeAllCollectibles(self, collectibleType, cap)
    return removeAllPickups(nil, PickupVariant.COLLECTIBLE, collectibleType, cap)
end
--- Helper function to remove all of the heart pickup entities in the room.
-- 
-- @param heartSubType Optional. If specified, will only remove hearts that match this sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of hearts.
-- @returns The hearts that were removed.
function ____exports.removeAllHearts(self, heartSubType, cap)
    return removeAllPickups(nil, PickupVariant.HEART, heartSubType, cap)
end
--- Helper function to remove all of the keys in the room.
-- 
-- @param keySubType Optional. If specified, will only remove keys that match this sub-type. Default
-- is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of keys.
-- @returns The keys that were removed.
function ____exports.removeAllKeys(self, keySubType, cap)
    return removeAllPickups(nil, PickupVariant.KEY, keySubType, cap)
end
--- Helper function to remove all of the pills in the room.
-- 
-- @param pillColor Optional. If specified, will only remove pills that match this sub-type. Default
-- is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of pills.
-- @returns The pills that were removed.
function ____exports.removeAllPills(self, pillColor, cap)
    return removeAllPickups(nil, PickupVariant.PILL, pillColor, cap)
end
--- Helper function to remove all of the sacks (i.e. grab bags) in the room.
-- 
-- @param sackSubType Optional. If specified, will only remove sacks that match this sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of sacks.
-- @returns The sacks that were removed.
function ____exports.removeAllSacks(self, sackSubType, cap)
    return removeAllPickups(nil, PickupVariant.SACK, sackSubType, cap)
end
--- Helper function to remove all of the trinkets in the room.
-- 
-- @param trinketType Optional. If specified, will only remove trinkets that match this sub-type.
-- Default is -1, which matches every sub-type.
-- @param cap Optional. If specified, will only remove the given amount of trinkets.
-- @returns The trinkets that were removed.
function ____exports.removeAllTrinkets(self, trinketType, cap)
    return removeAllPickups(nil, PickupVariant.TRINKET, trinketType, cap)
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.LIL_BATTERY` (90).
function ____exports.spawnBattery(self, batterySubType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.LIL_BATTERY,
        batterySubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.LIL_BATTERY` (90)
-- and a specific seed.
function ____exports.spawnBatteryWithSeed(self, batterySubType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnBattery(
        nil,
        batterySubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.BOMB` (40).
function ____exports.spawnBombPickup(self, bombSubType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.BOMB,
        bombSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.BOMB` (40) and a
-- specific seed.
function ____exports.spawnBombPickupWithSeed(self, bombSubType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnBombPickup(
        nil,
        bombSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.CARD` (300).
function ____exports.spawnCard(self, cardType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.CARD,
        cardType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.CARD` (300) and a
-- specific seed.
function ____exports.spawnCardWithSeed(self, cardType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnCard(
        nil,
        cardType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.COIN` (20).
function ____exports.spawnCoin(self, coinSubType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.COIN,
        coinSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.COIN` (20) and a
-- specific seed.
function ____exports.spawnCoinWithSeed(self, coinSubType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnCoin(
        nil,
        coinSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.HEART` (10).
function ____exports.spawnHeart(self, heartSubType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.HEART,
        heartSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
function ____exports.spawnHeartWithSeed(self, heartSubType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnHeart(
        nil,
        heartSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.KEY` (30).
function ____exports.spawnKey(self, keySubType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.KEY,
        keySubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.KEY` (30) and a
-- specific seed.
function ____exports.spawnKeyWithSeed(self, keySubType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnKey(
        nil,
        keySubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.PILL` (70).
function ____exports.spawnPill(self, pillColor, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.PILL,
        pillColor,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.PILL` (70) and a
-- specific seed.
function ____exports.spawnPillWithSeed(self, pillColor, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnPill(
        nil,
        pillColor,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.SACK` (69).
function ____exports.spawnSack(self, sackSubType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.SACK,
        sackSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.SACK` (69) and a
-- specific seed.
function ____exports.spawnSackWithSeed(self, sackSubType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnSack(
        nil,
        sackSubType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.TRINKET` (350).
function ____exports.spawnTrinket(self, trinketType, positionOrGridIndex, velocity, spawner, seedOrRNG)
    if velocity == nil then
        velocity = VectorZero
    end
    return spawnPickup(
        nil,
        PickupVariant.TRINKET,
        trinketType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
--- Helper function to spawn a `EntityType.PICKUP` (5) with variant `PickupVariant.TRINKET` (350) and
-- a specific seed.
function ____exports.spawnTrinketWithSeed(self, trinketType, positionOrGridIndex, seedOrRNG, velocity, spawner)
    if velocity == nil then
        velocity = VectorZero
    end
    return ____exports.spawnTrinket(
        nil,
        trinketType,
        positionOrGridIndex,
        velocity,
        spawner,
        seedOrRNG
    )
end
return ____exports
