---@meta

---@diagnostic disable: missing-fields

---@class Line : AObject
---@field speed number                     The speed rate of the line
---@field isTailDisabled boolean           Checks if the tail is disabled or not (read-only)
---@field isDead boolean                   Checks if the line is dead or not (read-only)
---@field onTap Event                      Triggered when the player taps
---@field onTurn Event                     Triggered when the player turns
local Line = {}

---Change the mode of the tail, can either be Clear, Enable, or Disable
---@param mode TailType
function Line.SetTailMode(mode) end

---It's recommended to use this function to move the player instead of using the position field directly
---@param position Vector3
---@param followImmediate boolean
function Line.TeleportTo(position, followImmediate) end

---Turns the line
---@param bypass bool Whether or not it turns anyway in scenarios it's not supposed to turn
function Line.Turn(bypass) end

---@type Line
line = {}

---@class Camera : AObject
---@field type CameraType                 The type of the camera (read-only)
---@field distance number                 The distance of the camera from the player
---@field angle Vector3                   The angle of the camera
---@field pivotOffset Vector3             The pivot offset of the camera
---@field localPositionOffset Vector3     The position offset of the camera
---@field localRotationOffset Vector3     The rotation offset of the camera
---@field factor number                   The follow speed of the camera
local Camera = {}

---Shakes the camera for a specific duration
---@param duration number
---@param strength number
function Camera.ShakeOnce(duration, strength) end

---Adjust the shake parameters of the camera
---@param strength number
---@param ease EaseType
---@param duration number
function Camera.SetShake(strength, ease, duration) end

---@type Camera
camera = {}

---The trigger that the code is in
---@type AObject
trigger = {}

---An empty object, used to show a field in the inspector
---@type AObject
emptyObject = nil

---(DEPRECATED, use Lint() instead) An empty list, used to show a field in the inspector
---emptyList = nil

---@param x number
---@param y number
---@param z number
---@param w number
---@return Quaternion value
function Quaternion(x, y, z, w) end

---@param r number
---@param g number
---@param b number
---@param a number
---@return Color
function Color(r, g, b, a) end

---@param x number
---@param y number
---@param z number
---@param w number
---@return Vector4
function Vec4(x, y, z, w) end

---@param x number
---@param y number
---@param z number
---@return Vector3
function Vec3(x, y, z) end

---@param x number
---@param y number
---@return Vector2
function Vec2(x, y, z) end

---Constructs a list of integer values
---@param ... number
function Lint(...) end

---Constructs a list of integer values
---@param object table
function Lint(object) end

---@param obj AObject
---@param position Vector3
---@param duration number
---@param ease EaseType
function TweenPosition(obj, position, duration, ease) end

---@param obj AObject
---@param position Vector3
---@param duration number
---@param ease EaseType
function TweenLocalPosition(obj, position, duration, ease) end

---@param obj AObject
---@param eulerAngles Vector3
---@param duration number
---@param ease EaseType
function TweenEulerAngles(obj, eulerAngles, duration, ease) end

---@param obj AObject
---@param eulerAngles Vector3
---@param duration number
---@param ease EaseType
function TweenLocalEulerAngles(obj, eulerAngles, duration, ease) end

---@param obj AObject
---@param scale Vector3
---@param duration number
---@param ease EaseType
function TweenScale(obj, scale, duration, ease) end

---@param obj AObject
---@param color Color
---@param duration number
---@param ease EaseType
function TweenColor(obj, color, duration, ease) end

---@param obj AObject
---@param alpha number
---@param duration number
---@param ease EaseType
function TweenAlpha(obj, alpha, duration, ease) end

---@param obj AObject
---@param alpha number
function SetAlpha(obj, alpha) end

---@param obj AObject
---@return string
function GetText(obj) end

---@param obj AObject
---@param text string
function SetText(obj, text) end

function DestroyTweens() end

---@return number
function GetDelay() end

---@param delay number
function Delay(delay) end

---@param delay number
function SetDelay(delay) end

---@param id integer
---@return AObject
function GetObjectById(id) end

---@param name string
---@return AObject
function GetObjectByName(name) end

---@param group ListInt
---@return AObject[]
function GetObjectsByGroup(group) end

---@return number
function GetDeltaTime() end

---@param obj AObject
---@return boolean
function IsObjectNull(obj) end

---Supporter-only feature
---@param key KeyCode
---@return boolean
function GetKey(key) end

---Supporter-only feature
---@param key KeyCode
---@return boolean
function GetKeyDown(key) end

---Supporter-only feature
---@param key KeyCode
---@return boolean
function GetKeyUp(key) end