local ____exports = {}
local ____cachedClasses = require("core.cachedClasses")
local game = ____cachedClasses.game
function ____exports.getElapsedGameFramesSince(self, gameFrameCount)
    local thisGameFrameCount = game:GetFrameCount()
    return thisGameFrameCount - gameFrameCount
end
function ____exports.getElapsedRenderFramesSince(self, renderFrameCount)
    local thisRenderFrameCount = Isaac.GetFrameCount()
    return thisRenderFrameCount - renderFrameCount
end
function ____exports.getElapsedRoomFramesSince(self, roomFrameCount)
    local room = game:GetRoom()
    local thisRoomFrameCount = room:GetFrameCount()
    return thisRoomFrameCount - roomFrameCount
end
--- Helper function to check if the current game frame count is higher than a specific game frame
-- count.
function ____exports.isAfterGameFrame(self, gameFrameCount)
    local thisGameFrameCount = game:GetFrameCount()
    return thisGameFrameCount > gameFrameCount
end
--- Helper function to check if the current render frame count is higher than a specific render frame
-- count.
function ____exports.isAfterRenderFrame(self, renderFrameCount)
    local thisRenderFrameCount = Isaac.GetFrameCount()
    return thisRenderFrameCount > renderFrameCount
end
--- Helper function to check if the current room frame count is higher than a specific room frame
-- count.
function ____exports.isAfterRoomFrame(self, roomFrameCount)
    local room = game:GetRoom()
    local thisGameFrameCount = room:GetFrameCount()
    return thisGameFrameCount > roomFrameCount
end
--- Helper function to check if the current game frame count is lower than a specific game frame
-- count.
function ____exports.isBeforeGameFrame(self, gameFrameCount)
    local thisGameFrameCount = game:GetFrameCount()
    return thisGameFrameCount < gameFrameCount
end
--- Helper function to check if the current render frame count is lower than a specific render frame
-- count.
function ____exports.isBeforeRenderFrame(self, renderFrameCount)
    local thisRenderFrameCount = Isaac.GetFrameCount()
    return thisRenderFrameCount < renderFrameCount
end
--- Helper function to check if the current room frame count is lower than a specific room frame
-- count.
function ____exports.isBeforeRoomFrame(self, roomFrameCount)
    local room = game:GetRoom()
    local thisGameFrameCount = room:GetFrameCount()
    return thisGameFrameCount < roomFrameCount
end
--- Helper function to check if the current game frame count is exactly equal to a specific game
-- frame count.
-- 
-- This returns false if the submitted render frame count is null or undefined.
function ____exports.onGameFrame(self, gameFrameCount)
    local thisGameFrameCount = game:GetFrameCount()
    return thisGameFrameCount == gameFrameCount
end
--- Helper function to check if the current game frame count is equal to or higher than a specific
-- game frame count.
function ____exports.onOrAfterGameFrame(self, gameFrameCount)
    local thisGameFrameCount = game:GetFrameCount()
    return thisGameFrameCount >= gameFrameCount
end
--- Helper function to check if the current render frame count is equal to or higher than a specific
-- render frame count.
function ____exports.onOrAfterRenderFrame(self, renderFrameCount)
    local thisRenderFrameCount = Isaac.GetFrameCount()
    return thisRenderFrameCount >= renderFrameCount
end
--- Helper function to check if the current room frame count is equal to or higher than a specific
-- room frame count.
function ____exports.onOrAfterRoomFrame(self, roomFrameCount)
    local room = game:GetRoom()
    local thisGameFrameCount = room:GetFrameCount()
    return thisGameFrameCount >= roomFrameCount
end
--- Helper function to check if the current game frame count is equal to or lower than a specific
-- game frame count.
function ____exports.onOrBeforeGameFrame(self, gameFrameCount)
    local thisGameFrameCount = game:GetFrameCount()
    return thisGameFrameCount <= gameFrameCount
end
--- Helper function to check if the current render frame count is equal to or lower than a specific
-- render frame count.
function ____exports.onOrBeforeRenderFrame(self, renderFrameCount)
    local thisRenderFrameCount = Isaac.GetFrameCount()
    return thisRenderFrameCount <= renderFrameCount
end
--- Helper function to check if the current room frame count is equal to or lower than a specific
-- room frame count.
function ____exports.onOrBeforeRoomFrame(self, roomFrameCount)
    local room = game:GetRoom()
    local thisGameFrameCount = room:GetFrameCount()
    return thisGameFrameCount <= roomFrameCount
end
--- Helper function to check if the current render frame count is exactly equal to a specific render
-- frame count.
-- 
-- This returns false if the submitted render frame count is null or undefined.
function ____exports.onRenderFrame(self, renderFrameCount)
    local thisRenderFrameCount = Isaac.GetFrameCount()
    return thisRenderFrameCount == renderFrameCount
end
--- Helper function to check if the current room frame count is exactly equal to a specific room
-- frame count.
-- 
-- This returns false if the submitted room frame count is null or undefined.
function ____exports.onRoomFrame(self, roomFrameCount)
    local room = game:GetRoom()
    local thisGameFrameCount = room:GetFrameCount()
    return thisGameFrameCount == roomFrameCount
end
return ____exports
