---@meta
---
---An object in the Arphros scene
---@class AObject
---The parent of the object
---@field parent AObject
---Number of children of the object
---@field childCount integer
---The color of the object, make sure to use MakeColorIndependent() before setting a color or doing a color tweening
---@field color Color
---The name of the object (read-only)
---@field name string
---Identification number of the object (read-only)
---@field id integer
---Position of the object
---@field position Vector3
---Rotation of the object
---@field eulerAngles Vector3
---Global scale of the object (read-only)
---@field lossyScale Vector3
---Local position of the object
---@field localPosition Vector3
---Local rotation of the object
---@field localEulerAngles Vector3
---Local scale of the object
---@field localScale Vector3
---Visibility is whether the object is either visible, hidden, or gone entirely
---@field visibility VisibilityType
---Space type is where the object is located in the world
---@field spaceType SpaceType
---The groups the object is a part of
---@field groupId ListInt
local AObject = {
    ---Make color independent of the material, make sure to use this before doing color tweening or setting the color of an object at start
    MakeColorIndependent = function () end,
    ---Because you can make a field as an empty object, you can use this to determine if it is null or not
    ---@return boolean
    IsNull = function () end,
    ---Gets the child of an object, follows lua indexing (from 1 not 0)
    ---@param index integer
    ---@return AObject
    GetChild = function (index) end
}

---A trigger in the Arphros scene
---@class ATrigger : AObject
local ATrigger = {
    ---Executes the trigger
    ---@param type "enter" | "exit" | nil Execute as if the player is either entering the trigger or exiting the trigger, or doing both in one frame if left nil
    Execute = function (type) end,
    ---Calls a function in a code trigger and returns the result, otherwise, return nil
    ---@param name string The function name
    ---@param ... any The function parameters
    ---@return any
    Call = function (name, ...) end
}

---@alias EventHandler fun(sender: any, e: EventArgs)

---@class Event
---@field add fun(handler: EventHandler)    Registers a listener
---@field remove fun(handler: EventHandler) Unregisters a listener

---@class EventArgs