7967 lines
460 KiB
Lua
7967 lines
460 KiB
Lua
-- Singe's API for ZeroBrane Studio's autocompletion and tooltips (fr).
|
|
-- Generated by util/zbstudioApi.py from the Reference and Singe's own globals; do not edit.
|
|
return {
|
|
BILLBOARD_ALL = {
|
|
type = "value",
|
|
description = "Comment un nœud fait face à la caméra, pour nodeSetBillboard.\n= 1",
|
|
},
|
|
BILLBOARD_NONE = {
|
|
type = "value",
|
|
description = "Comment un nœud fait face à la caméra, pour nodeSetBillboard.\n= 0",
|
|
},
|
|
BILLBOARD_Y = {
|
|
type = "value",
|
|
description = "Comment un nœud fait face à la caméra, pour nodeSetBillboard.\n= 2",
|
|
},
|
|
BODY_DYNAMIC = {
|
|
type = "value",
|
|
description = "Types de corps pour bodyNew.\n= 1",
|
|
},
|
|
BODY_KINEMATIC = {
|
|
type = "value",
|
|
description = "Types de corps pour bodyNew.\n= 2",
|
|
},
|
|
BODY_STATIC = {
|
|
type = "value",
|
|
description = "Types de corps pour bodyNew.\n= 0",
|
|
},
|
|
COLLIDE_FLOOR = {
|
|
type = "value",
|
|
description = "Ce sur quoi rebondissent les particules, pour emitterSetCollide.\n= 1",
|
|
},
|
|
COLLIDE_NONE = {
|
|
type = "value",
|
|
description = "Ce sur quoi rebondissent les particules, pour emitterSetCollide.\n= 0",
|
|
},
|
|
COLLIDE_SCENE = {
|
|
type = "value",
|
|
description = "Ce sur quoi rebondissent les particules, pour emitterSetCollide.\n= 2",
|
|
},
|
|
Colourb = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ alpha, blue, green, red, rgba }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ alpha, blue, green, red, rgba }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
Colourf = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ alpha, blue, green, red, rgba }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ alpha, blue, green, red, rgba }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
Context = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
AddEventListener = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
CloseDataModel = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
CreateDocument = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
IsMouseInteracting = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
LoadDocument = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
OpenDataModel = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ProcessKeyDown = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ProcessKeyUp = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ProcessMouseButtonDown = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ProcessMouseButtonUp = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ProcessMouseLeave = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ProcessMouseMove = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ProcessMouseWheel = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ProcessTextInput = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Render = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
UnloadAllDocuments = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
UnloadDocument = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Update = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ dimensions, documents, dp_ratio, focus_element, hover_element, name, root_element }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ dimensions, dp_ratio }",
|
|
},
|
|
},
|
|
},
|
|
ContextDocumentsProxy = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
},
|
|
},
|
|
DEBUG_ALL = {
|
|
type = "value",
|
|
description = "Ce que dessine physicsSetDebug ; additionnez-les.\n= 15",
|
|
},
|
|
DEBUG_CONSTRAINTS = {
|
|
type = "value",
|
|
description = "Ce que dessine physicsSetDebug ; additionnez-les.\n= 2",
|
|
},
|
|
DEBUG_CONTACTS = {
|
|
type = "value",
|
|
description = "Ce que dessine physicsSetDebug ; additionnez-les.\n= 4",
|
|
},
|
|
DEBUG_NONE = {
|
|
type = "value",
|
|
description = "Ce que dessine physicsSetDebug ; additionnez-les.\n= 0",
|
|
},
|
|
DEBUG_SHAPES = {
|
|
type = "value",
|
|
description = "Ce que dessine physicsSetDebug ; additionnez-les.\n= 1",
|
|
},
|
|
DEBUG_STATIC = {
|
|
type = "value",
|
|
description = "Ce que dessine physicsSetDebug ; additionnez-les.\n= 16",
|
|
},
|
|
DEBUG_VELOCITIES = {
|
|
type = "value",
|
|
description = "Ce que dessine physicsSetDebug ; additionnez-les.\n= 8",
|
|
},
|
|
DIR = {
|
|
type = "value",
|
|
description = "Les chemins dans un script sont relatifs au dossier depuis lequel Singe a été lancé, pas au script. Utilisez la variable globale DIR, que Framework.singe règle sur le dossier du script lui-même, pour qu'un jeu fonctionne où qu'il soit installé :",
|
|
},
|
|
DISC_EJECTED = {
|
|
type = "value",
|
|
description = "Valeurs renvoyées par discGetState.\n= 5",
|
|
},
|
|
DISC_PAUSED = {
|
|
type = "value",
|
|
description = "Valeurs renvoyées par discGetState.\n= 4",
|
|
},
|
|
DISC_PLAYING = {
|
|
type = "value",
|
|
description = "Valeurs renvoyées par discGetState.\n= 3",
|
|
},
|
|
DISC_STOPPED = {
|
|
type = "value",
|
|
description = "Valeurs renvoyées par discGetState.\n= 2",
|
|
},
|
|
Document = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
AddEventListener = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
AppendChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
As = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
Blur = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Click = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Close = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
CreateElement = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
CreateTextNode = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
DispatchEvent = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Focus = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementById = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementsByTagName = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasChildNodes = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Hide = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
InsertBefore = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
IsClassSet = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Matches = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
PullToFront = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
PushToBack = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelector = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelectorAll = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ReplaceChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ScrollIntoView = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetClass = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Show = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ attributes, child_nodes, class_name, client_height, client_left, client_top, client_width, context, first_child, id, inner_rml, last_child, next_sibling, offset_height, offset_left, offset_parent, offset_top, offset_width, owner_document, parent_node, previous_sibling, scroll_height, scroll_left, scroll_top, scroll_width, style, tag_name, title }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ class_name, id, inner_rml, scroll_left, scroll_top, title }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
DocumentFocus = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
Auto = {
|
|
type = "value",
|
|
description = "= 3",
|
|
},
|
|
Document = {
|
|
type = "value",
|
|
description = "= 1",
|
|
},
|
|
Keep = {
|
|
type = "value",
|
|
description = "= 2",
|
|
},
|
|
None = {
|
|
type = "value",
|
|
description = "= 0",
|
|
},
|
|
},
|
|
},
|
|
DocumentModal = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
Keep = {
|
|
type = "value",
|
|
description = "= 2",
|
|
},
|
|
Modal = {
|
|
type = "value",
|
|
description = "= 1",
|
|
},
|
|
None = {
|
|
type = "value",
|
|
description = "= 0",
|
|
},
|
|
},
|
|
},
|
|
EASE_BACK_IN = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 13",
|
|
},
|
|
EASE_BACK_IN_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 15",
|
|
},
|
|
EASE_BACK_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 14",
|
|
},
|
|
EASE_BOUNCE_IN = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 19",
|
|
},
|
|
EASE_BOUNCE_IN_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 21",
|
|
},
|
|
EASE_BOUNCE_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 20",
|
|
},
|
|
EASE_CUBIC_IN = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 4",
|
|
},
|
|
EASE_CUBIC_IN_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 6",
|
|
},
|
|
EASE_CUBIC_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 5",
|
|
},
|
|
EASE_ELASTIC_IN = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 16",
|
|
},
|
|
EASE_ELASTIC_IN_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 18",
|
|
},
|
|
EASE_ELASTIC_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 17",
|
|
},
|
|
EASE_EXPO_IN = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 10",
|
|
},
|
|
EASE_EXPO_IN_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 12",
|
|
},
|
|
EASE_EXPO_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 11",
|
|
},
|
|
EASE_LINEAR = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 0",
|
|
},
|
|
EASE_QUAD_IN = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 1",
|
|
},
|
|
EASE_QUAD_IN_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 3",
|
|
},
|
|
EASE_QUAD_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 2",
|
|
},
|
|
EASE_SINE_IN = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 7",
|
|
},
|
|
EASE_SINE_IN_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 9",
|
|
},
|
|
EASE_SINE_OUT = {
|
|
type = "value",
|
|
description = "Les courbes d'accélération sont les courbes habituelles. EASE_LINEAR n'est pas une courbe du tout ; EASE_QUAD_*, EASE_CUBIC_*, EASE_SINE_* et EASE_EXPO_* vont de la plus douce à la plus raide ; EASE_BACK_* dépasse puis revient ; EASE_ELASTIC_* oscille comme un ressort ; EASE_BOUNCE_* tombe et rebondit. Chacune existe en _IN (lente au début), _OUT (lente à la fin) et _IN_OUT (les deux).\n= 8",
|
|
},
|
|
Element = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
AddEventListener = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
AppendChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
As = {
|
|
type = "value",
|
|
description = "{ Document, ElementForm, ElementFormControl, ElementFormControlInput, ElementFormControlSelect, ElementFormControlTextArea, ElementTabSet, ElementText }",
|
|
},
|
|
Blur = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Click = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
DispatchEvent = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Focus = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementById = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementsByTagName = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasChildNodes = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
InsertBefore = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
IsClassSet = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Matches = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelector = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelectorAll = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ReplaceChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ScrollIntoView = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetClass = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ attributes, child_nodes, class_name, client_height, client_left, client_top, client_width, first_child, id, inner_rml, last_child, next_sibling, offset_height, offset_left, offset_parent, offset_top, offset_width, owner_document, parent_node, previous_sibling, scroll_height, scroll_left, scroll_top, scroll_width, style, tag_name }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ class_name, id, inner_rml, scroll_left, scroll_top }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
ElementAttributesProxy = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
},
|
|
},
|
|
ElementChildNodesProxy = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
},
|
|
},
|
|
ElementForm = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
AddEventListener = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
AppendChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
As = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
Blur = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Click = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
DispatchEvent = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Focus = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementById = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementsByTagName = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasChildNodes = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
InsertBefore = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
IsClassSet = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Matches = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelector = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelectorAll = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ReplaceChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ScrollIntoView = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetClass = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Submit = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ attributes, child_nodes, class_name, client_height, client_left, client_top, client_width, first_child, id, inner_rml, last_child, next_sibling, offset_height, offset_left, offset_parent, offset_top, offset_width, owner_document, parent_node, previous_sibling, scroll_height, scroll_left, scroll_top, scroll_width, style, tag_name }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ class_name, id, inner_rml, scroll_left, scroll_top }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
ElementFormControl = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
AddEventListener = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
AppendChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
As = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
Blur = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Click = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
DispatchEvent = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Focus = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementById = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementsByTagName = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasChildNodes = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
InsertBefore = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
IsClassSet = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Matches = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelector = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelectorAll = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ReplaceChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ScrollIntoView = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetClass = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ attributes, child_nodes, class_name, client_height, client_left, client_top, client_width, disabled, first_child, id, inner_rml, last_child, name, next_sibling, offset_height, offset_left, offset_parent, offset_top, offset_width, owner_document, parent_node, previous_sibling, scroll_height, scroll_left, scroll_top, scroll_width, style, tag_name, value }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ class_name, disabled, id, inner_rml, name, scroll_left, scroll_top, value }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
ElementFormControlInput = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
AddEventListener = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
AppendChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
As = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
Blur = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Click = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
DispatchEvent = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Focus = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementById = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementsByTagName = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetSelection = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasChildNodes = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
InsertBefore = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
IsClassSet = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Matches = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelector = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelectorAll = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ReplaceChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ScrollIntoView = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Select = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetClass = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetSelection = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ attributes, checked, child_nodes, class_name, client_height, client_left, client_top, client_width, disabled, first_child, id, inner_rml, last_child, max, maxlength, min, name, next_sibling, offset_height, offset_left, offset_parent, offset_top, offset_width, owner_document, parent_node, previous_sibling, scroll_height, scroll_left, scroll_top, scroll_width, size, step, style, tag_name, value }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ checked, class_name, disabled, id, inner_rml, max, maxlength, min, name, scroll_left, scroll_top, size, step, value }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
ElementFormControlSelect = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
Add = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
AddEventListener = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
AppendChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
As = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
Blur = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Click = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
DispatchEvent = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Focus = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementById = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementsByTagName = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasChildNodes = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
InsertBefore = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
IsClassSet = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Matches = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelector = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelectorAll = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Remove = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveAll = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ReplaceChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ScrollIntoView = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetClass = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ attributes, child_nodes, class_name, client_height, client_left, client_top, client_width, disabled, first_child, id, inner_rml, last_child, name, next_sibling, offset_height, offset_left, offset_parent, offset_top, offset_width, options, owner_document, parent_node, previous_sibling, scroll_height, scroll_left, scroll_top, scroll_width, selection, style, tag_name, value }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ class_name, disabled, id, inner_rml, name, scroll_left, scroll_top, selection, value }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
ElementFormControlTextArea = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
AddEventListener = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
AppendChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
As = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
Blur = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Click = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
DispatchEvent = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Focus = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementById = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementsByTagName = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetSelection = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasChildNodes = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
InsertBefore = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
IsClassSet = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Matches = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelector = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelectorAll = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ReplaceChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ScrollIntoView = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Select = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetClass = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetSelection = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ attributes, child_nodes, class_name, client_height, client_left, client_top, client_width, cols, disabled, first_child, id, inner_rml, last_child, maxlength, name, next_sibling, offset_height, offset_left, offset_parent, offset_top, offset_width, owner_document, parent_node, previous_sibling, rows, scroll_height, scroll_left, scroll_top, scroll_width, style, tag_name, value, wordwrap }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ class_name, cols, disabled, id, inner_rml, maxlength, name, rows, scroll_left, scroll_top, value, wordwrap }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
ElementInstancer = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ InstanceElement }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
ElementPtr = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
},
|
|
},
|
|
ElementStyleProxy = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
},
|
|
},
|
|
ElementTabSet = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
AddEventListener = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
AppendChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
As = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
Blur = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Click = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
DispatchEvent = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Focus = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementById = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementsByTagName = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasChildNodes = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
InsertBefore = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
IsClassSet = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Matches = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelector = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelectorAll = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ReplaceChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ScrollIntoView = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetClass = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetPanel = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetTab = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ active_tab, attributes, child_nodes, class_name, client_height, client_left, client_top, client_width, first_child, id, inner_rml, last_child, next_sibling, num_tabs, offset_height, offset_left, offset_parent, offset_top, offset_width, owner_document, parent_node, previous_sibling, scroll_height, scroll_left, scroll_top, scroll_width, style, tag_name }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ active_tab, class_name, id, inner_rml, scroll_left, scroll_top }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
ElementText = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
AddEventListener = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
AppendChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
As = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
Blur = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Click = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
DispatchEvent = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Focus = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementById = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
GetElementsByTagName = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
HasChildNodes = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
InsertBefore = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
IsClassSet = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Matches = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelector = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
QuerySelectorAll = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RemoveChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ReplaceChild = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
ScrollIntoView = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetAttribute = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
SetClass = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ attributes, child_nodes, class_name, client_height, client_left, client_top, client_width, first_child, id, inner_rml, last_child, next_sibling, offset_height, offset_left, offset_parent, offset_top, offset_width, owner_document, parent_node, previous_sibling, scroll_height, scroll_left, scroll_top, scroll_width, style, tag_name, text }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ class_name, id, inner_rml, scroll_left, scroll_top, text }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
Event = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
StopImmediatePropagation = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
StopPropagation = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ current_element, parameters, target_element, type }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
},
|
|
},
|
|
EventParametersProxy = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
},
|
|
},
|
|
FILTER_LINEAR = {
|
|
type = "value",
|
|
description = "Échantillonnage des textures pour materialSetFilter.\n= 0",
|
|
},
|
|
FILTER_NEAREST = {
|
|
type = "value",
|
|
description = "Échantillonnage des textures pour materialSetFilter.\n= 1",
|
|
},
|
|
FONT_QUALITY_BLENDED = {
|
|
type = "value",
|
|
description = "Arguments de fontQuality.\n= 3",
|
|
},
|
|
FONT_QUALITY_SHADED = {
|
|
type = "value",
|
|
description = "Arguments de fontQuality.\n= 2",
|
|
},
|
|
FONT_QUALITY_SOLID = {
|
|
type = "value",
|
|
description = "Arguments de fontQuality.\n= 1",
|
|
},
|
|
GAMEPAD_0 = {
|
|
type = "lib",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.",
|
|
childs = {
|
|
AXIS_LEFT_TRIGGER = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_TRIGGER\", value = 512 }",
|
|
},
|
|
AXIS_LEFT_TRIGGER_N = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_TRIGGER_N\", value = 513 }",
|
|
},
|
|
AXIS_LEFT_TRIGGER_P = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_TRIGGER_P\", value = 514 }",
|
|
},
|
|
AXIS_LEFT_X = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_X\", value = 500 }",
|
|
},
|
|
AXIS_LEFT_X_L = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_X_L\", value = 501 }",
|
|
},
|
|
AXIS_LEFT_X_R = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_X_R\", value = 502 }",
|
|
},
|
|
AXIS_LEFT_Y = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_Y\", value = 503 }",
|
|
},
|
|
AXIS_LEFT_Y_D = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_Y_D\", value = 505 }",
|
|
},
|
|
AXIS_LEFT_Y_U = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_Y_U\", value = 504 }",
|
|
},
|
|
AXIS_RIGHT_TRIGGER = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_TRIGGER\", value = 515 }",
|
|
},
|
|
AXIS_RIGHT_TRIGGER_N = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_TRIGGER_N\", value = 516 }",
|
|
},
|
|
AXIS_RIGHT_TRIGGER_P = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_TRIGGER_P\", value = 517 }",
|
|
},
|
|
AXIS_RIGHT_X = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_X\", value = 506 }",
|
|
},
|
|
AXIS_RIGHT_X_L = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_X_L\", value = 507 }",
|
|
},
|
|
AXIS_RIGHT_X_R = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_X_R\", value = 508 }",
|
|
},
|
|
AXIS_RIGHT_Y = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_Y\", value = 509 }",
|
|
},
|
|
AXIS_RIGHT_Y_D = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_Y_D\", value = 511 }",
|
|
},
|
|
AXIS_RIGHT_Y_U = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_Y_U\", value = 510 }",
|
|
},
|
|
BUTTON_A = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_A\", value = 518 }",
|
|
},
|
|
BUTTON_B = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_B\", value = 519 }",
|
|
},
|
|
BUTTON_BACK = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_BACK\", value = 522 }",
|
|
},
|
|
BUTTON_GUIDE = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_GUIDE\", value = 523 }",
|
|
},
|
|
BUTTON_LEFT_BUMPER = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_LEFT_BUMPER\", value = 527 }",
|
|
},
|
|
BUTTON_LEFT_STICK = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_LEFT_STICK\", value = 525 }",
|
|
},
|
|
BUTTON_RIGHT_BUMPER = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_RIGHT_BUMPER\", value = 528 }",
|
|
},
|
|
BUTTON_RIGHT_STICK = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_RIGHT_STICK\", value = 526 }",
|
|
},
|
|
BUTTON_START = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_START\", value = 524 }",
|
|
},
|
|
BUTTON_X = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_X\", value = 520 }",
|
|
},
|
|
BUTTON_Y = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_Y\", value = 521 }",
|
|
},
|
|
DPAD_DOWN = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_DOWN\", value = 530 }",
|
|
},
|
|
DPAD_LEFT = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_LEFT\", value = 531 }",
|
|
},
|
|
DPAD_RIGHT = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_RIGHT\", value = 532 }",
|
|
},
|
|
DPAD_UP = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_UP\", value = 529 }",
|
|
},
|
|
},
|
|
},
|
|
GAMEPAD_1 = {
|
|
type = "lib",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.",
|
|
childs = {
|
|
AXIS_LEFT_TRIGGER = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_TRIGGER\", value = 612 }",
|
|
},
|
|
AXIS_LEFT_TRIGGER_N = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_TRIGGER_N\", value = 613 }",
|
|
},
|
|
AXIS_LEFT_TRIGGER_P = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_TRIGGER_P\", value = 614 }",
|
|
},
|
|
AXIS_LEFT_X = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_X\", value = 600 }",
|
|
},
|
|
AXIS_LEFT_X_L = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_X_L\", value = 601 }",
|
|
},
|
|
AXIS_LEFT_X_R = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_X_R\", value = 602 }",
|
|
},
|
|
AXIS_LEFT_Y = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_Y\", value = 603 }",
|
|
},
|
|
AXIS_LEFT_Y_D = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_Y_D\", value = 605 }",
|
|
},
|
|
AXIS_LEFT_Y_U = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_Y_U\", value = 604 }",
|
|
},
|
|
AXIS_RIGHT_TRIGGER = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_TRIGGER\", value = 615 }",
|
|
},
|
|
AXIS_RIGHT_TRIGGER_N = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_TRIGGER_N\", value = 616 }",
|
|
},
|
|
AXIS_RIGHT_TRIGGER_P = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_TRIGGER_P\", value = 617 }",
|
|
},
|
|
AXIS_RIGHT_X = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_X\", value = 606 }",
|
|
},
|
|
AXIS_RIGHT_X_L = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_X_L\", value = 607 }",
|
|
},
|
|
AXIS_RIGHT_X_R = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_X_R\", value = 608 }",
|
|
},
|
|
AXIS_RIGHT_Y = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_Y\", value = 609 }",
|
|
},
|
|
AXIS_RIGHT_Y_D = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_Y_D\", value = 611 }",
|
|
},
|
|
AXIS_RIGHT_Y_U = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_Y_U\", value = 610 }",
|
|
},
|
|
BUTTON_A = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_A\", value = 618 }",
|
|
},
|
|
BUTTON_B = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_B\", value = 619 }",
|
|
},
|
|
BUTTON_BACK = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_BACK\", value = 622 }",
|
|
},
|
|
BUTTON_GUIDE = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_GUIDE\", value = 623 }",
|
|
},
|
|
BUTTON_LEFT_BUMPER = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_LEFT_BUMPER\", value = 627 }",
|
|
},
|
|
BUTTON_LEFT_STICK = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_LEFT_STICK\", value = 625 }",
|
|
},
|
|
BUTTON_RIGHT_BUMPER = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_RIGHT_BUMPER\", value = 628 }",
|
|
},
|
|
BUTTON_RIGHT_STICK = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_RIGHT_STICK\", value = 626 }",
|
|
},
|
|
BUTTON_START = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_START\", value = 624 }",
|
|
},
|
|
BUTTON_X = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_X\", value = 620 }",
|
|
},
|
|
BUTTON_Y = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_Y\", value = 621 }",
|
|
},
|
|
DPAD_DOWN = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_DOWN\", value = 630 }",
|
|
},
|
|
DPAD_LEFT = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_LEFT\", value = 631 }",
|
|
},
|
|
DPAD_RIGHT = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_RIGHT\", value = 632 }",
|
|
},
|
|
DPAD_UP = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_UP\", value = 629 }",
|
|
},
|
|
},
|
|
},
|
|
GAMEPAD_2 = {
|
|
type = "lib",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.",
|
|
childs = {
|
|
AXIS_LEFT_TRIGGER = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_TRIGGER\", value = 712 }",
|
|
},
|
|
AXIS_LEFT_TRIGGER_N = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_TRIGGER_N\", value = 713 }",
|
|
},
|
|
AXIS_LEFT_TRIGGER_P = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_TRIGGER_P\", value = 714 }",
|
|
},
|
|
AXIS_LEFT_X = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_X\", value = 700 }",
|
|
},
|
|
AXIS_LEFT_X_L = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_X_L\", value = 701 }",
|
|
},
|
|
AXIS_LEFT_X_R = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_X_R\", value = 702 }",
|
|
},
|
|
AXIS_LEFT_Y = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_Y\", value = 703 }",
|
|
},
|
|
AXIS_LEFT_Y_D = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_Y_D\", value = 705 }",
|
|
},
|
|
AXIS_LEFT_Y_U = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_Y_U\", value = 704 }",
|
|
},
|
|
AXIS_RIGHT_TRIGGER = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_TRIGGER\", value = 715 }",
|
|
},
|
|
AXIS_RIGHT_TRIGGER_N = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_TRIGGER_N\", value = 716 }",
|
|
},
|
|
AXIS_RIGHT_TRIGGER_P = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_TRIGGER_P\", value = 717 }",
|
|
},
|
|
AXIS_RIGHT_X = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_X\", value = 706 }",
|
|
},
|
|
AXIS_RIGHT_X_L = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_X_L\", value = 707 }",
|
|
},
|
|
AXIS_RIGHT_X_R = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_X_R\", value = 708 }",
|
|
},
|
|
AXIS_RIGHT_Y = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_Y\", value = 709 }",
|
|
},
|
|
AXIS_RIGHT_Y_D = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_Y_D\", value = 711 }",
|
|
},
|
|
AXIS_RIGHT_Y_U = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_Y_U\", value = 710 }",
|
|
},
|
|
BUTTON_A = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_A\", value = 718 }",
|
|
},
|
|
BUTTON_B = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_B\", value = 719 }",
|
|
},
|
|
BUTTON_BACK = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_BACK\", value = 722 }",
|
|
},
|
|
BUTTON_GUIDE = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_GUIDE\", value = 723 }",
|
|
},
|
|
BUTTON_LEFT_BUMPER = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_LEFT_BUMPER\", value = 727 }",
|
|
},
|
|
BUTTON_LEFT_STICK = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_LEFT_STICK\", value = 725 }",
|
|
},
|
|
BUTTON_RIGHT_BUMPER = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_RIGHT_BUMPER\", value = 728 }",
|
|
},
|
|
BUTTON_RIGHT_STICK = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_RIGHT_STICK\", value = 726 }",
|
|
},
|
|
BUTTON_START = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_START\", value = 724 }",
|
|
},
|
|
BUTTON_X = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_X\", value = 720 }",
|
|
},
|
|
BUTTON_Y = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_Y\", value = 721 }",
|
|
},
|
|
DPAD_DOWN = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_DOWN\", value = 730 }",
|
|
},
|
|
DPAD_LEFT = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_LEFT\", value = 731 }",
|
|
},
|
|
DPAD_RIGHT = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_RIGHT\", value = 732 }",
|
|
},
|
|
DPAD_UP = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_UP\", value = 729 }",
|
|
},
|
|
},
|
|
},
|
|
GAMEPAD_3 = {
|
|
type = "lib",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.",
|
|
childs = {
|
|
AXIS_LEFT_TRIGGER = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_TRIGGER\", value = 812 }",
|
|
},
|
|
AXIS_LEFT_TRIGGER_N = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_TRIGGER_N\", value = 813 }",
|
|
},
|
|
AXIS_LEFT_TRIGGER_P = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_TRIGGER_P\", value = 814 }",
|
|
},
|
|
AXIS_LEFT_X = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_X\", value = 800 }",
|
|
},
|
|
AXIS_LEFT_X_L = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_X_L\", value = 801 }",
|
|
},
|
|
AXIS_LEFT_X_R = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_X_R\", value = 802 }",
|
|
},
|
|
AXIS_LEFT_Y = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_Y\", value = 803 }",
|
|
},
|
|
AXIS_LEFT_Y_D = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_Y_D\", value = 805 }",
|
|
},
|
|
AXIS_LEFT_Y_U = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_LEFT_Y_U\", value = 804 }",
|
|
},
|
|
AXIS_RIGHT_TRIGGER = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_TRIGGER\", value = 815 }",
|
|
},
|
|
AXIS_RIGHT_TRIGGER_N = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_TRIGGER_N\", value = 816 }",
|
|
},
|
|
AXIS_RIGHT_TRIGGER_P = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_TRIGGER_P\", value = 817 }",
|
|
},
|
|
AXIS_RIGHT_X = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_X\", value = 806 }",
|
|
},
|
|
AXIS_RIGHT_X_L = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_X_L\", value = 807 }",
|
|
},
|
|
AXIS_RIGHT_X_R = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_X_R\", value = 808 }",
|
|
},
|
|
AXIS_RIGHT_Y = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_Y\", value = 809 }",
|
|
},
|
|
AXIS_RIGHT_Y_D = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_Y_D\", value = 811 }",
|
|
},
|
|
AXIS_RIGHT_Y_U = {
|
|
type = "value",
|
|
description = "{ name = \"AXIS_RIGHT_Y_U\", value = 810 }",
|
|
},
|
|
BUTTON_A = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_A\", value = 818 }",
|
|
},
|
|
BUTTON_B = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_B\", value = 819 }",
|
|
},
|
|
BUTTON_BACK = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_BACK\", value = 822 }",
|
|
},
|
|
BUTTON_GUIDE = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_GUIDE\", value = 823 }",
|
|
},
|
|
BUTTON_LEFT_BUMPER = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_LEFT_BUMPER\", value = 827 }",
|
|
},
|
|
BUTTON_LEFT_STICK = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_LEFT_STICK\", value = 825 }",
|
|
},
|
|
BUTTON_RIGHT_BUMPER = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_RIGHT_BUMPER\", value = 828 }",
|
|
},
|
|
BUTTON_RIGHT_STICK = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_RIGHT_STICK\", value = 826 }",
|
|
},
|
|
BUTTON_START = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_START\", value = 824 }",
|
|
},
|
|
BUTTON_X = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_X\", value = 820 }",
|
|
},
|
|
BUTTON_Y = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_Y\", value = 821 }",
|
|
},
|
|
DPAD_DOWN = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_DOWN\", value = 830 }",
|
|
},
|
|
DPAD_LEFT = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_LEFT\", value = 831 }",
|
|
},
|
|
DPAD_RIGHT = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_RIGHT\", value = 832 }",
|
|
},
|
|
DPAD_UP = {
|
|
type = "value",
|
|
description = "{ name = \"DPAD_UP\", value = 829 }",
|
|
},
|
|
},
|
|
},
|
|
GAMEPAD_AXIS_LEFT_TRIGGER = {
|
|
type = "value",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.\n= 4",
|
|
},
|
|
GAMEPAD_AXIS_LEFT_X = {
|
|
type = "value",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.\n= 0",
|
|
},
|
|
GAMEPAD_AXIS_LEFT_Y = {
|
|
type = "value",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.\n= 1",
|
|
},
|
|
GAMEPAD_AXIS_RIGHT_TRIGGER = {
|
|
type = "value",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.\n= 5",
|
|
},
|
|
GAMEPAD_AXIS_RIGHT_X = {
|
|
type = "value",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.\n= 2",
|
|
},
|
|
GAMEPAD_AXIS_RIGHT_Y = {
|
|
type = "value",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.\n= 3",
|
|
},
|
|
JOINT_BALL = {
|
|
type = "value",
|
|
description = "Types d'articulation (les appels joint* les nomment directement).\n= 1",
|
|
},
|
|
JOINT_HINGE = {
|
|
type = "value",
|
|
description = "Types d'articulation (les appels joint* les nomment directement).\n= 0",
|
|
},
|
|
JOINT_SLIDER = {
|
|
type = "value",
|
|
description = "Types d'articulation (les appels joint* les nomment directement).\n= 2",
|
|
},
|
|
LAYER_FRONT = {
|
|
type = "value",
|
|
description = "Si un nœud se dessine sous l'overlay ou devant lui, pour nodeSetLayer.\n= 1",
|
|
},
|
|
LAYER_SCENE = {
|
|
type = "value",
|
|
description = "Si un nœud se dessine sous l'overlay ou devant lui, pour nodeSetLayer.\n= 0",
|
|
},
|
|
LIGHT_DIRECTIONAL = {
|
|
type = "value",
|
|
description = "Arguments de lightNew.\n= 0",
|
|
},
|
|
LIGHT_POINT = {
|
|
type = "value",
|
|
description = "Arguments de lightNew.\n= 1",
|
|
},
|
|
LIGHT_SPOT = {
|
|
type = "value",
|
|
description = "Arguments de lightNew.\n= 2",
|
|
},
|
|
Log = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
Message = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
logtype = {
|
|
type = "value",
|
|
description = "{ always = 0, debug = 5, error = 1, info = 4, warning = 3 }",
|
|
},
|
|
},
|
|
},
|
|
LuaRmlUi = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
CreateContext = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
LoadFontFace = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
RegisterTag = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ contexts, key_identifier, key_modifier }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
},
|
|
},
|
|
MANY_MOUSE = {
|
|
type = "value",
|
|
description = "Arguments de mouseSetMode.\n= 200",
|
|
},
|
|
MODE_FULL = {
|
|
type = "value",
|
|
description = "Arguments de keyboardSetMode.\n= 1",
|
|
},
|
|
MODE_NORMAL = {
|
|
type = "value",
|
|
description = "Arguments de keyboardSetMode.\n= 0",
|
|
},
|
|
MODIFIER = {
|
|
type = "lib",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.",
|
|
childs = {
|
|
ALT = {
|
|
type = "value",
|
|
description = "{ name = \"ALT\", value = 768 }",
|
|
},
|
|
CAPS = {
|
|
type = "value",
|
|
description = "{ name = \"CAPS\", value = 8192 }",
|
|
},
|
|
CTRL = {
|
|
type = "value",
|
|
description = "{ name = \"CTRL\", value = 192 }",
|
|
},
|
|
GUI = {
|
|
type = "value",
|
|
description = "{ name = \"GUI\", value = 3072 }",
|
|
},
|
|
LALT = {
|
|
type = "value",
|
|
description = "{ name = \"LALT\", value = 256 }",
|
|
},
|
|
LCTRL = {
|
|
type = "value",
|
|
description = "{ name = \"LCTRL\", value = 64 }",
|
|
},
|
|
LGUI = {
|
|
type = "value",
|
|
description = "{ name = \"LGUI\", value = 1024 }",
|
|
},
|
|
LSHIFT = {
|
|
type = "value",
|
|
description = "{ name = \"LSHIFT\", value = 1 }",
|
|
},
|
|
MODE = {
|
|
type = "value",
|
|
description = "{ name = \"MODE\", value = 16384 }",
|
|
},
|
|
NONE = {
|
|
type = "value",
|
|
description = "{ name = \"NONE\", value = 0 }",
|
|
},
|
|
NUM = {
|
|
type = "value",
|
|
description = "{ name = \"NUM\", value = 4096 }",
|
|
},
|
|
RALT = {
|
|
type = "value",
|
|
description = "{ name = \"RALT\", value = 512 }",
|
|
},
|
|
RCTRL = {
|
|
type = "value",
|
|
description = "{ name = \"RCTRL\", value = 128 }",
|
|
},
|
|
RGUI = {
|
|
type = "value",
|
|
description = "{ name = \"RGUI\", value = 2048 }",
|
|
},
|
|
RSHIFT = {
|
|
type = "value",
|
|
description = "{ name = \"RSHIFT\", value = 2 }",
|
|
},
|
|
SCROLL = {
|
|
type = "value",
|
|
description = "{ name = \"SCROLL\", value = 32768 }",
|
|
},
|
|
SHIFT = {
|
|
type = "value",
|
|
description = "{ name = \"SHIFT\", value = 3 }",
|
|
},
|
|
},
|
|
},
|
|
MOUSE_0 = {
|
|
type = "lib",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.",
|
|
childs = {
|
|
BUTTON_LEFT = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_LEFT\", value = 1000 }",
|
|
},
|
|
BUTTON_MIDDLE = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_MIDDLE\", value = 1002 }",
|
|
},
|
|
BUTTON_RIGHT = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_RIGHT\", value = 1001 }",
|
|
},
|
|
BUTTON_X1 = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_X1\", value = 1003 }",
|
|
},
|
|
BUTTON_X2 = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_X2\", value = 1004 }",
|
|
},
|
|
WHEEL_DOWN = {
|
|
type = "value",
|
|
description = "{ name = \"WHEEL_DOWN\", value = 1006 }",
|
|
},
|
|
WHEEL_UP = {
|
|
type = "value",
|
|
description = "{ name = \"WHEEL_UP\", value = 1005 }",
|
|
},
|
|
},
|
|
},
|
|
MOUSE_1 = {
|
|
type = "lib",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.",
|
|
childs = {
|
|
BUTTON_LEFT = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_LEFT\", value = 1100 }",
|
|
},
|
|
BUTTON_MIDDLE = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_MIDDLE\", value = 1102 }",
|
|
},
|
|
BUTTON_RIGHT = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_RIGHT\", value = 1101 }",
|
|
},
|
|
BUTTON_X1 = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_X1\", value = 1103 }",
|
|
},
|
|
BUTTON_X2 = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_X2\", value = 1104 }",
|
|
},
|
|
WHEEL_DOWN = {
|
|
type = "value",
|
|
description = "{ name = \"WHEEL_DOWN\", value = 1106 }",
|
|
},
|
|
WHEEL_UP = {
|
|
type = "value",
|
|
description = "{ name = \"WHEEL_UP\", value = 1105 }",
|
|
},
|
|
},
|
|
},
|
|
MOUSE_2 = {
|
|
type = "lib",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.",
|
|
childs = {
|
|
BUTTON_LEFT = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_LEFT\", value = 1200 }",
|
|
},
|
|
BUTTON_MIDDLE = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_MIDDLE\", value = 1202 }",
|
|
},
|
|
BUTTON_RIGHT = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_RIGHT\", value = 1201 }",
|
|
},
|
|
BUTTON_X1 = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_X1\", value = 1203 }",
|
|
},
|
|
BUTTON_X2 = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_X2\", value = 1204 }",
|
|
},
|
|
WHEEL_DOWN = {
|
|
type = "value",
|
|
description = "{ name = \"WHEEL_DOWN\", value = 1206 }",
|
|
},
|
|
WHEEL_UP = {
|
|
type = "value",
|
|
description = "{ name = \"WHEEL_UP\", value = 1205 }",
|
|
},
|
|
},
|
|
},
|
|
MOUSE_3 = {
|
|
type = "lib",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.",
|
|
childs = {
|
|
BUTTON_LEFT = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_LEFT\", value = 1300 }",
|
|
},
|
|
BUTTON_MIDDLE = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_MIDDLE\", value = 1302 }",
|
|
},
|
|
BUTTON_RIGHT = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_RIGHT\", value = 1301 }",
|
|
},
|
|
BUTTON_X1 = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_X1\", value = 1303 }",
|
|
},
|
|
BUTTON_X2 = {
|
|
type = "value",
|
|
description = "{ name = \"BUTTON_X2\", value = 1304 }",
|
|
},
|
|
WHEEL_DOWN = {
|
|
type = "value",
|
|
description = "{ name = \"WHEEL_DOWN\", value = 1306 }",
|
|
},
|
|
WHEEL_UP = {
|
|
type = "value",
|
|
description = "{ name = \"WHEEL_UP\", value = 1305 }",
|
|
},
|
|
},
|
|
},
|
|
MOUSE_MANY = {
|
|
type = "value",
|
|
description = "Arguments de mouseSetMode.\n= 200",
|
|
},
|
|
MOUSE_SINGLE = {
|
|
type = "value",
|
|
description = "Arguments de mouseSetMode.\n= 100",
|
|
},
|
|
OVERLAY_NOT_UPDATED = {
|
|
type = "value",
|
|
description = "Valeurs de retour de onOverlayUpdate.\n= 0",
|
|
},
|
|
OVERLAY_UPDATED = {
|
|
type = "value",
|
|
description = "Valeurs de retour de onOverlayUpdate.\n= 1",
|
|
},
|
|
PARTICLE_ADD = {
|
|
type = "value",
|
|
description = "Mélange pour emitterSetBlend.\n= 1",
|
|
},
|
|
PARTICLE_ALPHA = {
|
|
type = "value",
|
|
description = "Mélange pour emitterSetBlend.\n= 0",
|
|
},
|
|
PARTICLE_OVER = {
|
|
type = "value",
|
|
description = "Où se dessinent les particules 2D, pour emitterSetLayer.\n= 0",
|
|
},
|
|
PARTICLE_UNDER = {
|
|
type = "value",
|
|
description = "Où se dessinent les particules 2D, pour emitterSetLayer.\n= 1",
|
|
},
|
|
RENDER_PIXELATED = {
|
|
type = "value",
|
|
description = "Arguments de spriteQuality / videoQuality.\n= 0",
|
|
},
|
|
RENDER_SMOOTH = {
|
|
type = "value",
|
|
description = "Arguments de spriteQuality / videoQuality.\n= 1",
|
|
},
|
|
RmlUiContextsProxy = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
},
|
|
},
|
|
SCANCODE = {
|
|
type = "lib",
|
|
description = "Framework.singe ajoute les tables SCANCODE et MODIFIER (les valeurs de touches et de modificateurs de SDL), GAMEPAD_0 à GAMEPAD_3, MOUSE_0 à MOUSE_3, les index GAMEPAD_AXIS_* pour controllerGetAxis, et DIR.",
|
|
childs = {
|
|
A = {
|
|
type = "value",
|
|
description = "{ name = \"A\", value = 4 }",
|
|
},
|
|
AC_BACK = {
|
|
type = "value",
|
|
description = "{ name = \"AC_BACK\", value = 270 }",
|
|
},
|
|
AC_BOOKMARKS = {
|
|
type = "value",
|
|
description = "{ name = \"AC_BOOKMARKS\", value = 274 }",
|
|
},
|
|
AC_FORWARD = {
|
|
type = "value",
|
|
description = "{ name = \"AC_FORWARD\", value = 271 }",
|
|
},
|
|
AC_HOME = {
|
|
type = "value",
|
|
description = "{ name = \"AC_HOME\", value = 269 }",
|
|
},
|
|
AC_REFRESH = {
|
|
type = "value",
|
|
description = "{ name = \"AC_REFRESH\", value = 273 }",
|
|
},
|
|
AC_SEARCH = {
|
|
type = "value",
|
|
description = "{ name = \"AC_SEARCH\", value = 268 }",
|
|
},
|
|
AC_STOP = {
|
|
type = "value",
|
|
description = "{ name = \"AC_STOP\", value = 272 }",
|
|
},
|
|
AGAIN = {
|
|
type = "value",
|
|
description = "{ name = \"AGAIN\", value = 121 }",
|
|
},
|
|
ALTERASE = {
|
|
type = "value",
|
|
description = "{ name = \"ALTERASE\", value = 153 }",
|
|
},
|
|
APOSTROPHE = {
|
|
type = "value",
|
|
description = "{ name = \"APOSTROPHE\", value = 52 }",
|
|
},
|
|
APP1 = {
|
|
type = "value",
|
|
description = "{ name = \"APP1\", value = 283 }",
|
|
},
|
|
APP2 = {
|
|
type = "value",
|
|
description = "{ name = \"APP2\", value = 284 }",
|
|
},
|
|
APPLICATION = {
|
|
type = "value",
|
|
description = "{ name = \"APPLICATION\", value = 101 }",
|
|
},
|
|
AUDIOFASTFORWARD = {
|
|
type = "value",
|
|
description = "{ name = \"AUDIOFASTFORWARD\", value = 286 }",
|
|
},
|
|
AUDIOMUTE = {
|
|
type = "value",
|
|
description = "{ name = \"AUDIOMUTE\", value = 262 }",
|
|
},
|
|
AUDIONEXT = {
|
|
type = "value",
|
|
description = "{ name = \"AUDIONEXT\", value = 258 }",
|
|
},
|
|
AUDIOPLAY = {
|
|
type = "value",
|
|
description = "{ name = \"AUDIOPLAY\", value = 261 }",
|
|
},
|
|
AUDIOPREV = {
|
|
type = "value",
|
|
description = "{ name = \"AUDIOPREV\", value = 259 }",
|
|
},
|
|
AUDIOREWIND = {
|
|
type = "value",
|
|
description = "{ name = \"AUDIOREWIND\", value = 285 }",
|
|
},
|
|
AUDIOSTOP = {
|
|
type = "value",
|
|
description = "{ name = \"AUDIOSTOP\", value = 260 }",
|
|
},
|
|
B = {
|
|
type = "value",
|
|
description = "{ name = \"B\", value = 5 }",
|
|
},
|
|
BACKSLASH = {
|
|
type = "value",
|
|
description = "{ name = \"BACKSLASH\", value = 49 }",
|
|
},
|
|
BACKSPACE = {
|
|
type = "value",
|
|
description = "{ name = \"BACKSPACE\", value = 42 }",
|
|
},
|
|
BRIGHTNESSDOWN = {
|
|
type = "value",
|
|
description = "{ name = \"BRIGHTNESSDOWN\", value = 275 }",
|
|
},
|
|
BRIGHTNESSUP = {
|
|
type = "value",
|
|
description = "{ name = \"BRIGHTNESSUP\", value = 276 }",
|
|
},
|
|
C = {
|
|
type = "value",
|
|
description = "{ name = \"C\", value = 6 }",
|
|
},
|
|
CALCULATOR = {
|
|
type = "value",
|
|
description = "{ name = \"CALCULATOR\", value = 266 }",
|
|
},
|
|
CANCEL = {
|
|
type = "value",
|
|
description = "{ name = \"CANCEL\", value = 155 }",
|
|
},
|
|
CAPSLOCK = {
|
|
type = "value",
|
|
description = "{ name = \"CAPSLOCK\", value = 57 }",
|
|
},
|
|
CLEAR = {
|
|
type = "value",
|
|
description = "{ name = \"CLEAR\", value = 156 }",
|
|
},
|
|
CLEARAGAIN = {
|
|
type = "value",
|
|
description = "{ name = \"CLEARAGAIN\", value = 162 }",
|
|
},
|
|
COMMA = {
|
|
type = "value",
|
|
description = "{ name = \"COMMA\", value = 54 }",
|
|
},
|
|
COMPUTER = {
|
|
type = "value",
|
|
description = "{ name = \"COMPUTER\", value = 267 }",
|
|
},
|
|
COPY = {
|
|
type = "value",
|
|
description = "{ name = \"COPY\", value = 124 }",
|
|
},
|
|
CRSEL = {
|
|
type = "value",
|
|
description = "{ name = \"CRSEL\", value = 163 }",
|
|
},
|
|
CURRENCYSUBUNIT = {
|
|
type = "value",
|
|
description = "{ name = \"CURRENCYSUBUNIT\", value = 181 }",
|
|
},
|
|
CURRENCYUNIT = {
|
|
type = "value",
|
|
description = "{ name = \"CURRENCYUNIT\", value = 180 }",
|
|
},
|
|
CUT = {
|
|
type = "value",
|
|
description = "{ name = \"CUT\", value = 123 }",
|
|
},
|
|
D = {
|
|
type = "value",
|
|
description = "{ name = \"D\", value = 7 }",
|
|
},
|
|
DECIMALSEPARATOR = {
|
|
type = "value",
|
|
description = "{ name = \"DECIMALSEPARATOR\", value = 179 }",
|
|
},
|
|
DELETE = {
|
|
type = "value",
|
|
description = "{ name = \"DELETE\", value = 76 }",
|
|
},
|
|
DISPLAYSWITCH = {
|
|
type = "value",
|
|
description = "{ name = \"DISPLAYSWITCH\", value = 277 }",
|
|
},
|
|
DOWN = {
|
|
type = "value",
|
|
description = "{ name = \"DOWN\", value = 81 }",
|
|
},
|
|
E = {
|
|
type = "value",
|
|
description = "{ name = \"E\", value = 8 }",
|
|
},
|
|
EJECT = {
|
|
type = "value",
|
|
description = "{ name = \"EJECT\", value = 281 }",
|
|
},
|
|
END = {
|
|
type = "value",
|
|
description = "{ name = \"END\", value = 77 }",
|
|
},
|
|
EQUALS = {
|
|
type = "value",
|
|
description = "{ name = \"EQUALS\", value = 46 }",
|
|
},
|
|
ESCAPE = {
|
|
type = "value",
|
|
description = "{ name = \"ESCAPE\", value = 41 }",
|
|
},
|
|
EXECUTE = {
|
|
type = "value",
|
|
description = "{ name = \"EXECUTE\", value = 116 }",
|
|
},
|
|
EXSEL = {
|
|
type = "value",
|
|
description = "{ name = \"EXSEL\", value = 164 }",
|
|
},
|
|
F = {
|
|
type = "value",
|
|
description = "{ name = \"F\", value = 9 }",
|
|
},
|
|
F1 = {
|
|
type = "value",
|
|
description = "{ name = \"F1\", value = 58 }",
|
|
},
|
|
F10 = {
|
|
type = "value",
|
|
description = "{ name = \"F10\", value = 67 }",
|
|
},
|
|
F11 = {
|
|
type = "value",
|
|
description = "{ name = \"F11\", value = 68 }",
|
|
},
|
|
F12 = {
|
|
type = "value",
|
|
description = "{ name = \"F12\", value = 69 }",
|
|
},
|
|
F13 = {
|
|
type = "value",
|
|
description = "{ name = \"F13\", value = 104 }",
|
|
},
|
|
F14 = {
|
|
type = "value",
|
|
description = "{ name = \"F14\", value = 105 }",
|
|
},
|
|
F15 = {
|
|
type = "value",
|
|
description = "{ name = \"F15\", value = 106 }",
|
|
},
|
|
F16 = {
|
|
type = "value",
|
|
description = "{ name = \"F16\", value = 107 }",
|
|
},
|
|
F17 = {
|
|
type = "value",
|
|
description = "{ name = \"F17\", value = 108 }",
|
|
},
|
|
F18 = {
|
|
type = "value",
|
|
description = "{ name = \"F18\", value = 109 }",
|
|
},
|
|
F19 = {
|
|
type = "value",
|
|
description = "{ name = \"F19\", value = 110 }",
|
|
},
|
|
F2 = {
|
|
type = "value",
|
|
description = "{ name = \"F2\", value = 59 }",
|
|
},
|
|
F20 = {
|
|
type = "value",
|
|
description = "{ name = \"F20\", value = 111 }",
|
|
},
|
|
F21 = {
|
|
type = "value",
|
|
description = "{ name = \"F21\", value = 112 }",
|
|
},
|
|
F22 = {
|
|
type = "value",
|
|
description = "{ name = \"F22\", value = 113 }",
|
|
},
|
|
F23 = {
|
|
type = "value",
|
|
description = "{ name = \"F23\", value = 114 }",
|
|
},
|
|
F24 = {
|
|
type = "value",
|
|
description = "{ name = \"F24\", value = 115 }",
|
|
},
|
|
F3 = {
|
|
type = "value",
|
|
description = "{ name = \"F3\", value = 60 }",
|
|
},
|
|
F4 = {
|
|
type = "value",
|
|
description = "{ name = \"F4\", value = 61 }",
|
|
},
|
|
F5 = {
|
|
type = "value",
|
|
description = "{ name = \"F5\", value = 62 }",
|
|
},
|
|
F6 = {
|
|
type = "value",
|
|
description = "{ name = \"F6\", value = 63 }",
|
|
},
|
|
F7 = {
|
|
type = "value",
|
|
description = "{ name = \"F7\", value = 64 }",
|
|
},
|
|
F8 = {
|
|
type = "value",
|
|
description = "{ name = \"F8\", value = 65 }",
|
|
},
|
|
F9 = {
|
|
type = "value",
|
|
description = "{ name = \"F9\", value = 66 }",
|
|
},
|
|
FIND = {
|
|
type = "value",
|
|
description = "{ name = \"FIND\", value = 126 }",
|
|
},
|
|
G = {
|
|
type = "value",
|
|
description = "{ name = \"G\", value = 10 }",
|
|
},
|
|
GRAVE = {
|
|
type = "value",
|
|
description = "{ name = \"GRAVE\", value = 53 }",
|
|
},
|
|
H = {
|
|
type = "value",
|
|
description = "{ name = \"H\", value = 11 }",
|
|
},
|
|
HELP = {
|
|
type = "value",
|
|
description = "{ name = \"HELP\", value = 117 }",
|
|
},
|
|
HOME = {
|
|
type = "value",
|
|
description = "{ name = \"HOME\", value = 74 }",
|
|
},
|
|
I = {
|
|
type = "value",
|
|
description = "{ name = \"I\", value = 12 }",
|
|
},
|
|
INSERT = {
|
|
type = "value",
|
|
description = "{ name = \"INSERT\", value = 73 }",
|
|
},
|
|
INTERNATIONAL1 = {
|
|
type = "value",
|
|
description = "{ name = \"INTERNATIONAL1\", value = 135 }",
|
|
},
|
|
INTERNATIONAL2 = {
|
|
type = "value",
|
|
description = "{ name = \"INTERNATIONAL2\", value = 136 }",
|
|
},
|
|
INTERNATIONAL3 = {
|
|
type = "value",
|
|
description = "{ name = \"INTERNATIONAL3\", value = 137 }",
|
|
},
|
|
INTERNATIONAL4 = {
|
|
type = "value",
|
|
description = "{ name = \"INTERNATIONAL4\", value = 138 }",
|
|
},
|
|
INTERNATIONAL5 = {
|
|
type = "value",
|
|
description = "{ name = \"INTERNATIONAL5\", value = 139 }",
|
|
},
|
|
INTERNATIONAL6 = {
|
|
type = "value",
|
|
description = "{ name = \"INTERNATIONAL6\", value = 140 }",
|
|
},
|
|
INTERNATIONAL7 = {
|
|
type = "value",
|
|
description = "{ name = \"INTERNATIONAL7\", value = 141 }",
|
|
},
|
|
INTERNATIONAL8 = {
|
|
type = "value",
|
|
description = "{ name = \"INTERNATIONAL8\", value = 142 }",
|
|
},
|
|
INTERNATIONAL9 = {
|
|
type = "value",
|
|
description = "{ name = \"INTERNATIONAL9\", value = 143 }",
|
|
},
|
|
J = {
|
|
type = "value",
|
|
description = "{ name = \"J\", value = 13 }",
|
|
},
|
|
K = {
|
|
type = "value",
|
|
description = "{ name = \"K\", value = 14 }",
|
|
},
|
|
KBDILLUMDOWN = {
|
|
type = "value",
|
|
description = "{ name = \"KBDILLUMDOWN\", value = 279 }",
|
|
},
|
|
KBDILLUMTOGGLE = {
|
|
type = "value",
|
|
description = "{ name = \"KBDILLUMTOGGLE\", value = 278 }",
|
|
},
|
|
KBDILLUMUP = {
|
|
type = "value",
|
|
description = "{ name = \"KBDILLUMUP\", value = 280 }",
|
|
},
|
|
KP_0 = {
|
|
type = "value",
|
|
description = "{ name = \"KP_0\", value = 98 }",
|
|
},
|
|
KP_00 = {
|
|
type = "value",
|
|
description = "{ name = \"KP_00\", value = 176 }",
|
|
},
|
|
KP_000 = {
|
|
type = "value",
|
|
description = "{ name = \"KP_000\", value = 177 }",
|
|
},
|
|
KP_1 = {
|
|
type = "value",
|
|
description = "{ name = \"KP_1\", value = 89 }",
|
|
},
|
|
KP_2 = {
|
|
type = "value",
|
|
description = "{ name = \"KP_2\", value = 90 }",
|
|
},
|
|
KP_3 = {
|
|
type = "value",
|
|
description = "{ name = \"KP_3\", value = 91 }",
|
|
},
|
|
KP_4 = {
|
|
type = "value",
|
|
description = "{ name = \"KP_4\", value = 92 }",
|
|
},
|
|
KP_5 = {
|
|
type = "value",
|
|
description = "{ name = \"KP_5\", value = 93 }",
|
|
},
|
|
KP_6 = {
|
|
type = "value",
|
|
description = "{ name = \"KP_6\", value = 94 }",
|
|
},
|
|
KP_7 = {
|
|
type = "value",
|
|
description = "{ name = \"KP_7\", value = 95 }",
|
|
},
|
|
KP_8 = {
|
|
type = "value",
|
|
description = "{ name = \"KP_8\", value = 96 }",
|
|
},
|
|
KP_9 = {
|
|
type = "value",
|
|
description = "{ name = \"KP_9\", value = 97 }",
|
|
},
|
|
KP_A = {
|
|
type = "value",
|
|
description = "{ name = \"KP_A\", value = 188 }",
|
|
},
|
|
KP_AMPERSAND = {
|
|
type = "value",
|
|
description = "{ name = \"KP_AMPERSAND\", value = 199 }",
|
|
},
|
|
KP_AT = {
|
|
type = "value",
|
|
description = "{ name = \"KP_AT\", value = 206 }",
|
|
},
|
|
KP_B = {
|
|
type = "value",
|
|
description = "{ name = \"KP_B\", value = 189 }",
|
|
},
|
|
KP_BACKSPACE = {
|
|
type = "value",
|
|
description = "{ name = \"KP_BACKSPACE\", value = 187 }",
|
|
},
|
|
KP_BINARY = {
|
|
type = "value",
|
|
description = "{ name = \"KP_BINARY\", value = 218 }",
|
|
},
|
|
KP_C = {
|
|
type = "value",
|
|
description = "{ name = \"KP_C\", value = 190 }",
|
|
},
|
|
KP_CLEAR = {
|
|
type = "value",
|
|
description = "{ name = \"KP_CLEAR\", value = 216 }",
|
|
},
|
|
KP_CLEARENTRY = {
|
|
type = "value",
|
|
description = "{ name = \"KP_CLEARENTRY\", value = 217 }",
|
|
},
|
|
KP_COLON = {
|
|
type = "value",
|
|
description = "{ name = \"KP_COLON\", value = 203 }",
|
|
},
|
|
KP_COMMA = {
|
|
type = "value",
|
|
description = "{ name = \"KP_COMMA\", value = 133 }",
|
|
},
|
|
KP_D = {
|
|
type = "value",
|
|
description = "{ name = \"KP_D\", value = 191 }",
|
|
},
|
|
KP_DBLAMPERSAND = {
|
|
type = "value",
|
|
description = "{ name = \"KP_DBLAMPERSAND\", value = 200 }",
|
|
},
|
|
KP_DBLVERTICALBAR = {
|
|
type = "value",
|
|
description = "{ name = \"KP_DBLVERTICALBAR\", value = 202 }",
|
|
},
|
|
KP_DECIMAL = {
|
|
type = "value",
|
|
description = "{ name = \"KP_DECIMAL\", value = 220 }",
|
|
},
|
|
KP_DIVIDE = {
|
|
type = "value",
|
|
description = "{ name = \"KP_DIVIDE\", value = 84 }",
|
|
},
|
|
KP_E = {
|
|
type = "value",
|
|
description = "{ name = \"KP_E\", value = 192 }",
|
|
},
|
|
KP_ENTER = {
|
|
type = "value",
|
|
description = "{ name = \"KP_ENTER\", value = 88 }",
|
|
},
|
|
KP_EQUALS = {
|
|
type = "value",
|
|
description = "{ name = \"KP_EQUALS\", value = 103 }",
|
|
},
|
|
KP_EQUALSAS400 = {
|
|
type = "value",
|
|
description = "{ name = \"KP_EQUALSAS400\", value = 134 }",
|
|
},
|
|
KP_EXCLAM = {
|
|
type = "value",
|
|
description = "{ name = \"KP_EXCLAM\", value = 207 }",
|
|
},
|
|
KP_F = {
|
|
type = "value",
|
|
description = "{ name = \"KP_F\", value = 193 }",
|
|
},
|
|
KP_GREATER = {
|
|
type = "value",
|
|
description = "{ name = \"KP_GREATER\", value = 198 }",
|
|
},
|
|
KP_HASH = {
|
|
type = "value",
|
|
description = "{ name = \"KP_HASH\", value = 204 }",
|
|
},
|
|
KP_HEXADECIMAL = {
|
|
type = "value",
|
|
description = "{ name = \"KP_HEXADECIMAL\", value = 221 }",
|
|
},
|
|
KP_LEFTBRACE = {
|
|
type = "value",
|
|
description = "{ name = \"KP_LEFTBRACE\", value = 184 }",
|
|
},
|
|
KP_LEFTPAREN = {
|
|
type = "value",
|
|
description = "{ name = \"KP_LEFTPAREN\", value = 182 }",
|
|
},
|
|
KP_LESS = {
|
|
type = "value",
|
|
description = "{ name = \"KP_LESS\", value = 197 }",
|
|
},
|
|
KP_MEMADD = {
|
|
type = "value",
|
|
description = "{ name = \"KP_MEMADD\", value = 211 }",
|
|
},
|
|
KP_MEMCLEAR = {
|
|
type = "value",
|
|
description = "{ name = \"KP_MEMCLEAR\", value = 210 }",
|
|
},
|
|
KP_MEMDIVIDE = {
|
|
type = "value",
|
|
description = "{ name = \"KP_MEMDIVIDE\", value = 214 }",
|
|
},
|
|
KP_MEMMULTIPLY = {
|
|
type = "value",
|
|
description = "{ name = \"KP_MEMMULTIPLY\", value = 213 }",
|
|
},
|
|
KP_MEMRECALL = {
|
|
type = "value",
|
|
description = "{ name = \"KP_MEMRECALL\", value = 209 }",
|
|
},
|
|
KP_MEMSTORE = {
|
|
type = "value",
|
|
description = "{ name = \"KP_MEMSTORE\", value = 208 }",
|
|
},
|
|
KP_MEMSUBTRACT = {
|
|
type = "value",
|
|
description = "{ name = \"KP_MEMSUBTRACT\", value = 212 }",
|
|
},
|
|
KP_MINUS = {
|
|
type = "value",
|
|
description = "{ name = \"KP_MINUS\", value = 86 }",
|
|
},
|
|
KP_MULTIPLY = {
|
|
type = "value",
|
|
description = "{ name = \"KP_MULTIPLY\", value = 85 }",
|
|
},
|
|
KP_OCTAL = {
|
|
type = "value",
|
|
description = "{ name = \"KP_OCTAL\", value = 219 }",
|
|
},
|
|
KP_PERCENT = {
|
|
type = "value",
|
|
description = "{ name = \"KP_PERCENT\", value = 196 }",
|
|
},
|
|
KP_PERIOD = {
|
|
type = "value",
|
|
description = "{ name = \"KP_PERIOD\", value = 99 }",
|
|
},
|
|
KP_PLUS = {
|
|
type = "value",
|
|
description = "{ name = \"KP_PLUS\", value = 87 }",
|
|
},
|
|
KP_PLUSMINUS = {
|
|
type = "value",
|
|
description = "{ name = \"KP_PLUSMINUS\", value = 215 }",
|
|
},
|
|
KP_POWER = {
|
|
type = "value",
|
|
description = "{ name = \"KP_POWER\", value = 195 }",
|
|
},
|
|
KP_RIGHTBRACE = {
|
|
type = "value",
|
|
description = "{ name = \"KP_RIGHTBRACE\", value = 185 }",
|
|
},
|
|
KP_RIGHTPAREN = {
|
|
type = "value",
|
|
description = "{ name = \"KP_RIGHTPAREN\", value = 183 }",
|
|
},
|
|
KP_SPACE = {
|
|
type = "value",
|
|
description = "{ name = \"KP_SPACE\", value = 205 }",
|
|
},
|
|
KP_TAB = {
|
|
type = "value",
|
|
description = "{ name = \"KP_TAB\", value = 186 }",
|
|
},
|
|
KP_VERTICALBAR = {
|
|
type = "value",
|
|
description = "{ name = \"KP_VERTICALBAR\", value = 201 }",
|
|
},
|
|
KP_XOR = {
|
|
type = "value",
|
|
description = "{ name = \"KP_XOR\", value = 194 }",
|
|
},
|
|
L = {
|
|
type = "value",
|
|
description = "{ name = \"L\", value = 15 }",
|
|
},
|
|
LALT = {
|
|
type = "value",
|
|
description = "{ name = \"LALT\", value = 226 }",
|
|
},
|
|
LANG1 = {
|
|
type = "value",
|
|
description = "{ name = \"LANG1\", value = 144 }",
|
|
},
|
|
LANG2 = {
|
|
type = "value",
|
|
description = "{ name = \"LANG2\", value = 145 }",
|
|
},
|
|
LANG3 = {
|
|
type = "value",
|
|
description = "{ name = \"LANG3\", value = 146 }",
|
|
},
|
|
LANG4 = {
|
|
type = "value",
|
|
description = "{ name = \"LANG4\", value = 147 }",
|
|
},
|
|
LANG5 = {
|
|
type = "value",
|
|
description = "{ name = \"LANG5\", value = 148 }",
|
|
},
|
|
LANG6 = {
|
|
type = "value",
|
|
description = "{ name = \"LANG6\", value = 149 }",
|
|
},
|
|
LANG7 = {
|
|
type = "value",
|
|
description = "{ name = \"LANG7\", value = 150 }",
|
|
},
|
|
LANG8 = {
|
|
type = "value",
|
|
description = "{ name = \"LANG8\", value = 151 }",
|
|
},
|
|
LANG9 = {
|
|
type = "value",
|
|
description = "{ name = \"LANG9\", value = 152 }",
|
|
},
|
|
LCTRL = {
|
|
type = "value",
|
|
description = "{ name = \"LCTRL\", value = 224 }",
|
|
},
|
|
LEFT = {
|
|
type = "value",
|
|
description = "{ name = \"LEFT\", value = 80 }",
|
|
},
|
|
LEFTBRACKET = {
|
|
type = "value",
|
|
description = "{ name = \"LEFTBRACKET\", value = 47 }",
|
|
},
|
|
LGUI = {
|
|
type = "value",
|
|
description = "{ name = \"LGUI\", value = 227 }",
|
|
},
|
|
LSHIFT = {
|
|
type = "value",
|
|
description = "{ name = \"LSHIFT\", value = 225 }",
|
|
},
|
|
M = {
|
|
type = "value",
|
|
description = "{ name = \"M\", value = 16 }",
|
|
},
|
|
MAIL = {
|
|
type = "value",
|
|
description = "{ name = \"MAIL\", value = 265 }",
|
|
},
|
|
MAIN_0 = {
|
|
type = "value",
|
|
description = "{ name = \"MAIN_0\", value = 39 }",
|
|
},
|
|
MAIN_1 = {
|
|
type = "value",
|
|
description = "{ name = \"MAIN_1\", value = 30 }",
|
|
},
|
|
MAIN_2 = {
|
|
type = "value",
|
|
description = "{ name = \"MAIN_2\", value = 31 }",
|
|
},
|
|
MAIN_3 = {
|
|
type = "value",
|
|
description = "{ name = \"MAIN_3\", value = 32 }",
|
|
},
|
|
MAIN_4 = {
|
|
type = "value",
|
|
description = "{ name = \"MAIN_4\", value = 33 }",
|
|
},
|
|
MAIN_5 = {
|
|
type = "value",
|
|
description = "{ name = \"MAIN_5\", value = 34 }",
|
|
},
|
|
MAIN_6 = {
|
|
type = "value",
|
|
description = "{ name = \"MAIN_6\", value = 35 }",
|
|
},
|
|
MAIN_7 = {
|
|
type = "value",
|
|
description = "{ name = \"MAIN_7\", value = 36 }",
|
|
},
|
|
MAIN_8 = {
|
|
type = "value",
|
|
description = "{ name = \"MAIN_8\", value = 37 }",
|
|
},
|
|
MAIN_9 = {
|
|
type = "value",
|
|
description = "{ name = \"MAIN_9\", value = 38 }",
|
|
},
|
|
MEDIASELECT = {
|
|
type = "value",
|
|
description = "{ name = \"MEDIASELECT\", value = 263 }",
|
|
},
|
|
MENU = {
|
|
type = "value",
|
|
description = "{ name = \"MENU\", value = 118 }",
|
|
},
|
|
MINUS = {
|
|
type = "value",
|
|
description = "{ name = \"MINUS\", value = 45 }",
|
|
},
|
|
MODE = {
|
|
type = "value",
|
|
description = "{ name = \"MODE\", value = 257 }",
|
|
},
|
|
MUTE = {
|
|
type = "value",
|
|
description = "{ name = \"MUTE\", value = 127 }",
|
|
},
|
|
N = {
|
|
type = "value",
|
|
description = "{ name = \"N\", value = 17 }",
|
|
},
|
|
NONUSBACKSLASH = {
|
|
type = "value",
|
|
description = "{ name = \"NONUSBACKSLASH\", value = 100 }",
|
|
},
|
|
NONUSHASH = {
|
|
type = "value",
|
|
description = "{ name = \"NONUSHASH\", value = 50 }",
|
|
},
|
|
NUMLOCKCLEAR = {
|
|
type = "value",
|
|
description = "{ name = \"NUMLOCKCLEAR\", value = 83 }",
|
|
},
|
|
O = {
|
|
type = "value",
|
|
description = "{ name = \"O\", value = 18 }",
|
|
},
|
|
OPER = {
|
|
type = "value",
|
|
description = "{ name = \"OPER\", value = 161 }",
|
|
},
|
|
OUT = {
|
|
type = "value",
|
|
description = "{ name = \"OUT\", value = 160 }",
|
|
},
|
|
P = {
|
|
type = "value",
|
|
description = "{ name = \"P\", value = 19 }",
|
|
},
|
|
PAGEDOWN = {
|
|
type = "value",
|
|
description = "{ name = \"PAGEDOWN\", value = 78 }",
|
|
},
|
|
PAGEUP = {
|
|
type = "value",
|
|
description = "{ name = \"PAGEUP\", value = 75 }",
|
|
},
|
|
PASTE = {
|
|
type = "value",
|
|
description = "{ name = \"PASTE\", value = 125 }",
|
|
},
|
|
PAUSE = {
|
|
type = "value",
|
|
description = "{ name = \"PAUSE\", value = 72 }",
|
|
},
|
|
PERIOD = {
|
|
type = "value",
|
|
description = "{ name = \"PERIOD\", value = 55 }",
|
|
},
|
|
POWER = {
|
|
type = "value",
|
|
description = "{ name = \"POWER\", value = 102 }",
|
|
},
|
|
PRINTSCREEN = {
|
|
type = "value",
|
|
description = "{ name = \"PRINTSCREEN\", value = 70 }",
|
|
},
|
|
PRIOR = {
|
|
type = "value",
|
|
description = "{ name = \"PRIOR\", value = 157 }",
|
|
},
|
|
Q = {
|
|
type = "value",
|
|
description = "{ name = \"Q\", value = 20 }",
|
|
},
|
|
R = {
|
|
type = "value",
|
|
description = "{ name = \"R\", value = 21 }",
|
|
},
|
|
RALT = {
|
|
type = "value",
|
|
description = "{ name = \"RALT\", value = 230 }",
|
|
},
|
|
RCTRL = {
|
|
type = "value",
|
|
description = "{ name = \"RCTRL\", value = 228 }",
|
|
},
|
|
RETURN = {
|
|
type = "value",
|
|
description = "{ name = \"RETURN\", value = 40 }",
|
|
},
|
|
RETURN2 = {
|
|
type = "value",
|
|
description = "{ name = \"RETURN2\", value = 158 }",
|
|
},
|
|
RGUI = {
|
|
type = "value",
|
|
description = "{ name = \"RGUI\", value = 231 }",
|
|
},
|
|
RIGHT = {
|
|
type = "value",
|
|
description = "{ name = \"RIGHT\", value = 79 }",
|
|
},
|
|
RIGHTBRACKET = {
|
|
type = "value",
|
|
description = "{ name = \"RIGHTBRACKET\", value = 48 }",
|
|
},
|
|
RSHIFT = {
|
|
type = "value",
|
|
description = "{ name = \"RSHIFT\", value = 229 }",
|
|
},
|
|
S = {
|
|
type = "value",
|
|
description = "{ name = \"S\", value = 22 }",
|
|
},
|
|
SCROLLLOCK = {
|
|
type = "value",
|
|
description = "{ name = \"SCROLLLOCK\", value = 71 }",
|
|
},
|
|
SELECT = {
|
|
type = "value",
|
|
description = "{ name = \"SELECT\", value = 119 }",
|
|
},
|
|
SEMICOLON = {
|
|
type = "value",
|
|
description = "{ name = \"SEMICOLON\", value = 51 }",
|
|
},
|
|
SEPARATOR = {
|
|
type = "value",
|
|
description = "{ name = \"SEPARATOR\", value = 159 }",
|
|
},
|
|
SLASH = {
|
|
type = "value",
|
|
description = "{ name = \"SLASH\", value = 56 }",
|
|
},
|
|
SLEEP = {
|
|
type = "value",
|
|
description = "{ name = \"SLEEP\", value = 282 }",
|
|
},
|
|
SPACE = {
|
|
type = "value",
|
|
description = "{ name = \"SPACE\", value = 44 }",
|
|
},
|
|
STOP = {
|
|
type = "value",
|
|
description = "{ name = \"STOP\", value = 120 }",
|
|
},
|
|
SYSREQ = {
|
|
type = "value",
|
|
description = "{ name = \"SYSREQ\", value = 154 }",
|
|
},
|
|
T = {
|
|
type = "value",
|
|
description = "{ name = \"T\", value = 23 }",
|
|
},
|
|
TAB = {
|
|
type = "value",
|
|
description = "{ name = \"TAB\", value = 43 }",
|
|
},
|
|
THOUSANDSSEPARATOR = {
|
|
type = "value",
|
|
description = "{ name = \"THOUSANDSSEPARATOR\", value = 178 }",
|
|
},
|
|
U = {
|
|
type = "value",
|
|
description = "{ name = \"U\", value = 24 }",
|
|
},
|
|
UNDO = {
|
|
type = "value",
|
|
description = "{ name = \"UNDO\", value = 122 }",
|
|
},
|
|
UP = {
|
|
type = "value",
|
|
description = "{ name = \"UP\", value = 82 }",
|
|
},
|
|
V = {
|
|
type = "value",
|
|
description = "{ name = \"V\", value = 25 }",
|
|
},
|
|
VOLUMEDOWN = {
|
|
type = "value",
|
|
description = "{ name = \"VOLUMEDOWN\", value = 129 }",
|
|
},
|
|
VOLUMEUP = {
|
|
type = "value",
|
|
description = "{ name = \"VOLUMEUP\", value = 128 }",
|
|
},
|
|
W = {
|
|
type = "value",
|
|
description = "{ name = \"W\", value = 26 }",
|
|
},
|
|
WWW = {
|
|
type = "value",
|
|
description = "{ name = \"WWW\", value = 264 }",
|
|
},
|
|
X = {
|
|
type = "value",
|
|
description = "{ name = \"X\", value = 27 }",
|
|
},
|
|
Y = {
|
|
type = "value",
|
|
description = "{ name = \"Y\", value = 28 }",
|
|
},
|
|
Z = {
|
|
type = "value",
|
|
description = "{ name = \"Z\", value = 29 }",
|
|
},
|
|
},
|
|
},
|
|
SHAPE_BOX = {
|
|
type = "value",
|
|
description = "Formes de collision pour bodyNew.\n= 0",
|
|
},
|
|
SHAPE_CAPSULE = {
|
|
type = "value",
|
|
description = "Formes de collision pour bodyNew.\n= 2",
|
|
},
|
|
SHAPE_CYLINDER = {
|
|
type = "value",
|
|
description = "Formes de collision pour bodyNew.\n= 3",
|
|
},
|
|
SHAPE_HULL = {
|
|
type = "value",
|
|
description = "Formes de collision pour bodyNew.\n= 4",
|
|
},
|
|
SHAPE_MESH = {
|
|
type = "value",
|
|
description = "Formes de collision pour bodyNew.\n= 5",
|
|
},
|
|
SHAPE_SPHERE = {
|
|
type = "value",
|
|
description = "Formes de collision pour bodyNew.\n= 1",
|
|
},
|
|
SINGE_AXIS_STRIDE = {
|
|
type = "value",
|
|
description = "Disposition des codes d'entrée des manettes et des souris, et nombre d'axes et de boutons d'une manette ; Framework.singe construit à partir d'eux les tables GAMEPAD_N et MOUSE_N, et un écran de service s'en sert pour parcourir une manette.\n= 3",
|
|
},
|
|
SINGE_CONTROLLER_AXES = {
|
|
type = "value",
|
|
description = "Disposition des codes d'entrée des manettes et des souris, et nombre d'axes et de boutons d'une manette ; Framework.singe construit à partir d'eux les tables GAMEPAD_N et MOUSE_N, et un écran de service s'en sert pour parcourir une manette.\n= 6",
|
|
},
|
|
SINGE_CONTROLLER_BUTTONS = {
|
|
type = "value",
|
|
description = "Disposition des codes d'entrée des manettes et des souris, et nombre d'axes et de boutons d'une manette ; Framework.singe construit à partir d'eux les tables GAMEPAD_N et MOUSE_N, et un écran de service s'en sert pour parcourir une manette.\n= 15",
|
|
},
|
|
SINGE_DEAD_ZONE = {
|
|
type = "value",
|
|
description = "La DEAD_ZONE de controls.cfg, en unités brutes d'axe.",
|
|
},
|
|
SINGE_DISC = {
|
|
type = "value",
|
|
description = "Vrai quand le jeu a un laserdisc ; faux quand le canevas est le monde.",
|
|
},
|
|
SINGE_FRAMEWORK_VERSION = {
|
|
type = "value",
|
|
description = "La version du moteur, sous forme d'entiers, de chaîne (\"v3.00\") et du nombre que renvoie singeVersion().\n= 3.0",
|
|
},
|
|
SINGE_GAMEPAD_BASE = {
|
|
type = "value",
|
|
description = "Disposition des codes d'entrée des manettes et des souris, et nombre d'axes et de boutons d'une manette ; Framework.singe construit à partir d'eux les tables GAMEPAD_N et MOUSE_N, et un écran de service s'en sert pour parcourir une manette.\n= 500",
|
|
},
|
|
SINGE_GAMEPAD_BUTTON_OFFSET = {
|
|
type = "value",
|
|
description = "Disposition des codes d'entrée des manettes et des souris, et nombre d'axes et de boutons d'une manette ; Framework.singe construit à partir d'eux les tables GAMEPAD_N et MOUSE_N, et un écran de service s'en sert pour parcourir une manette.\n= 18",
|
|
},
|
|
SINGE_GAMEPAD_STRIDE = {
|
|
type = "value",
|
|
description = "Disposition des codes d'entrée des manettes et des souris, et nombre d'axes et de boutons d'une manette ; Framework.singe construit à partir d'eux les tables GAMEPAD_N et MOUSE_N, et un écran de service s'en sert pour parcourir une manette.\n= 100",
|
|
},
|
|
SINGE_LEGACY_SPRITE_ARGS = {
|
|
type = "value",
|
|
description = "Vrai quand le jeu a demandé l'ordre des arguments de sprite de 2.10.",
|
|
},
|
|
SINGE_MAX_CONTROLLERS = {
|
|
type = "value",
|
|
description = "Disposition des codes d'entrée des manettes et des souris, et nombre d'axes et de boutons d'une manette ; Framework.singe construit à partir d'eux les tables GAMEPAD_N et MOUSE_N, et un écran de service s'en sert pour parcourir une manette.\n= 4",
|
|
},
|
|
SINGE_MAX_MICE = {
|
|
type = "value",
|
|
description = "Disposition des codes d'entrée des manettes et des souris, et nombre d'axes et de boutons d'une manette ; Framework.singe construit à partir d'eux les tables GAMEPAD_N et MOUSE_N, et un écran de service s'en sert pour parcourir une manette.\n= 4",
|
|
},
|
|
SINGE_MOUSE_BASE = {
|
|
type = "value",
|
|
description = "Disposition des codes d'entrée des manettes et des souris, et nombre d'axes et de boutons d'une manette ; Framework.singe construit à partir d'eux les tables GAMEPAD_N et MOUSE_N, et un écran de service s'en sert pour parcourir une manette.\n= 1000",
|
|
},
|
|
SINGE_MOUSE_STRIDE = {
|
|
type = "value",
|
|
description = "Disposition des codes d'entrée des manettes et des souris, et nombre d'axes et de boutons d'une manette ; Framework.singe construit à partir d'eux les tables GAMEPAD_N et MOUSE_N, et un écran de service s'en sert pour parcourir une manette.\n= 100",
|
|
},
|
|
SINGE_ROTATE_STEP = {
|
|
type = "value",
|
|
description = "Ce qu'acceptent vldpSetScale, vldpSetShift et vldpSetRotate. Bornez à ces valeurs plutôt qu'à vos propres copies : un décalage hors limites met fin au script.\n= 90",
|
|
},
|
|
SINGE_SCALE_MAX = {
|
|
type = "value",
|
|
description = "Ce qu'acceptent vldpSetScale, vldpSetShift et vldpSetRotate. Bornez à ces valeurs plutôt qu'à vos propres copies : un décalage hors limites met fin au script.\n= 100",
|
|
},
|
|
SINGE_SCALE_MIN = {
|
|
type = "value",
|
|
description = "Ce qu'acceptent vldpSetScale, vldpSetShift et vldpSetRotate. Bornez à ces valeurs plutôt qu'à vos propres copies : un décalage hors limites met fin au script.\n= 25",
|
|
},
|
|
SINGE_SHIFT_MAX = {
|
|
type = "value",
|
|
description = "Ce qu'acceptent vldpSetScale, vldpSetShift et vldpSetRotate. Bornez à ces valeurs plutôt qu'à vos propres copies : un décalage hors limites met fin au script.\n= 100",
|
|
},
|
|
SINGE_SHIFT_MIN = {
|
|
type = "value",
|
|
description = "Ce qu'acceptent vldpSetScale, vldpSetShift et vldpSetRotate. Bornez à ces valeurs plutôt qu'à vos propres copies : un décalage hors limites met fin au script.\n= -100",
|
|
},
|
|
SINGE_TRIGGER_THRESHOLD = {
|
|
type = "value",
|
|
description = "Le seuil des gâchettes analogiques dans ces mêmes unités brutes ; 0 quand les gâchettes suivent SINGE_DEAD_ZONE, ce qui est le cas par défaut.",
|
|
},
|
|
SINGE_UPDATE_CHECK = {
|
|
type = "value",
|
|
description = "= true",
|
|
},
|
|
SINGE_VERSION_MAJOR = {
|
|
type = "value",
|
|
description = "La version du moteur, sous forme d'entiers, de chaîne (\"v3.00\") et du nombre que renvoie singeVersion().\n= 3",
|
|
},
|
|
SINGE_VERSION_MINOR = {
|
|
type = "value",
|
|
description = "La version du moteur, sous forme d'entiers, de chaîne (\"v3.00\") et du nombre que renvoie singeVersion().\n= 0",
|
|
},
|
|
SINGE_VERSION_STRING = {
|
|
type = "value",
|
|
description = "La version du moteur, sous forme d'entiers, de chaîne (\"v3.00\") et du nombre que renvoie singeVersion().\n= \"v3.00b1\"",
|
|
},
|
|
SINGLE_MOUSE = {
|
|
type = "value",
|
|
description = "Arguments de mouseSetMode.\n= 100",
|
|
},
|
|
SOFT_BODY = {
|
|
type = "value",
|
|
description = "Sortes de corps mous pour softNew.\n= 1",
|
|
},
|
|
SOFT_CLOTH = {
|
|
type = "value",
|
|
description = "Sortes de corps mous pour softNew.\n= 0",
|
|
},
|
|
SOFT_ROPE = {
|
|
type = "value",
|
|
description = "Sortes de corps mous pour softNew.\n= 2",
|
|
},
|
|
SOUND_ERROR_INVALID = {
|
|
type = "value",
|
|
description = "-1, ce que renvoie soundPlay quand aucun canal n'est libre.\n= -1",
|
|
},
|
|
SOUND_REMOVE_HANDLE = {
|
|
type = "value",
|
|
description = "-1, ce que renvoie soundPlay quand aucun canal n'est libre.\n= -1",
|
|
},
|
|
SPRITE_ADD = {
|
|
type = "value",
|
|
description = "Mélange pour spriteSetBlend.\n= 1",
|
|
},
|
|
SPRITE_ALPHA = {
|
|
type = "value",
|
|
description = "Mélange pour spriteSetBlend.\n= 0",
|
|
},
|
|
SPRITE_MULTIPLY = {
|
|
type = "value",
|
|
description = "Mélange pour spriteSetBlend.\n= 2",
|
|
},
|
|
SWITCH_BUTTON1 = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 6",
|
|
},
|
|
SWITCH_BUTTON2 = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 7",
|
|
},
|
|
SWITCH_BUTTON3 = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 8",
|
|
},
|
|
SWITCH_BUTTON4 = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 21",
|
|
},
|
|
SWITCH_COIN1 = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 9",
|
|
},
|
|
SWITCH_COIN2 = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 10",
|
|
},
|
|
SWITCH_CONSOLE = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 20",
|
|
},
|
|
SWITCH_DOWN = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 2",
|
|
},
|
|
SWITCH_GRAB = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 23",
|
|
},
|
|
SWITCH_LEFT = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 1",
|
|
},
|
|
SWITCH_MOUSE_DISCONNECT = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 24",
|
|
},
|
|
SWITCH_PAUSE = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 19",
|
|
},
|
|
SWITCH_QUIT = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 18",
|
|
},
|
|
SWITCH_RECORD = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 25",
|
|
},
|
|
SWITCH_RESET = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 16",
|
|
},
|
|
SWITCH_RIGHT = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 3",
|
|
},
|
|
SWITCH_SCREENSHOT = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 17",
|
|
},
|
|
SWITCH_SERVICE = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 14",
|
|
},
|
|
SWITCH_SKILL1 = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 11",
|
|
},
|
|
SWITCH_SKILL2 = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 12",
|
|
},
|
|
SWITCH_SKILL3 = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 13",
|
|
},
|
|
SWITCH_START1 = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 4",
|
|
},
|
|
SWITCH_START2 = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 5",
|
|
},
|
|
SWITCH_TEST = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 15",
|
|
},
|
|
SWITCH_TILT = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 22",
|
|
},
|
|
SWITCH_UP = {
|
|
type = "value",
|
|
description = "Valeurs passées à onInputPressed / onInputReleased en MODE_NORMAL. SWITCH_MOUSE_DISCONNECT est émis par le moteur lui-même quand une souris ou un pistolet optique est débranché, une fois comme appui et une fois comme relâchement ; aucune touche ni aucun bouton ne le produit. SWITCH_RECORD est le contact d'enregistrement, sur lequel le moteur agit lui-même, comme pour le contact de capture d'écran.\n= 0",
|
|
},
|
|
SelectOptionsProxy = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ }",
|
|
},
|
|
},
|
|
},
|
|
TONEMAP_ACES = {
|
|
type = "value",
|
|
description = "Courbes de tonalité pour sceneSetTonemap.\n= 2",
|
|
},
|
|
TONEMAP_NEUTRAL = {
|
|
type = "value",
|
|
description = "Courbes de tonalité pour sceneSetTonemap.\n= 1",
|
|
},
|
|
TONEMAP_NONE = {
|
|
type = "value",
|
|
description = "Courbes de tonalité pour sceneSetTonemap.\n= 0",
|
|
},
|
|
VEHICLE_BOAT = {
|
|
type = "value",
|
|
description = "Sortes de véhicules pour vehicleNew.\n= 3",
|
|
},
|
|
VEHICLE_CAR = {
|
|
type = "value",
|
|
description = "Sortes de véhicules pour vehicleNew.\n= 0",
|
|
},
|
|
VEHICLE_MOTORCYCLE = {
|
|
type = "value",
|
|
description = "Sortes de véhicules pour vehicleNew.\n= 1",
|
|
},
|
|
VEHICLE_TANK = {
|
|
type = "value",
|
|
description = "Sortes de véhicules pour vehicleNew.\n= 2",
|
|
},
|
|
Vector2f = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
DotProduct = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Normalise = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
Rotate = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ magnitude, x, y }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ x, y }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
Vector2i = {
|
|
type = "lib",
|
|
description = "",
|
|
childs = {
|
|
__getters = {
|
|
type = "value",
|
|
description = "{ magnitude, x, y }",
|
|
},
|
|
__setters = {
|
|
type = "value",
|
|
description = "{ x, y }",
|
|
},
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
allowSocketCall = {
|
|
type = "function",
|
|
description = "Extension Hypseus, toujours false dans Singe. Hypseus répond si l'utilisateur l'a autorisé à envoyer des données à un serveur de statistiques, ce que son -noserversend désactive ; l'envoi lui-même y est mis en commentaire. Singe n'envoie rien nulle part : rien n'est donc permis et la réponse ne change jamais. Elle existe pour qu'un jeu qui pose la question ne s'arrête pas sur une fonction manquante.\nRenvoie: un booléen, toujours false.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "(allowed)",
|
|
},
|
|
animationGetTime = {
|
|
type = "function",
|
|
description = "Le temps courant dans le clip de la couche de base, en lecture ou en pause, en secondes propres au clip (une speed de 2 le fait avancer deux fois plus vite). Un clip en boucle revient à 0 à sa fin ; un clip sans boucle s'arrête à sa durée. Si rien n'a encore joué, la réponse est 0. Les clips des couches supérieures ne sont pas rapportés. Un nœud qui n'est pas une racine d'instance met fin au script.\nRenvoie: Les secondes, sous forme de nombre.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(seconds)",
|
|
},
|
|
animationIsPlaying = {
|
|
type = "function",
|
|
description = "Indique si le clip de la couche de base avance sur cette instance. Un clip sans boucle cesse de jouer quand il atteint sa fin, et animationPause comme animationStop rendent cette valeur false ; un clip en boucle reste true jusqu'à ce qu'il soit arrêté. Contrairement aux autres appels de cette section, un nœud qui n'est pas une racine d'instance ne met pas fin au script mais répond false.\nRenvoie: Booléen.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(boolean)",
|
|
},
|
|
animationPause = {
|
|
type = "function",
|
|
description = "Fige le clip de la couche de base à son temps courant ; les nœuds gardent cette pose jusqu'à ce que animationResume le reprenne ou qu'un autre clip soit joué. Les clips des couches supérieures continuent de tourner. Mettre en pause une instance sur laquelle rien ne joue est sans danger. Un nœud qui n'est pas une racine d'instance met fin au script.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "()",
|
|
},
|
|
animationPlay = {
|
|
type = "function",
|
|
description = "Démarre l'un des clips du modèle depuis son début sur la couche de base de cette instance, en remplaçant ce qui y jouait ; la pose se met à jour aussitôt. Avec un fade, l'ancien clip continue de tourner pendant qu'il s'estompe sur ce nombre de secondes, et quand rien ne jouait, le fondu part de la pose où se trouvent les nœuds à présent (un ragdoll qui vient d'être désactivé, une pose fixée par le script), les nœuds que le nouveau clip n'anime pas revenant en douceur à la pose de repos du modèle. Un nœud qui n'est pas une racine d'instance, un nom que le modèle n'a pas, ou un numéro hors de 1 au nombre de clips met fin au script.\nDepuis: 3.00.",
|
|
args = "(node, nameOrIndex [, loop: boolean, speed, fade])",
|
|
returns = "()",
|
|
},
|
|
animationPlayLayer = {
|
|
type = "function",
|
|
description = "Joue un clip sur l'une des quatre couches au-dessus de la base, mélangé par-dessus ce qui se trouve en dessous selon le poids de la couche (animationSetLayerWeight, 1 par défaut) et limité à une partie du squelette quand un masque est défini (animationSetLayerMask). Les couches supérieures se mélangent par-dessus les inférieures ; chaque couche fait tourner son propre clip, son temps et sa boucle indépendamment de la base. nameOrIndex, loop, speed et fade ont le même sens que dans animationPlay, à une différence près : un fade sur une couche qui était vide fait monter le poids de la couche depuis 0 au lieu de faire un fondu enchaîné depuis une pose. Une couche hors de 1 à 4, un nœud qui n'est pas une racine d'instance, ou un clip que le modèle n'a pas met fin au script.\nDepuis: 3.00.",
|
|
args = "(node, layer, nameOrIndex [, loop, speed, fade])",
|
|
returns = "()",
|
|
},
|
|
animationResume = {
|
|
type = "function",
|
|
description = "Reprend le clip de la couche de base là où animationPause l'a figé, ou là où animationSetTime l'a déplacé entre-temps. Reprendre un clip qui joue déjà ne change rien. Une instance sans clip sur sa couche de base (jamais joué, ou arrêté) met fin au script, de même qu'un nœud qui n'est pas une racine d'instance.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "()",
|
|
},
|
|
animationSetLayerMask = {
|
|
type = "function",
|
|
description = "Limite une couche à maskNode et à tout ce qui se trouve sous lui, si bien que le clip de cette couche ne déplace que cette partie du modèle et que le reste continue de suivre les couches en dessous. maskNode doit être l'un des nœuds propres de l'instance, trouvé avec nodeFind(name, node) ; la racine de l'instance elle-même ne compte pas. Omettre maskNode, ou passer nil, lève la limite. Le masque reste sur la couche lors des appels animationPlayLayer suivants. Une couche hors de 1 à 4 met fin au script, tout comme un nœud qui n'est pas une racine d'instance ou un maskNode qui ne fait pas partie de cette instance.\nDepuis: 3.00.",
|
|
args = "(node, layer [, maskNode])",
|
|
returns = "()",
|
|
},
|
|
animationSetLayerWeight = {
|
|
type = "function",
|
|
description = "Dans quelle mesure le clip d'une couche se voit par-dessus ce qui est en dessous, de 0 (pas du tout) à 1 (entièrement, la valeur par défaut) ; les valeurs hors de cet intervalle sont bornées. Le poids appartient à la couche, pas au clip, si bien qu'il survit à animationPlayLayer et à animationStop sur cette couche. Changez-le un peu à chaque image pour faire apparaître ou disparaître une couche à la main, ou laissez un fade sur animationPlayLayer le faire une fois. Une couche hors de 1 à 4 ou un nœud qui n'est pas une racine d'instance met fin au script.\nDepuis: 3.00.",
|
|
args = "(node, layer, weight)",
|
|
returns = "()",
|
|
},
|
|
animationSetTime = {
|
|
type = "function",
|
|
description = "Fait sauter le clip de la couche de base à un temps exprimé en ses propres secondes ; les valeurs négatives deviennent 0. La pose se met à jour aussitôt, que le clip joue ou non, si bien qu'une instance en pause peut être amenée à une image exacte, et qu'une instance en lecture continue depuis le nouveau temps. Tout fondu enchaîné en cours sur la couche de base est interrompu. Une instance sans clip sur sa couche de base met fin au script, de même qu'un nœud qui n'est pas une racine d'instance.\nDepuis: 3.00.",
|
|
args = "(node, seconds)",
|
|
returns = "()",
|
|
},
|
|
animationStop = {
|
|
type = "function",
|
|
description = "Arrête et oublie tous les clips de l'instance, ou seulement le clip d'une couche au-dessus de la base (1 à 4) ; la couche de base seule ne peut pas être arrêtée sans les couches au-dessus d'elle. Les nœuds gardent leur dernière pose, dont un animationPlay suivant avec un fade les fait sortir en douceur. Après avoir tout arrêté, animationResume et animationSetTime mettent fin au script jusqu'à ce que quelque chose soit de nouveau joué. Les poids et les masques des couches sont conservés. Une couche hors de 1 à 4 ou un nœud qui n'est pas une racine d'instance met fin au script.\nDepuis: 3.00.",
|
|
args = "(node [, layer])",
|
|
returns = "()",
|
|
},
|
|
bodyApplyForce = {
|
|
type = "function",
|
|
description = "Ajoute une force, en newtons, à un corps dynamique pour les pas de cette image seulement ; appelez-la à chaque image pour continuer à pousser. Sans point, la force agit par le centre de masse et ne fait que déplacer le corps ; avec un point du monde (px, py, pz), elle fait aussi tourner le corps autour de son centre. Une force accélère de la force divisée par la masse, alors dimensionnez-la selon bodySetMass. Les corps statiques et cinématiques l'ignorent.\nDepuis: 3.00.",
|
|
args = "(node, fx, fy, fz [, px, py, pz])",
|
|
returns = "()",
|
|
},
|
|
bodyApplyImpulse = {
|
|
type = "function",
|
|
description = "Change d'un coup la quantité de mouvement d'un corps dynamique : une impulsion égale à la masse multipliée par une vitesse ajoute cette vitesse. Sans point, elle agit par le centre de masse ; avec un point du monde (px, py, pz), elle fait aussi tourner le corps, si bien que frapper une caisse près de son sommet la fait basculer. C'est l'appel pour un coup, un coup de pied, une explosion ou un lancement, là où bodyApplyForce sert à une poussée qui dure. Les corps statiques et cinématiques l'ignorent.\nDepuis: 3.00.",
|
|
args = "(node, ix, iy, iz [, px, py, pz])",
|
|
returns = "()",
|
|
},
|
|
bodyDelete = {
|
|
type = "function",
|
|
description = "Retire le corps du monde ; le nœud et son maillage restent où ils sont. Chaque articulation attachée au corps, et tout véhicule construit dessus, disparaissent avec lui. Supprimer le nœud supprime aussi son corps, si bien que ceci ne sert qu'à garder un nœud sans son corps. Met fin au script quand le nœud n'a pas de corps.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "()",
|
|
},
|
|
bodyGetAngularVelocity = {
|
|
type = "function",
|
|
description = "La vitesse à laquelle le corps tourne autour de chaque axe du monde, en radians par seconde, au dernier pas. Un corps statique renvoie zéro. Utile pour la hauteur du son d'une roue ou un compteur de tours.\nRenvoie: Trois nombres, en radians par seconde autour de X, Y et Z.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(x, y, z)",
|
|
},
|
|
bodyGetVelocity = {
|
|
type = "function",
|
|
description = "La vitesse à laquelle le corps se déplace le long de chaque axe du monde, en unités du monde par seconde, au dernier pas. Un corps statique renvoie zéro ; un corps cinématique renvoie la vitesse qu'impliquait le mouvement de son nœud.\nRenvoie: Trois nombres, en unités par seconde le long de X, Y et Z.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(x, y, z)",
|
|
},
|
|
bodyIsResting = {
|
|
type = "function",
|
|
description = "Indique si la simulation a mis le corps en sommeil parce qu'il a cessé de bouger. Les corps statiques et les corps retirés du monde avec bodySetEnabled comptent comme au repos. Un corps au repos se réveille de lui-même quand quelque chose le touche ou quand une vitesse, une force ou une impulsion lui est appliquée.\nRenvoie: Booléen.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(boolean)",
|
|
},
|
|
bodyNew = {
|
|
type = "function",
|
|
description = "Donne au nœud un corps du type indiqué, placé là où le nœud se trouve dans le monde à cet instant (ses parents compris), avec une forme de collision dimensionnée par a, b et c en unités du monde et mise à l'échelle par l'échelle du nœud dans le monde. Un second appel sur le même nœud remplace le premier, et un nœud qui avait un joueur le perd. La masse d'un corps dynamique vient du volume de sa forme à la densité de l'eau, alors réglez bodySetMass sur tout ce qui doit paraître léger. Changer l'échelle du nœud plus tard ne redimensionne pas le corps. Met fin au script pour un type ou une forme inconnus, quand la physique n'est pas disponible sur cette machine, quand le monde contient déjà 4096 corps, ou quand la forme ne peut pas être construite (un SHAPE_MESH dynamique, ou une enveloppe sans maillage sous le nœud).\nDepuis: 3.00.",
|
|
args = "(node, type, shape [, a, b, c])",
|
|
returns = "()",
|
|
},
|
|
bodySetAngularVelocity = {
|
|
type = "function",
|
|
description = "Règle la rotation autour de chaque axe du monde, en radians par seconde, et réveille le corps. Les corps statiques l'ignorent. La rotation d'un corps cinématique est écrasée à partir de son nœud au pas suivant, si bien que l'appel ne dure que pour les corps dynamiques.\nDepuis: 3.00.",
|
|
args = "(node, x, y, z)",
|
|
returns = "()",
|
|
},
|
|
bodySetBounce = {
|
|
type = "function",
|
|
description = "Règle la restitution du corps, de 0 (s'arrête net) à 1 (rebondit avec tout ce qu'il avait en arrivant) ; les valeurs hors de cet intervalle sont bornées. La valeur par défaut est 0.1. Les valeurs des deux corps en contact se combinent, si bien qu'une balle vive sur un sol mort rebondit quand même.\nDepuis: 3.00.",
|
|
args = "(node, bounce)",
|
|
returns = "()",
|
|
},
|
|
bodySetBuoyancy = {
|
|
type = "function",
|
|
description = "La façon dont le corps flotte quand il est dans un volume d'eau : 1 est neutre, plus flotte plus haut, moins coule, et 0 est une pierre. La valeur par défaut est 1.2, qui flotte doucement. Le facteur multiplie la densité propre de l'eau donnée par bodySetWater, et les valeurs négatives sont ramenées à 0. Seuls les corps dynamiques sont déplacés par l'eau, mais la valeur peut être réglée sur n'importe quel corps.\nDepuis: 3.00.",
|
|
args = "(node, factor)",
|
|
returns = "()",
|
|
},
|
|
bodySetCurrent = {
|
|
type = "function",
|
|
description = "Règle le courant à l'intérieur d'un volume d'eau, en unités du monde par seconde le long de chaque axe du monde ; les corps dynamiques qui y flottent dérivent avec le courant et un joueur qui nage est emporté par lui. Par défaut, il n'y a pas de courant. Réglez-le sur le nœud sur lequel bodySetWater a été appelé ; sur tout autre corps, il est stocké et ne fait rien.\nDepuis: 3.00.",
|
|
args = "(node, x, y, z)",
|
|
returns = "()",
|
|
},
|
|
bodySetEnabled = {
|
|
type = "function",
|
|
description = "Retire le corps du monde avec false : il cesse d'entrer en collision, cesse de bouger, n'entraîne plus son nœud ni ne le suit, et compte comme au repos. true le remet là où il est, éveillé. Le corps garde sa forme, sa masse et ses réglages, si bien que c'est moins coûteux que de le supprimer et de le recréer pour quelque chose qui va et vient.\nDepuis: 3.00.",
|
|
args = "(node, enabled)",
|
|
returns = "()",
|
|
},
|
|
bodySetFriction = {
|
|
type = "function",
|
|
description = "Règle le frottement de la surface : 0 est de la glace, 0.5 (la valeur par défaut) est ordinaire, les valeurs plus élevées adhèrent davantage. Les valeurs négatives sont ramenées à 0. Les valeurs des deux corps en contact se combinent, si bien qu'un sol glissant demande une valeur basse sur le sol, pas sur tout ce qui marche dessus.\nDepuis: 3.00.",
|
|
args = "(node, friction)",
|
|
returns = "()",
|
|
},
|
|
bodySetMass = {
|
|
type = "function",
|
|
description = "Remet à l'échelle la masse d'un corps dynamique et, avec elle, son inertie. Faites-le pour tout ce qui doit paraître léger ou lourd : par défaut, c'est le volume de la forme à la densité de l'eau, si bien qu'une boîte de la taille d'une porte pèse environ 140 kilogrammes et qu'une légère poussée ne la fera pas bouger. Les forces et les impulsions s'échelonnent avec la masse, alors réglez la masse avant de les ajuster. Met fin au script quand le corps n'est pas dynamique ou que la masse n'est pas positive.\nDepuis: 3.00.",
|
|
args = "(node, kilograms)",
|
|
returns = "()",
|
|
},
|
|
bodySetTrigger = {
|
|
type = "function",
|
|
description = "Fait du corps un déclencheur avec true : il ne pousse rien et n'arrête rien, mais onTrigger signale chaque corps ou joueur qui y entre et en sort. false le rend de nouveau solide : ce qui était à l'intérieur est oublié sans sortie signalée, tandis qu'un déclencheur dans lequel se trouve le corps lui-même continue de le signaler. Un déclencheur est généralement une boîte ou une sphère statique placée sur une porte, une ligne d'arrivée ou une zone dangereuse. Les rayons de physicsRaycast touchent les déclencheurs comme n'importe quel autre corps.\nDepuis: 3.00.",
|
|
args = "(node, trigger)",
|
|
returns = "()",
|
|
},
|
|
bodySetVelocity = {
|
|
type = "function",
|
|
description = "Règle la vitesse du corps le long de chaque axe du monde, en unités du monde par seconde, et le réveille. Ceci remplace la vitesse qu'avait le corps, là où bodyApplyImpulse s'y ajoute. Les corps statiques l'ignorent, et la vitesse d'un corps cinématique est écrasée à partir du mouvement de son nœud au pas suivant.\nDepuis: 3.00.",
|
|
args = "(node, x, y, z)",
|
|
returns = "()",
|
|
},
|
|
bodySetWater = {
|
|
type = "function",
|
|
description = "Remplit d'eau un corps statique et en fait un déclencheur : le dessus de sa forme est la surface, et chaque corps dynamique à l'intérieur flotte, coule ou roule par flottabilité par rapport à cette surface (la partie immergée de la forme compte, si bien qu'une caisse inclinée se redresse), ralenti par les traînées. Un joueur dont le milieu est sous la surface nage. Comme le volume est un déclencheur, onTrigger se déclenche à l'entrée et à la sortie. L'eau n'est pas dessinée : donnez au nœud un matériau en mélange, ou aucun. Met fin au script quand le corps n'est pas statique.\nDepuis: 3.00.",
|
|
args = "(node, density [, linearDrag, angularDrag])",
|
|
returns = "()",
|
|
},
|
|
cameraSet = {
|
|
type = "function",
|
|
description = "cameraSet(node)\ncameraSet(-1)\nFait d'un nœud la caméra : la scène est dessinée depuis sa position dans le monde en regardant le long de son propre -Z, si bien que le mouvement et la rotation de ses parents comptent. N'importe quel nœud convient, y compris un nœud qui porte aussi un maillage ou une lumière, et changer de caméra ne demande qu'un appel. -1 rétablit la vue par défaut depuis (0, 0, 5) en regardant l'origine. Supprimer le nœud caméra ramène aussi à la vue par défaut. Met fin au script pour un handle de nœud qui n'est pas valide.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "()",
|
|
},
|
|
cameraSetOrthographic = {
|
|
type = "function",
|
|
description = "Passe à une projection parallèle montrant height unités du monde de haut en bas, la largeur suivant le format d'image de la couche, de near à far devant la caméra. La distance ne rapetisse pas les choses, ce qui convient aux schémas, aux vues isométriques et de profil, et aux scènes façon HUD. Le réglage s'applique au nœud caméra actuel et à tout nœud caméra ultérieur jusqu'à l'appel de cameraSetPerspective. L'ombre d'une lumière directionnelle utilise une seule carte sous une caméra orthographique, quoi que dise sceneSetShadowCascades.\nDepuis: 3.00.",
|
|
args = "(height, near, far)",
|
|
returns = "()",
|
|
},
|
|
cameraSetPerspective = {
|
|
type = "function",
|
|
description = "Passe à la projection en perspective habituelle, celle par défaut. fov est le champ de vision vertical en degrés (60 par défaut) ; near et far (0.1 et 1000 par défaut) bornent ce qui est dessiné, en unités du monde devant la caméra. La précision de la profondeur est répartie entre les deux, alors gardez near aussi grand que la scène le permet et far pas plus grand que nécessaire : 0.05 à 100 pour une pièce, 0.1 à 400 pour un paysage. Le réglage s'applique au nœud caméra actuel et à tout nœud caméra ultérieur, ainsi qu'aux vues rendues.\nDepuis: 3.00.",
|
|
args = "(fov, near, far)",
|
|
returns = "()",
|
|
},
|
|
collideCircles = {
|
|
type = "function",
|
|
description = "Indique si deux cercles se chevauchent. Moins coûteux qu'il n'y paraît : rien ne calcule de racine carrée pour répondre à une question par oui ou non.\nRenvoie: true ou false.\nDepuis: 3.00.",
|
|
args = "(x1, y1, radius1, x2, y2, radius2)",
|
|
returns = "(touching)",
|
|
},
|
|
collidePointCircle = {
|
|
type = "function",
|
|
description = "Indique si un point tombe dans un cercle. Le bord compte comme l'intérieur.\nRenvoie: true ou false.\nDepuis: 3.00.",
|
|
args = "(pointX, pointY, x, y, radius)",
|
|
returns = "(inside)",
|
|
},
|
|
collidePointPolygon = {
|
|
type = "function",
|
|
description = "Indique si un point tombe dans un polygone de forme quelconque, concaves compris. La table est une liste plate de x, y, x, y -- la forme qu'a déjà une hitbox dans la plupart des jeux -- et le sens de parcours n'a pas d'importance. Avec moins de trois sommets, le polygone ne contient rien. 256 sommets au plus.\nRenvoie: true ou false.\nDepuis: 3.00.",
|
|
args = "(pointX, pointY, points: table)",
|
|
returns = "(inside)",
|
|
},
|
|
collidePointRect = {
|
|
type = "function",
|
|
description = "Indique si un point tombe dans un rectangle. Le bord compte comme l'intérieur.\nRenvoie: true ou false.\nDepuis: 3.00.",
|
|
args = "(pointX, pointY, x, y, width, height)",
|
|
returns = "(inside)",
|
|
},
|
|
collideRectCircle = {
|
|
type = "function",
|
|
description = "Indique si un rectangle et un cercle se chevauchent, en cherchant le point du rectangle le plus proche du centre du cercle.\nRenvoie: true ou false.\nDepuis: 3.00.",
|
|
args = "(x, y, width, height, circleX, circleY, radius)",
|
|
returns = "(touching)",
|
|
},
|
|
collideRects = {
|
|
type = "function",
|
|
description = "Indique si deux rectangles se chevauchent. Celle dont vous vous servirez le plus.\nRenvoie: true ou false.\nDepuis: 3.00.",
|
|
args = "(x1, y1, width1, height1, x2, y2, width2, height2)",
|
|
returns = "(touching)",
|
|
},
|
|
collideSegments = {
|
|
type = "function",
|
|
description = "Indique si deux segments se croisent : un tir le long d'une trajectoire contre un mur, ou le pas que veut faire un objet en mouvement contre le bord qu'il ne doit pas franchir. Des segments couchés l'un sur l'autre répondent false, car « où se croisent-ils » n'a alors pas de réponse unique.\nRenvoie: true ou false.\nDepuis: 3.00.",
|
|
args = "(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2)",
|
|
returns = "(crossing)",
|
|
},
|
|
colorBackground = {
|
|
type = "function",
|
|
description = "Règle la couleur de fond : celle dont overlayClear remplit l'overlay, et celle que le texte FONT_QUALITY_SHADED de fontPrint et fontToSprite peint derrière ses glyphes. Au démarrage, c'est un noir transparent, et l'alpha vaut 0 par défaut quand il est omis, si bien que colorBackground(0, 0, 0) suivi de overlayClear() rend de nouveau l'overlay invisible. Un alpha partiel sur du noir assombrit la vidéo ; 255 la masque. Les valeurs de canal hors plage sont ramenées dans la plage plutôt que rejetées.\nDepuis: 1.x",
|
|
args = "(r, g, b [, a])",
|
|
returns = "()",
|
|
},
|
|
colorForeground = {
|
|
type = "function",
|
|
description = "Règle la couleur de premier plan qu'utilisent overlayBox, overlayCircle, overlayEllipse, overlayLine et overlayPlot, et la couleur du texte de fontPrint et fontToSprite. Au démarrage, c'est un blanc opaque, et l'alpha vaut 255 par défaut quand il est omis, à l'inverse de colorBackground. Les sprites et overlayPrint sont dessinés avec leurs propres pixels et ne sont pas teintés. Les valeurs de canal hors plage sont ramenées dans la plage plutôt que rejetées.\nDepuis: 1.x",
|
|
args = "(r, g, b [, a])",
|
|
returns = "()",
|
|
},
|
|
controllerDoRumble = {
|
|
type = "function",
|
|
description = "controllerDoRumble(strength, duration)\ncontrollerDoRumble(controller, strength, duration)\nExtension Hypseus. Fait vibrer une manette avec ses deux moteurs, à l'une de quatre intensités pendant l'une de quatre durées. La forme à deux arguments s'adresse à la manette 0. Un emplacement sans manette ne fait rien (Hypseus s'interrompt dans ce cas, si bien que ses jeux se protègent avec controllerIsValid) ; une intensité ou une durée hors de 1 à 4, ou un indice hors de 0 à 3, met fin au script. Une manette sans vibration ignore l'appel.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(strength, duration)",
|
|
returns = "()",
|
|
},
|
|
controllerGetAxis = {
|
|
type = "function",
|
|
description = "Renvoie la position d'un axe analogique telle que le moteur l'a vue en dernier. La valeur est mise à jour à chaque événement d'axe, y compris les mouvements dans la zone morte, et vaut 0 pour une manette non connectée ou un axe qui n'a jamais bougé. Les sticks vont de -32768 à 32767 ; les gâchettes reposent à 0 et atteignent 32767 enfoncées à fond. Un indice hors de 0 à 3, ou un axe hors de 0 à 5, met fin au script.\nRenvoie: entier, de -32768 à 32767.\nDepuis: 2.00",
|
|
args = "(controller, axis)",
|
|
returns = "(integer)",
|
|
},
|
|
controllerGetButton = {
|
|
type = "function",
|
|
description = "Indique si un bouton est maintenu à cet instant, lu directement sur la manette plutôt que dans la file d'événements. Servez-vous-en pour les charges en maintenant le bouton et les cas semblables où onInputPressed et onInputReleased sont malcommodes. Un emplacement sans manette renvoie false. Le code du bouton doit venir de la table GAMEPAD_N du même indice de manette ; un code de la table d'une autre manette, ou un code d'axe, tombe hors de la plage des boutons et met fin au script, tout comme un indice hors de 0 à 3.\nRenvoie: booléen.\nDepuis: 2.10",
|
|
args = "(controller, button)",
|
|
returns = "(boolean)",
|
|
},
|
|
controllerGetName = {
|
|
type = "function",
|
|
description = "Le nom du périphérique présent dans un emplacement de manette, tel que SDL le donne, ou nil quand l'emplacement est vide. Un périphérique que SDL ne reconnaissait pas donne son propre nom par l'affectation que Singe a écrite pour lui, si bien qu'un écran de service peut lister un encodeur d'arcade par son nom aussi facilement qu'une manette de marque. Un indice hors de 0 à 3 met fin au script.\nRenvoie: chaîne, ou nil.\nDepuis: 3.00",
|
|
args = "(controller)",
|
|
returns = "(string)",
|
|
},
|
|
controllerGetPadding = {
|
|
type = "function",
|
|
description = "Extension Hypseus, toujours 0 dans Singe. Hypseus ajoute ce décalage au code d'un contact venu d'une manette, pour qu'un jeu sache quel périphérique a pressé quoi tout en retrouvant le contact en le soustrayant. Singe livre les entrées des manettes comme des contacts affectés ordinaires qui ne portent aucune marque de ce genre, et répond donc 0 : un jeu qui teste la plage décalée prend son autre branche et lit le contact tel quel.\nRenvoie: un entier, toujours 0.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "(padding)",
|
|
},
|
|
controllerHowMany = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Le nombre de manettes ouvertes, sur les quatre emplacements dont dispose Singe. Comme tout joystick que Singe peut ouvrir devient une manette (voir Tout périphérique est une manette), un encodeur d'arcade ou un spinner est compté ici aussi.\nRenvoie: nombre, de 0 à 4.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "()",
|
|
returns = "(number)",
|
|
},
|
|
controllerIsValid = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Indique si une manette est ouverte dans l'emplacement à cet instant ; les manettes vont et viennent au gré des branchements à chaud, alors posez la question avant chaque controllerDoRumble. Un indice hors de 0 à 3 met fin au script.\nRenvoie: booléen.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(controller)",
|
|
returns = "(boolean)",
|
|
},
|
|
controllerSetPadding = {
|
|
type = "function",
|
|
description = "Extension Hypseus, acceptée et ignorée. Voir controllerGetPadding pour savoir pourquoi le décalage qu'elle demande n'existe pas dans Singe. L'activer sans marquer les événements serait pire que de la laisser désactivée, car le jeu soustrairait alors un décalage de codes de contact qui n'en ont jamais porté.\nRenvoie: rien.\nDepuis: 3.00",
|
|
args = "(boolean)",
|
|
returns = "()",
|
|
},
|
|
daphneGetHeight = {
|
|
type = "function",
|
|
description = "Alias dans Framework.singe Préférez les équivalents singe*.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "unimplementedandlegacy",
|
|
},
|
|
daphneGetWidth = {
|
|
type = "function",
|
|
description = "Alias dans Framework.singe Préférez les équivalents singe*.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "unimplementedandlegacy",
|
|
},
|
|
daphneScreenshot = {
|
|
type = "function",
|
|
description = "Alias dans Framework.singe Préférez les équivalents singe*.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "unimplementedandlegacy",
|
|
},
|
|
debugPrint = {
|
|
type = "function",
|
|
description = "Affiche une ligne sur la console (sortie standard). Rien n'est affiché quand Singe a été lancé avec --noconsole ; avec --trace, l'appel et son message atterrissent aussi dans trace.txt. L'argument doit être une chaîne ou un nombre ; tout le reste met fin au script : enveloppez donc les valeurs dans tostring ou utilisez string.format. Il coûte assez peu pour rester dans le code livré, mais il n'est pas limité en débit, si bien qu'un affichage dans onOverlayUpdate s'exécute à chaque image.\nDepuis: 1.x",
|
|
args = "(message)",
|
|
returns = "()",
|
|
},
|
|
discAudio = {
|
|
type = "function",
|
|
description = "Active ou coupe l'un des canaux de la bande-son du disque. Le canal est réglé sur le volume laserdisc configuré (--volume_vldp, 100 par défaut) quand enabled vaut true, et sur 0 quand il vaut false ; l'autre canal reste tel quel. Beaucoup de titres d'origine portaient une narration ou une piste de données sur un seul canal, et c'est cet appel qui la fait taire. Un canal autre que 1 ou 2 met fin au script. Sans disque, l'appel ne fait rien.\nDepuis: 1.x",
|
|
args = "(channel, enabled)",
|
|
returns = "()",
|
|
},
|
|
discAudioSuffix = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Fait passer le disque à un fichier audio séparé placé à côté de sa vidéo : <base><suffix>.ogg, où la base est le nom du fichier vidéo sans son extension ; ainsi movie.m2v avec \"-es\" joue movie-es.ogg. Le fichier est ouvert à l'image en cours et la lecture se réaligne, comme avec discSetAudioTrack, en gardant le volume, l'état de lecture et l'indice de piste quand le nouveau fichier a autant de pistes. Avec un framefile, tous les segments changent. Un suffixe vide rétablit l'audio par défaut : le .ogg à côté d'un .m2v, ou l'audio contenu dans tout autre conteneur. Renvoie true quand le fichier s'est ouvert ; quand il manque, l'audio précédent continue de jouer, rien n'est mémorisé et false est renvoyé (Hypseus laisse alors le silence). Le suffixe est oublié quand le script est rechargé. Sans disque, l'appel renvoie false. Servez-vous-en pour un menu de langues dont les pistes sont livrées en fichiers séparés ; les pistes contenues dans un même fichier sont l'affaire de discSetAudioTrack.\nRenvoie: booléen.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(suffix: string)",
|
|
returns = "(boolean)",
|
|
},
|
|
discChangeSpeed = {
|
|
type = "function",
|
|
description = "Ne fait rien. Les vrais lecteurs de laserdisc pouvaient tourner à une autre vitesse que 1x ; le lecteur logiciel de Singe ne le peut pas, donc l'appel accepte n'importe quels arguments, écrit une ligne de trace et rend la main. Il est conservé pour que les scripts antérieurs à 2.00 se chargent sans modification.\nDepuis: 1.x",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
discGetAudioTrack = {
|
|
type = "function",
|
|
description = "Renvoie l'indice, compté à partir de zéro, de la piste audio que joue actuellement le disque. Au démarrage, le moteur choisit la piste désignée par --audio ou par l'entrée AUDIO_TRACK de games.dat (0 par défaut) quand le disque a autant de pistes. Renvoie 0 sans disque.\nRenvoie: indice de piste entier.\nDepuis: 2.10",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
discGetAudioTracks = {
|
|
type = "function",
|
|
description = "Renvoie le nombre de flux audio que contient le fichier vidéo du disque. Plusieurs flux sont en général des doublages dans d'autres langues. Une vidéo muette renvoie 0, tout comme un jeu sans disque : protégez donc les boucles et les calculs modulo contre le zéro.\nRenvoie: nombre entier, 0 ou plus.\nDepuis: 2.10",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
discGetFrame = {
|
|
type = "function",
|
|
description = "Renvoie l'image que le disque montre en ce moment. Avec un framefile, le numéro est la position dans la séquence combinée, si bien que les limites des segments sont invisibles pour le script. Renvoie 0 tant que le disque est arrêté, et sans disque. Interrogez-la depuis onOverlayUpdate pour réagir quand la vidéo atteint un point de décision.\nRenvoie: numéro d'image entier.\nDepuis: 1.x",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
discGetFrameCount = {
|
|
type = "function",
|
|
description = "Le nombre d'images du disque, soit un de plus que la plus haute image que discSearch trouvera. Un framefile répond pour tout le disque plutôt que pour le segment en cours de lecture : le compte ne change donc pas à mesure que les segments vont et viennent. Sans disque, il répond 0.\nRenvoie: nombre d'images entier, 0 sans disque.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
discGetHeight = {
|
|
type = "function",
|
|
description = "Renvoie la hauteur de la vidéo du disque, en pixels. Sans disque, elle renvoie la hauteur du canevas (CANVAS_Y dans games.dat ou --canvas, 480 par défaut) : c'est donc toujours la taille du fond sur lequel l'overlay est étiré. Associez-la à discGetWidth pour donner à l'overlay la même résolution que la vidéo.\nRenvoie: hauteur entière en pixels.\nDepuis: 2.00",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
discGetLanguage = {
|
|
type = "function",
|
|
description = "Renvoie l'étiquette de langue stockée dans le fichier vidéo pour l'une des pistes audio du disque. L'étiquette est un code ISO 639 de trois lettres comme \"eng\" ou \"jpn\". Les pistes sans étiquette de trois lettres renvoient \"unk\", comme toutes les pistes quand il n'y a pas de disque. Avec un disque, une piste hors de 0 à discGetAudioTracks() - 1 met fin au script.\nRenvoie: code de langue sous forme de chaîne.\nDepuis: 2.10",
|
|
args = "(track)",
|
|
returns = "(string)",
|
|
},
|
|
discGetLanguageDescription = {
|
|
type = "function",
|
|
description = "= videoGetLanguageDescription\nCherche le nom anglais d'un code de langue. Contrairement aux autres fonctions video*, elle ne prend pas de handle ; c'est une simple consultation de table qui accepte les codes ISO 639-1 à deux lettres et les codes ISO 639-2 à trois lettres (les formes T comme B), comparés sans tenir compte de la casse. Les codes inconnus, y compris le \"unk\" renvoyé pour les pistes sans étiquette, donnent \"Unknown\". Framework.singe lui donne l'alias discGetLanguageDescription, par symétrie avec l'API du disque.\nRenvoie: nom de la langue, une chaîne, ou \"Unknown\".\nDepuis: 2.10",
|
|
args = "(code)",
|
|
returns = "(string)",
|
|
anchor = "videogetlanguagedescription",
|
|
},
|
|
discGetState = {
|
|
type = "function",
|
|
description = "Renvoie l'état de transport du disque sous la forme de l'une des constantes DISC_*. Un jeu sans disque signale DISC_EJECTED ; après discStop, le disque signale DISC_STOPPED jusqu'au prochain discPlay, discSearch ou discSkipToFrame ; sinon l'état est DISC_PLAYING tant que la vidéo avance, et DISC_PAUSED quand elle n'avance pas. Il n'y a pas d'état de recherche distinct ; un disque en cours de saut signale DISC_PAUSED ou DISC_PLAYING selon ce qui a été demandé.\nRenvoie: l'une des constantes suivantes, définies par le moteur et accessibles à tous les scripts.\nDepuis: 1.x (RDG)",
|
|
args = "()",
|
|
returns = "(state)",
|
|
},
|
|
discGetSubtitleLanguage = {
|
|
type = "function",
|
|
description = "La langue indiquée sur une piste de sous-titres contenue dans le conteneur même du disque, sous la forme du code ISO 639 que porte le fichier (eng, fra, spa). Une piste que le fichier n'étiquette pas renvoie une chaîne vide, ce qui n'est pas une erreur -- bien des fichiers n'étiquettent rien.\nRenvoie: une chaîne.\nDepuis: 3.00.",
|
|
args = "(track: number)",
|
|
returns = "(language)",
|
|
},
|
|
discGetSubtitleTracks = {
|
|
type = "function",
|
|
description = "Le nombre de pistes de sous-titres que contient le conteneur même du disque. 0 sans disque, et 0 pour un disque dont les sous-titres sont livrés dans un .srt séparé -- c'est la disposition habituelle, et ce à quoi sert srtLoad.\nRenvoie: un nombre.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(count)",
|
|
},
|
|
discGetWidth = {
|
|
type = "function",
|
|
description = "Renvoie la largeur de la vidéo du disque, en pixels. Sans disque, elle renvoie la largeur du canevas (CANVAS_X dans games.dat ou --canvas, 720 par défaut). Avec discGetHeight, c'est la taille sur laquelle l'overlay est mis à l'échelle, et c'est pourquoi le menu fourni passe les deux à overlaySetResolution.\nRenvoie: largeur entière en pixels.\nDepuis: 2.00",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
discPause = {
|
|
type = "function",
|
|
description = "Met la lecture en pause sur l'image en cours, qui reste à l'écran. L'audio du disque se met en pause avec elle. L'appel est ignoré tant que le disque est arrêté et ne fait rien sans disque. Reprenez avec discPlay.\nDepuis: 1.x",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
discPauseAtFrame = {
|
|
type = "function",
|
|
description = "Saute à frame, l'affiche et se met en pause. C'est la même fonction que discSearch sous un second nom ; les deux sont interchangeables en tout point, y compris pour les règles de bornage décrites là-bas. Préférez discSearch dans le nouveau code et ne gardez discPauseAtFrame que pour porter d'anciens scripts.\nDepuis: 1.18",
|
|
args = "(frame)",
|
|
returns = "()",
|
|
},
|
|
discPlay = {
|
|
type = "function",
|
|
description = "Lance ou reprend la lecture à partir de l'image en cours et efface l'état d'arrêt posé par discStop. L'audio reprend avec la vidéo, et l'horloge de lecture repart de l'image en cours pour qu'une longue pause ne provoque pas de saut. Sans disque, ne fait rien d'autre qu'effacer l'indicateur d'arrêt.\nDepuis: 1.x",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
discSearch = {
|
|
type = "function",
|
|
description = "Fait sauter le disque à frame, affiche cette image et s'y met en pause, en effaçant l'état d'arrêt si le disque était arrêté. Le disque garde l'image jusqu'à discPlay, discSkipToFrame ou un autre appel de transport. Une image négative est ramenée à la première image et une image au-delà de la fin à la dernière ; avec un framefile, le segment qui contient l'image est sélectionné et la position est bornée à l'intérieur. Ne fait rien sans disque.\nDepuis: 1.x",
|
|
args = "(frame)",
|
|
returns = "()",
|
|
},
|
|
discSearchBlanking = {
|
|
type = "function",
|
|
description = "Ne fait rien. Sur le matériel laserdisc, cet appel choisissait si l'écran s'éteignait pendant que le lecteur cherchait une image ; le lecteur logiciel de Singe saute sans éteindre l'écran, donc l'appel accepte n'importe quels arguments, écrit une ligne de trace et rend la main.\nDepuis: 1.x",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
discSetAudioTrack = {
|
|
type = "function",
|
|
description = "Fait passer le disque à une autre piste audio. L'audio en attente de l'ancienne piste est abandonné et la lecture se réaligne, si bien que le changement s'entend presque aussitôt. Avec un disque, une piste hors de 0 à discGetAudioTracks() - 1 met fin au script ; sans disque, l'appel ne fait rien. Servez-vous-en pour réaliser un menu de langues ou respecter une préférence enregistrée d'une session à l'autre.\nDepuis: 2.10",
|
|
args = "(track)",
|
|
returns = "()",
|
|
},
|
|
discSetFPS = {
|
|
type = "function",
|
|
description = "Ne fait rien. La fréquence d'images vient du fichier vidéo, donc l'appel accepte n'importe quels arguments, écrit une ligne de trace et rend la main. Rien dans le Framework.singe fourni ne l'appelle ; seuls les scripts antérieurs à 2.00 le font.\nDepuis: 1.x",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
discSkipBackward = {
|
|
type = "function",
|
|
description = "Saute de frames images en arrière à partir de l'image en cours sans changer l'état de lecture ou de pause : un disque en lecture continue de jouer depuis la nouvelle position, un disque en pause y reste en pause. L'appel est ignoré tant que le disque est arrêté, et sans disque. L'écart n'est pas vérifié ; une valeur négative fait sauter en avant, et un écart plus grand que l'image en cours s'arrête à l'image 0. Avec un framefile, l'écart s'applique au numéro d'image que renvoie discGetFrame, si bien qu'un saut peut passer dans un segment antérieur.\nDepuis: 1.x",
|
|
args = "(frames: number)",
|
|
returns = "()",
|
|
},
|
|
discSkipBlanking = {
|
|
type = "function",
|
|
description = "Ne fait rien. Il choisissait autrefois si l'écran s'éteignait pendant un saut sur le matériel laserdisc ; le lecteur logiciel de Singe n'éteint jamais l'écran, donc l'appel accepte n'importe quels arguments, écrit une ligne de trace et rend la main.\nDepuis: 1.x",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
discSkipForward = {
|
|
type = "function",
|
|
description = "Saute de frames images en avant à partir de l'image en cours sans changer l'état de lecture ou de pause. Pendant de discSkipBackward : ignoré à l'arrêt et sans disque, l'écart n'est pas vérifié, et une cible au-delà de la dernière image s'arrête à la dernière image. Avec un framefile, l'écart s'applique au numéro d'image que renvoie discGetFrame, si bien qu'un saut peut passer dans un segment ultérieur.\nDepuis: 1.x",
|
|
args = "(frames: number)",
|
|
returns = "()",
|
|
},
|
|
discSkipToFrame = {
|
|
type = "function",
|
|
description = "Saute à frame et lance la lecture à partir de là, quel que soit l'état du disque, en effaçant l'état d'arrêt si nécessaire. À comparer avec discSearch, qui saute et se met en pause. Une image avant le début ou au-delà de la fin est ramenée à la première ou à la dernière image ; avec un framefile, le segment qui contient l'image est sélectionné et la position est bornée à l'intérieur. Sans disque, ne fait rien d'autre qu'effacer l'indicateur d'arrêt.\nDepuis: 1.x",
|
|
args = "(frame)",
|
|
returns = "()",
|
|
},
|
|
discStepBackward = {
|
|
type = "function",
|
|
description = "Recule le disque d'exactement une image et s'y met en pause, quel que soit l'état de lecture précédent. Reculer depuis l'image 0 reste sur l'image 0. Ignoré tant que le disque est arrêté, comme discSkipBackward. Destiné au débogage à l'image près et aux écrans de service. Ne fait rien sans disque.\nDepuis: 1.x",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
discStepForward = {
|
|
type = "function",
|
|
description = "Avance le disque d'exactement une image et s'y met en pause, quel que soit l'état de lecture précédent. Avancer depuis la dernière image reste sur la dernière image. Comme discStepBackward, il est ignoré tant que le disque est arrêté. Ne fait rien sans disque.\nDepuis: 1.x",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
discStop = {
|
|
type = "function",
|
|
description = "Arrête le disque. La lecture se met en pause, la vidéo est remplacée par l'écran bleu classique, discGetState signale DISC_STOPPED et discGetFrame renvoie 0 jusqu'à ce que le disque soit relancé. À l'arrêt, discPause, discSkipForward, discSkipBackward, discStepForward et discStepBackward sont ignorés. N'importe lequel de discPlay, discSearch ou discSkipToFrame efface l'état d'arrêt. Un second discStop est ignoré.\nDepuis: 1.x",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
drawTransparent = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Décide si la couleur 0 est dessinée transparente sur les sprites chargés, et sur le texte rendu, après l'appel. false, la valeur par défaut, rend la couleur 0 transparente comme le fait Hypseus : l'indice de palette 0, ou le noir pur, y compris le noir opaque d'une image qui a un canal alpha, si bien qu'un lettrage noir ou un contour noir disparaît. true les dessine d'après leur seul canal alpha, si bien que le noir opaque reste noir. Les sprites déjà chargés gardent le réglage avec lequel ils ont été chargés, et chaque script commence à false.\nRenvoie: rien.\nDepuis: 3.00",
|
|
args = "(boolean)",
|
|
returns = "()",
|
|
},
|
|
emitterBurst = {
|
|
type = "function",
|
|
description = "Crée d'un coup count particules selon la recette actuelle, flux ou pas : une explosion, une éclaboussure, une bouffée. Seules sont créées celles pour lesquelles la réserve a de la place ; emitterSetMax règle cette place. Un émetteur 2D lâche sa salve à son point emitterSetPosition, un émetteur 3D à son nœud, répartie sur emitterSetRadius.\nDepuis: 3.00.",
|
|
args = "(emitter, count)",
|
|
returns = "()",
|
|
},
|
|
emitterClear = {
|
|
type = "function",
|
|
description = "Tue sur-le-champ chaque particule vivante et oublie toute fraction de particule due. Le flux n'est pas arrêté : un émetteur démarré continue de créer de nouvelles particules à l'image suivante, alors appelez aussi emitterStop pour le vider pour de bon. Servez-vous-en quand une scène change et que les anciennes étincelles ne doivent pas traîner.\nDepuis: 3.00.",
|
|
args = "(emitter)",
|
|
returns = "()",
|
|
},
|
|
emitterDelete = {
|
|
type = "function",
|
|
description = "Supprime d'un coup l'émetteur, ses particules vivantes et sa copie de la texture ; rien ne s'estompe. Utilisez plutôt emitterStop pour laisser les dernières particules finir. Un émetteur 3D est aussi supprimé de lui-même quand son nœud est supprimé. Un handle qui n'est pas celui d'un émetteur vivant met fin au script : effacez donc la variable ensuite.\nDepuis: 3.00.",
|
|
args = "(emitter)",
|
|
returns = "()",
|
|
},
|
|
emitterDraw = {
|
|
type = "function",
|
|
description = "2D seulement, depuis onOverlayUpdate : met en file d'attente les particules de l'émetteur pour qu'elles soient dessinées à cette image, au-dessus ou au-dessous de l'overlay selon emitterSetLayer, en coordonnées de l'overlay projetées sur la fenêtre. Les émetteurs d'une même couche se dessinent dans l'ordre où ils ont été mis en file. La file se vide à chaque image : l'appel a donc sa place dans chaque image où les particules doivent se voir ; ne pas dessiner un émetteur ne l'arrête pas. Jusqu'à 64 émetteurs par couche se dessinent dans une image. Un émetteur 3D se dessine lui-même dans la scène et met fin au script ici.\nDepuis: 3.00.",
|
|
args = "(emitter)",
|
|
returns = "()",
|
|
},
|
|
emitterGetCount = {
|
|
type = "function",
|
|
description = "Le nombre de particules de l'émetteur vivantes à cette image, de 0 à la taille de la réserve. Utile pour régler une réserve, pour un budget à l'écran, ou pour savoir quand une salve s'est éteinte.\nRenvoie: le nombre de particules vivantes, un entier.\nDepuis: 3.00.",
|
|
args = "(emitter)",
|
|
returns = "(count)",
|
|
},
|
|
emitterIsActive = {
|
|
type = "function",
|
|
description = "Indique si l'émetteur émet en continu ou a encore des particules vivantes : true depuis emitterStart ou emitterBurst jusqu'à ce que le flux soit arrêté et que la dernière particule soit morte, false une fois l'explosion finie. Un émetteur en émission continue dont la réserve se trouve vide est toujours actif.\nRenvoie: booléen.\nDepuis: 3.00.",
|
|
args = "(emitter)",
|
|
returns = "(boolean)",
|
|
},
|
|
emitterNew = {
|
|
type = "function",
|
|
description = "Crée un émetteur. Sans argument, c'est un émetteur 2D placé à la position (0, 0) de l'overlay, que l'on déplace avec emitterSetPosition ; avec un nœud, c'est un émetteur 3D dont les particules naissent à la position du nœud dans le monde, et il a besoin de la scène 3D : sur une machine qui n'en a pas, l'appel met fin au script (les émetteurs 2D fonctionnent partout). Un nouvel émetteur n'émet pas en continu ; appelez emitterStart ou emitterBurst. Supprimer le nœud supprime ses émetteurs. Valeurs par défaut : 50 particules par seconde, vivant une à deux secondes, ouverture de 30 degrés, blanc s'estompant jusqu'au transparent, mélange normal, ni gravité, ni freinage, ni rotation, ni rayon, ni texture, ni traînée, ni collision, une réserve de 1000 ; un émetteur 2D les lance vers le haut de l'écran à 50 à 100 unités de l'overlay par seconde en les réduisant de 16 à 4, un émetteur 3D vers le haut de l'axe Y à 1 à 2 unités du monde par seconde en les réduisant de 0,2 à 0,05.\nRenvoie: le handle de l'émetteur.\nDepuis: 3.00.",
|
|
args = "([node])",
|
|
returns = "(emitter)",
|
|
},
|
|
emitterSetBlend = {
|
|
type = "function",
|
|
description = "La façon dont les particules se combinent avec ce qui est derrière elles. PARTICLE_ALPHA (par défaut) mélange normalement, pour la fumée, la poussière, la pluie et les débris ; PARTICLE_ADD ajoute de la lumière, pour le feu, les étincelles, les lueurs et la magie, et n'assombrit jamais. Prend effet aussitôt sur les particules vivantes. Toute autre valeur que ces deux constantes met fin au script.\nDepuis: 3.00.",
|
|
args = "(emitter, mode)",
|
|
returns = "()",
|
|
},
|
|
emitterSetCollide = {
|
|
type = "function",
|
|
description = "Ce sur quoi rebondissent les particules. COLLIDE_NONE (par défaut), c'est rien ; COLLIDE_FLOOR, c'est un plan horizontal à la hauteur floor, sous lequel (Y plus grand en 2D, Y plus petit en 3D) une particule est remise sur le plan et réfléchie ; COLLIDE_SCENE, c'est le monde physique, pour les émetteurs 3D seulement, par un lancer de rayon par particule le long de son mouvement à chaque image, plafonné à 200 lancers par émetteur et par image et repris là où ils s'étaient arrêtés, si bien qu'un gros émetteur répartit le coût sur quelques images. Sur un émetteur 2D, COLLIDE_SCENE est accepté et ne fait rien. Un mode autre que ces trois-là met fin au script.\nDepuis: 3.00.",
|
|
args = "(emitter, mode [, bounce, friction, floor])",
|
|
returns = "()",
|
|
},
|
|
emitterSetColor = {
|
|
type = "function",
|
|
description = "La couleur et l'opacité à la naissance (r, g, b, a) et à la mort (r2, g2, b2, a2), chacune de 0 à 255, qui changent régulièrement au fil de la vie de la particule ; les valeurs hors plage sont bornées. Par défaut, du blanc opaque au blanc transparent. La teinte multiplie la texture ou le disque intégré, si bien qu'une image blanche prend exactement la couleur. Un fondu en entrée et en sortie demande deux émetteurs ou une texture qui contient la forme ; une recette suit une seule rampe droite.\nDepuis: 3.00.",
|
|
args = "(emitter, r, g, b, a, r2, g2, b2, a2)",
|
|
returns = "()",
|
|
},
|
|
emitterSetDirection = {
|
|
type = "function",
|
|
description = "La direction moyenne dans laquelle partent les nouvelles particules ; seule la direction compte, pas la longueur. Par défaut en 2D (0, -1), vers le haut de l'écran puisque le Y de l'overlay croît vers le bas ; par défaut en 3D (0, 1, 0), vers le haut de l'axe Y du monde. Un émetteur 2D ignore z ; un émetteur 3D qui reçoit deux valeurs prend z = 0. Un vecteur nul est traité comme (0, -1, 0). Pour un émetteur 3D, la direction s'exprime dans les axes du monde, pas dans ceux du nœud : tournez-la vous-même quand le nœud tourne.\nDepuis: 3.00.",
|
|
args = "(emitter, x, y [, z])",
|
|
returns = "()",
|
|
},
|
|
emitterSetDrag = {
|
|
type = "function",
|
|
description = "La vitesse à laquelle les particules perdent leur vélocité : à chaque image, la vélocité est multipliée par 1 - perSecond * dt, jamais en dessous de 0, si bien que 1 enlève l'essentiel de la vitesse en une seconde et que 0 (la valeur par défaut) la garde pour toujours. Les valeurs négatives deviennent 0. La fumée, les braises et les feux d'artifice ralentissent ; les étincelles et la pluie, non. S'applique aux particules vivantes dès l'image suivante.\nDepuis: 3.00.",
|
|
args = "(emitter, perSecond)",
|
|
returns = "()",
|
|
},
|
|
emitterSetFrames = {
|
|
type = "function",
|
|
description = "Avec un sprite animé comme texture, chaque nouvelle particule prend une image au hasard de first à last et la garde toute sa vie ; les images se comptent à partir de 0. Les valeurs sont bornées aux images que possède la texture, et last est relevé à first quand il est plus petit. Par défaut : l'image 0 seule, qui est aussi ce à quoi emitterSetTexture revient. Avec le disque intégré ou un sprite d'une seule image, la plage n'a aucun effet.\nDepuis: 3.00.",
|
|
args = "(emitter, first, last)",
|
|
returns = "()",
|
|
},
|
|
emitterSetGravity = {
|
|
type = "function",
|
|
description = "Une accélération constante sur chaque particule, en unités de l'overlay (2D) ou en unités du monde (3D) par seconde au carré : (0, 500) tire les étincelles 2D vers le bas de l'écran, (0, -20) laisse monter la fumée 2D, (0, -9.8, 0) est la Terre dans la scène. Aucune par défaut. Elle s'applique aux particules vivantes dès l'image suivante. Les particules ne sont pas des corps physiques ; donnez-leur emitterSetCollide pour qu'elles rebondissent sur un sol ou sur la scène.\nDepuis: 3.00.",
|
|
args = "(emitter, x, y [, z])",
|
|
returns = "()",
|
|
},
|
|
emitterSetLayer = {
|
|
type = "function",
|
|
description = "2D seulement : où emitterDraw place les particules. PARTICLE_OVER (par défaut) dessine au-dessus de tout ce qui est sur l'overlay ; PARTICLE_UNDER dessine sous l'overlay et au-dessus de la vidéo et de la scène 3D, pour de la fumée derrière le score. Sur un émetteur 3D, le réglage est accepté et ignoré. Toute autre valeur que ces deux constantes met fin au script.\nDepuis: 3.00.",
|
|
args = "(emitter, layer)",
|
|
returns = "()",
|
|
},
|
|
emitterSetLife = {
|
|
type = "function",
|
|
description = "La durée de vie de chaque nouvelle particule, tirée au hasard entre les deux ; de 1 à 2 par défaut. Sa taille et sa couleur vont de leur début à leur fin pendant ce temps, si bien que la durée de vie donne le rythme de chaque fondu. Le minimum est maintenu à 0.001 ou plus et le maximum est relevé au minimum quand il est plus petit. Les particules vivantes gardent la durée de vie avec laquelle elles sont nées.\nDepuis: 3.00.",
|
|
args = "(emitter, minSeconds, maxSeconds)",
|
|
returns = "()",
|
|
},
|
|
emitterSetLit = {
|
|
type = "function",
|
|
description = "3D seulement : éclaire chaque particule avec les lumières et le ciel de la scène comme s'il s'agissait d'une petite sphère tournée vers la caméra, si bien que la fumée prend la couleur d'un brasero et que la poussière scintille au soleil. Désactivé par défaut ; les ombres ne sont pas consultées. Avec PARTICLE_ADD, l'éclairage s'applique quand même à la teinte avant qu'elle soit ajoutée. Un émetteur 2D garde la valeur et l'ignore.\nDepuis: 3.00.",
|
|
args = "(emitter, lit)",
|
|
returns = "()",
|
|
},
|
|
emitterSetLocal = {
|
|
type = "function",
|
|
description = "Indique si les particules vivantes suivent l'émetteur. false (par défaut) laisse chacune là où elle est née, si bien qu'une torche portée à travers une pièce laisse de la fumée derrière elle ; true garde tout le nuage relatif à l'origine de l'émetteur, si bien que le panache d'un propulseur se déplace avec le vaisseau. Basculer le réglage fait passer les particules vivantes d'un référentiel à l'autre sans saut. Sur un émetteur 3D, l'origine est la position du nœud dans le monde ; sur un émetteur 2D, c'est le point donné par emitterSetPosition, si bien qu'un nuage 2D local glisse lui aussi avec ce point. Les traînées suivent la même règle.\nDepuis: 3.00.",
|
|
args = "(emitter, local)",
|
|
returns = "()",
|
|
},
|
|
emitterSetMax = {
|
|
type = "function",
|
|
description = "La réserve : le nombre de particules qui peuvent être vivantes en même temps, 1000 par défaut. Une réserve pleine n'en crée plus, ni par le flux ni par une salve, tant que certaines ne sont pas mortes. Changer ce nombre reconstruit la réserve et tue chaque particule vivante : réglez-le donc avant de démarrer. Dimensionnez la réserve au débit multiplié par la plus longue durée de vie, plus la plus grosse salve. Un nombre inférieur à 1 met fin au script.\nDepuis: 3.00.",
|
|
args = "(emitter, count)",
|
|
returns = "()",
|
|
},
|
|
emitterSetPosition = {
|
|
type = "function",
|
|
description = "2D seulement : où naissent les nouvelles particules, en coordonnées de l'overlay ; (0, 0) par défaut. Réglez-la à chaque image pour suivre un sprite ou un corps physique 2D. Les particules vivantes restent où elles sont, sauf si emitterSetLocal est activé. Un émetteur 3D suit son nœud et met fin au script ici ; déplacez plutôt le nœud.\nDepuis: 3.00.",
|
|
args = "(emitter, x, y)",
|
|
returns = "()",
|
|
},
|
|
emitterSetRadius = {
|
|
type = "function",
|
|
description = "Les nouvelles particules naissent n'importe où à cette distance au plus de l'origine de l'émetteur, uniformément sur un disque (2D) ou dans une boule (3D), en unités de l'overlay ou du monde. 0 par défaut, un point ; les valeurs négatives deviennent 0. Un rayon remplit un volume, une tête de torche ou une nappe de poussière dans l'air, là où un point donnerait une aiguille.\nDepuis: 3.00.",
|
|
args = "(emitter, radius)",
|
|
returns = "()",
|
|
},
|
|
emitterSetRate = {
|
|
type = "function",
|
|
description = "Le nombre de particules par seconde que crée un émetteur démarré ; 50 par défaut, les valeurs négatives deviennent 0. Les fractions s'accumulent, si bien que 0.5 en crée une toutes les deux secondes. Changez-le pendant l'émission pour moduler une flamme ou un propulseur. Une réserve pleine (emitterSetMax) n'en crée plus tant que certaines ne sont pas mortes, quel que soit le débit.\nDepuis: 3.00.",
|
|
args = "(emitter, perSecond)",
|
|
returns = "()",
|
|
},
|
|
emitterSetSize = {
|
|
type = "function",
|
|
description = "La taille à la naissance et à la mort, en unités de l'overlay (2D) ou en unités du monde (3D), qui change régulièrement au fil de la vie de la particule ; par défaut de 16 à 4 en 2D et de 0.2 à 0.05 en 3D. variation (de 0 à 1, 0 par défaut) multiplie les deux tailles de chaque nouvelle particule par un même facteur aléatoire entre 1 - variation et 1 + variation, si bien qu'une bouffée est un peu plus grande ou plus petite toute sa vie. Les tailles négatives deviennent 0 et variation est borné. Une particule texturée est dessinée comme un carré de cette taille ; une image plus large est écrasée.\nDepuis: 3.00.",
|
|
args = "(emitter, start, finish [, variation])",
|
|
returns = "()",
|
|
},
|
|
emitterSetSoftness = {
|
|
type = "function",
|
|
description = "3D seulement : estompe une particule sur distance unités du monde là où elle rencontre la géométrie derrière elle, si bien qu'une bouffée de fumée ne trace pas de ligne nette là où elle traverse un mur et qu'une fontaine s'enfonce dans son bassin au lieu de le trancher. 0 (la valeur par défaut) le désactive ; les valeurs négatives deviennent 0. Tant qu'un émetteur l'utilise, la profondeur de la scène est rendue une fois de plus par image : un Raspberry Pi devrait donc l'utiliser avec parcimonie. Un émetteur 2D garde la valeur et l'ignore.\nDepuis: 3.00.",
|
|
args = "(emitter, distance)",
|
|
returns = "()",
|
|
},
|
|
emitterSetSpeed = {
|
|
type = "function",
|
|
description = "La vitesse de départ de chaque nouvelle particule, tirée au hasard entre les deux, en unités de l'overlay par seconde (2D) ou en unités du monde par seconde (3D) ; par défaut de 50 à 100 en 2D et de 1 à 2 en 3D. Le maximum est relevé au minimum quand il est plus petit. La vitesse décide jusqu'où va une particule avant que le freinage, la gravité et sa durée de vie prennent le relais.\nDepuis: 3.00.",
|
|
args = "(emitter, min, max)",
|
|
returns = "()",
|
|
},
|
|
emitterSetSpin = {
|
|
type = "function",
|
|
description = "La vitesse de rotation de chaque nouvelle particule en degrés par seconde, tirée au hasard entre les deux ; les valeurs négatives tournent dans l'autre sens, et une plage qui chevauche 0 donne les deux. Chaque particule part d'un angle aléatoire, qu'elle tourne ou non. Aucune par défaut. Le maximum est relevé au minimum quand il est plus petit. La rotation se voit sur une particule texturée ou sur une traînée ; le disque intégré est rond et paraît identique sous tout angle.\nDepuis: 3.00.",
|
|
args = "(emitter, min, max)",
|
|
returns = "()",
|
|
},
|
|
emitterSetSpread = {
|
|
type = "function",
|
|
description = "La moitié de l'angle du cône (3D) ou de l'éventail (2D), autour de la direction, dans lequel les nouvelles particules sont projetées, de 0 à 180 ; 0 est une ligne droite, 180 toutes les directions. 30 par défaut ; les valeurs hors plage sont bornées. En 3D, les directions sont réparties uniformément sur la calotte du cône, si bien qu'un cône large ne se resserre pas vers son axe.\nDepuis: 3.00.",
|
|
args = "(emitter, degrees)",
|
|
returns = "()",
|
|
},
|
|
emitterSetTexture = {
|
|
type = "function",
|
|
description = "L'image que porte chaque particule : un sprite chargé, ou aucune (un seul argument, ou nil) pour le disque flou intégré. L'émetteur garde sa propre copie des pixels du sprite, toutes les images d'un sprite animé comprises, si bien que le sprite peut être déchargé ensuite. Régler la texture ramène la plage d'images à l'image 0 et place chaque particule vivante sur l'image 0 : appelez donc emitterSetFrames après, pas avant. Le mélange et la teinte s'appliquent à l'image comme au disque.\nDepuis: 3.00.",
|
|
args = "(emitter [, sprite])",
|
|
returns = "()",
|
|
},
|
|
emitterSetTrail = {
|
|
type = "function",
|
|
description = "Un ruban derrière chaque particule, passant par ses length dernières positions, une enregistrée par image (de 2 à 16 ; 0 ou 1 pour aucun, la valeur par défaut), large de width en unités du monde ou de l'overlay, en 2D comme en 3D. Le ruban porte la teinte actuelle de la particule, s'estompe jusqu'au transparent vers sa queue, et prend pour texture la colonne du milieu de l'image de la particule, si bien que le bord flou du disque devient celui du ruban. Les valeurs sont bornées à la plage. Changer la longueur reconstruit le stockage des traînées : les particules vivantes recommencent donc leurs rubans. Étincelles, braises, balles traçantes, comètes.\nDepuis: 3.00.",
|
|
args = "(emitter, length, width)",
|
|
returns = "()",
|
|
},
|
|
emitterStart = {
|
|
type = "function",
|
|
description = "Lance le flux continu au débit réglé ; dès lors, l'émetteur crée des particules à chaque image jusqu'à emitterStop. Démarrer un émetteur qui émet déjà ne change rien. Le flux n'a besoin d'aucun appel de dessin pour tourner ; un émetteur 2D qui émet sans être dessiné consomme quand même sa réserve.\nDepuis: 3.00.",
|
|
args = "(emitter)",
|
|
returns = "()",
|
|
},
|
|
emitterStop = {
|
|
type = "function",
|
|
description = "Met fin au flux ; les particules vivantes finissent leur vie et toute fraction de particule due est abandonnée. emitterBurst fonctionne encore sur un émetteur arrêté, et emitterIsActive reste à true jusqu'à la mort de la dernière particule. Utilisez emitterClear pour supprimer aussi les particules d'un coup.\nDepuis: 3.00.",
|
|
args = "(emitter)",
|
|
returns = "()",
|
|
},
|
|
fontLoad = {
|
|
type = "function",
|
|
description = "Ouvre une police TrueType à une taille en points et en fait la police sélectionnée. La taille est fixée pour toute la vie du handle : chargez donc le même fichier une fois par taille dont vous avez besoin. Le nom passe par le système de fichiers virtuel comme toute autre ressource ; préfixez-le de DIR pour les fichiers livrés avec votre jeu, ou utilisez Singe/FreeSansBold.ttf pour la police fournie. Un fichier qui ne peut pas être ouvert met fin au script avec Unable to open et le nom.\nRenvoie: handle de police entier.\nDepuis: 1.x",
|
|
args = "(filename, pointSize: integer)",
|
|
returns = "(integer)",
|
|
},
|
|
fontPrint = {
|
|
type = "function",
|
|
description = "Rend une chaîne avec la police sélectionnée, la qualité actuelle et la couleur de premier plan actuelle (plus la couleur de fond pour FONT_QUALITY_SHADED), puis la copie sur l'overlay avec son coin supérieur gauche en (x, y). Appelez-la depuis onOverlayUpdate, à chaque image s'il le faut : le moteur garde chaque chaîne qu'il rend, indexée par la police, la qualité, les couleurs et le texte, et un appel ultérieur qui demande la même ne fait que la copier. Les chaînes qui ne sont pas affichées pendant environ une seconde sont oubliées, et celles d'une police disparaissent quand elle est déchargée : le texte qui change ne coûte donc pas plus qu'avant, et celui qui ne change pas est presque gratuit. Une page entière de meilleurs scores réaffichée à chaque image ne pose aucun problème. Sans police sélectionnée, une erreur met fin au script.\nDepuis: 1.x",
|
|
args = "(x, y, text)",
|
|
returns = "()",
|
|
},
|
|
fontQuality = {
|
|
type = "function",
|
|
description = "Choisit comment fontPrint et fontToSprite rastérisent le texte à partir de maintenant. Le réglage est global, pas propre à chaque police, et commence à FONT_QUALITY_SOLID. Les sprites déjà créés par fontToSprite gardent la qualité avec laquelle ils ont été rendus. Une valeur autre que les trois constantes met fin au script sur une erreur.\nDepuis: 1.x",
|
|
args = "(mode)",
|
|
returns = "()",
|
|
},
|
|
fontSelect = {
|
|
type = "function",
|
|
description = "Fait d'une police chargée celle qu'utilisent fontPrint et fontToSprite. La sélection persiste jusqu'au prochain fontSelect ou fontLoad, puisque charger sélectionne aussi. Elle peut changer aussi souvent que nécessaire, y compris plusieurs fois dans un même onOverlayUpdate. Un handle inconnu ou déchargé (ou pas de nombre du tout) laisse la police actuelle sélectionnée et affiche un avertissement, car Hypseus Singe le laisse passer.\nDepuis: 1.x",
|
|
args = "(id)",
|
|
returns = "()",
|
|
},
|
|
fontToSprite = {
|
|
type = "function",
|
|
description = "Rend une chaîne avec la police, la qualité et les couleurs sélectionnées dans un nouveau sprite et renvoie son handle. Le sprite est dès lors indépendant de la police : il survit donc à fontUnload, et il fonctionne avec tous les appels sprite* : dessinez-le, mesurez-le, mettez-le à l'échelle ou faites-le tourner, et libérez-le avec spriteUnload. Pour une chaîne qui change, rendez un nouveau sprite et déchargez l'ancien. Sans police sélectionnée, une erreur met fin au script.\nRenvoie: handle de sprite entier.\nDepuis: 1.x",
|
|
args = "(text)",
|
|
returns = "(integer)",
|
|
},
|
|
fontUnload = {
|
|
type = "function",
|
|
description = "Ferme une police et invalide son handle. Les sprites faits à partir d'elle avec fontToSprite ne sont pas touchés. Si la police déchargée était la police sélectionnée, aucune police n'est plus sélectionnée ensuite et le prochain fontPrint ou fontToSprite met fin au script sur une erreur, jusqu'à ce que fontSelect ou fontLoad en choisisse une autre.\nDepuis: 2.00",
|
|
args = "(id)",
|
|
returns = "()",
|
|
},
|
|
getFValue = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Renvoie le nombre donné avec --fvalue, ou 0 quand l'option n'a pas été utilisée. C'est un canal d'un seul nombre, de celui qui a lancé Singe vers le jeu, destiné à une valeur qu'un front-end veut faire varier d'un lancement à l'autre -- une difficulté, un nombre de crédits de départ, un indice de menu. Le moteur ne fait que la transmettre.\nRenvoie: nombre.\nDepuis: 3.00 (Hypseus)",
|
|
args = "()",
|
|
returns = "(number)",
|
|
},
|
|
getUserString = {
|
|
type = "function",
|
|
description = "Extension Hypseus, toujours une chaîne vide. Malgré son nom, ce n'est pas une chaîne que l'utilisateur a réglée : Hypseus répond l'identifiant d'installation de la machine qu'il envoie avec les statistiques réseau, tiré du MachineGuid de Windows ou de l'identifiant de machine de Linux. Singe n'envoie rien nulle part et ne donnera pas à un jeu une empreinte de la machine sur laquelle il tourne.\nRenvoie: une chaîne, toujours vide.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "(id)",
|
|
},
|
|
guiClose = {
|
|
type = "function",
|
|
description = "Décharge le document de la GUI, en abandonnant ses éléments, ses gestionnaires et ses scripts. Le handle du document n'est plus valide ensuite. Un document fermé par son propre script via l'API de RmlUi (document:Close()) est déchargé de la même façon. Lève No document N in GUI G pour un handle non valide.\nDepuis: 3.00.",
|
|
args = "(gui, document)",
|
|
returns = "()",
|
|
},
|
|
guiDelete = {
|
|
type = "function",
|
|
description = "Libère la GUI, tous ses documents et sa texture, et met fin à la mise à jour et au rendu qu'elle coûtait à chaque image. Les matériaux qui l'affichaient par materialSetGui reviennent à leur propre texture. Le handle n'est plus valide ensuite et met fin au script s'il est réutilisé ; comme une GUI continue d'être rendue, qu'elle soit dessinée ou non, supprimez celles dont un jeu n'a plus besoin plutôt que de les masquer.\nDepuis: 3.00.",
|
|
args = "(gui)",
|
|
returns = "()",
|
|
},
|
|
guiDraw = {
|
|
type = "function",
|
|
description = "Compose la texture de la GUI par-dessus l'overlay pour cette image, en coordonnées de l'overlay, si bien qu'elle respecte la bordure Sinden et l'échelle d'overscan comme tout le reste de l'overlay : sur tout l'overlay avec un seul argument, à sa propre taille avec un coin en x, y, ou mise à l'échelle dans le rectangle de width sur height. La place de l'appel dans le dessin du script décide de ce qui est sous la GUI et de ce qui est dessus : tout ce qui est dessiné sur l'overlay avant lui reste dessous, et tout ce qui est dessiné après lui -- jusqu'au prochain guiDraw ou au prochain tour du script -- va sur une couche à part, composée par-dessus cette GUI. Un pointeur dessiné après le HUD est dessiné par-dessus le HUD ; un second document dessiné après cela se place par-dessus le pointeur, avec sa propre couche au-dessus. Seize couches de ce genre au plus par image ; un appel au-delà dessine sa GUI sans rien par-dessus. overlayClear efface la couche sur laquelle on est en train de dessiner, et overlaySetMonochrome ne passe en gris que l'overlay de base. L'appel dure une image ; faites-le depuis onOverlayUpdate (ou singeMain) à chaque image où la GUI doit être visible. Les GUI se dessinent au-dessus de l'overlay dans l'ordre des appels (la dernière au-dessus), sous les particules PARTICLE_OVER et l'indicateur de pause, et la dernière GUI dessinée sous le pointeur est celle qui reçoit la souris. Seize appels au plus sont pris en compte par image ; les suivants sont ignorés. Tout autre nombre d'arguments lève Expected 1, 3 or 5 arguments.\nDepuis: 3.00.",
|
|
args = "(gui [, x, y, width, height])",
|
|
returns = "()",
|
|
},
|
|
guiDrawScreen = {
|
|
type = "function",
|
|
description = "Identique à guiDraw, sauf que le rectangle se mesure sur toute la fenêtre et non sur l'image. Les coordonnées restent des coordonnées de l'overlay -- 0, 0 est le coin supérieur gauche de la fenêtre et overlayGetWidth(), overlayGetHeight() le coin inférieur droit -- si bien qu'une GUI peut se placer sur l'illustration du bezel, à côté de l'image, au-dessus ou au-dessous. Sans bezel, et sans --scalefactor, --shiftx ni --shifty, l'image occupe toute la fenêtre et cet appel est exactement guiDraw.\nDepuis: 3.00.",
|
|
args = "(gui [, x, y, width, height])",
|
|
returns = "()",
|
|
},
|
|
guiGetHeight = {
|
|
type = "function",
|
|
description = "La hauteur de la GUI dans ses propres pixels, telle que donnée à guiNew. Met fin au script pour un handle non valide.\nRenvoie: un entier.\nDepuis: 3.00.",
|
|
args = "(gui)",
|
|
returns = "(height)",
|
|
},
|
|
guiGetStats = {
|
|
type = "function",
|
|
description = "Ce qu'a coûté le rendu de toutes les GUI lors de la dernière image terminée, pour régler les documents qui utilisent des filtres, des masques et des ombres (chacun d'eux dessinant à travers une couche de la taille de la GUI). Les compteurs couvrent toutes les GUI ensemble. Ils valent tous zéro pour une image où aucune GUI n'a changé d'aspect, puisque rien n'a été redessiné (voir guiRefresh).\nRenvoie: une table avec les champs drawCalls (dessins indexés, y compris les écritures de masque, les compositions et les passes de filtre), layerPushes (couches ouvertes pour les filtres, les images de masque et les ombres de boîte), filterPasses (passes pleine taille et copies dans les chaînes de filtres ; un flou en coûte plusieurs), maskWrites (dessins dans le masque de découpe du stencil), layerBytes (octets de textures de couche actuellement alloués ; chacune a la taille de sa GUI, à quatre octets par pixel) et passes (passes de rendu commencées ; chaque changement de couche en commence une).\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(stats)",
|
|
},
|
|
guiGetValue = {
|
|
type = "function",
|
|
description = "La valeur de l'élément qui porte cet id dans le document, sous forme de chaîne : la valeur d'un contrôle de formulaire (le texte d'un champ de texte, la value d'une option de select, un curseur dans le format propre à RmlUi comme \"85.000000\", l'attribut value d'une case à cocher ou d'un bouton radio, \"on\" s'il n'en a pas, qu'il soit coché ou non ; son état est son attribut checked, lu par l'API de RmlUi), ou, pour tout autre élément, son RML intérieur. Renvoie nil quand aucun élément n'a cet id, si bien qu'on peut sonder une page sans mettre fin au script ; un mauvais handle de GUI ou de document y met fin. Les valeurs de plus de 4095 caractères sont coupées.\nRenvoie: une chaîne, ou nil.\nDepuis: 3.00.",
|
|
args = "(gui, document, id)",
|
|
returns = "(value)",
|
|
},
|
|
guiGetWidth = {
|
|
type = "function",
|
|
description = "La largeur de la GUI dans ses propres pixels, telle que donnée à guiNew. Met fin au script pour un handle non valide.\nRenvoie: un entier.\nDepuis: 3.00.",
|
|
args = "(gui)",
|
|
returns = "(width)",
|
|
},
|
|
guiHide = {
|
|
type = "function",
|
|
description = "Masque le document : il n'est pas dessiné et ne reçoit aucune entrée, mais il garde ses éléments et ses valeurs, et guiShow le fait revenir tel qu'il était. Lève No document N in GUI G pour un handle non valide.\nDepuis: 3.00.",
|
|
args = "(gui, document)",
|
|
returns = "()",
|
|
},
|
|
guiLoad = {
|
|
type = "function",
|
|
description = "Charge un document RML dans la GUI, l'affiche et renvoie un handle de document entier pour les autres appels. Le nom passe par le système de fichiers virtuel comme celui d'un sprite, résolu par rapport au dossier depuis lequel Singe a été lancé : préfixez-le donc de DIR pour les fichiers livrés avec votre jeu ; les feuilles de style, les images et les polices nommées dans le document se résolvent par rapport au fichier qui les nomme, puis par la même recherche, si bien qu'un jeu empaqueté les trouve. Les blocs <script> et les attributs on* du document s'exécutent dans l'état Lua du jeu, et le document est accessible sous rmlui.contexts[\"guiN\"].documents[\"<body id>\"]. Un document qui ne peut pas être chargé met fin au script avec le nom et la raison donnée par RmlUi (un fichier manquant, une erreur d'analyse) ; les avertissements propres à RmlUi sur le balisage et le style vont à la console. Chaque GUI contient jusqu'à trente-deux documents.\nRenvoie: le handle du document, un entier.\nDepuis: 3.00.",
|
|
args = "(gui, filename)",
|
|
returns = "(document)",
|
|
},
|
|
guiLoadFont = {
|
|
type = "function",
|
|
description = "Charge une police TrueType ou OpenType pour toutes les GUI, si bien que les documents peuvent la nommer dans font-family par le nom de famille contenu dans le fichier (font-weight et font-style choisissant parmi les styles d'une même famille). Avec fallback à true, la police fournit aussi tout glyphe qu'aucune autre police n'a, ce que fait jusque-là la Singe/FreeSansBold.ttf du moteur (famille FreeSans, graisse bold, la police qu'utilise le thème fourni). Chargez les polices avant les documents qui les utilisent. Chaque police coûte un atlas de glyphes par taille à laquelle elle sert. Un fichier qui ne peut pas être ouvert met fin au script avec Unable to load et le nom.\nDepuis: 3.00.",
|
|
args = "(filename [, fallback])",
|
|
returns = "()",
|
|
},
|
|
guiNew = {
|
|
type = "function",
|
|
description = "Crée une GUI de width sur height pixels, rendue dans sa propre texture à chaque image, qu'elle soit dessinée ou non, et renvoie son handle. La taille est l'espace de coordonnées du document : 100% du body est la texture entière, et un dp est l'un de ses pixels. Une GUI de la taille de l'overlay convient à une page plein écran ; un élément de HUD ou un moniteur dans la scène en demande une plus petite, et un Raspberry Pi demande que tout reste modeste. Une nouvelle GUI ne fait qu'afficher jusqu'à ce que guiSetInput active les entrées. Lève The size must be positive pour une taille nulle ou négative, et No GUI available quand seize sont déjà utilisées ou que la machine n'a pas de périphérique GPU (une GUI a besoin du même périphérique que la scène 3D).\nRenvoie: le handle de la GUI, un entier.\nDepuis: 3.00.",
|
|
args = "(width, height)",
|
|
returns = "(gui)",
|
|
},
|
|
guiRefresh = {
|
|
type = "function",
|
|
description = "Redessine la GUI à l'image suivante même si rien en elle ne semble avoir changé. Une GUI n'est redessinée que quand son aspect change : quand le document d'une image dessine exactement ce que l'image précédente a dessiné, et que rien de nouveau n'a été créé entre-temps, la texture contient déjà ce rendu et elle est gardée, ce qui épargne au GPU l'essentiel du coût d'une GUI sur les images où un HUD ou un menu ne bouge pas. Les changements faits par le RML, le RCSS, l'interface Lua de RmlUi ou les appels gui* sont tous vus. Cet appel est l'échappatoire si l'un d'eux venait à être manqué -- une GUI qui cesse de se mettre à jour alors qu'elle devrait le faire -- et un jeu ne devrait pas en avoir besoin ; si c'est le cas, cela vaut la peine de le signaler. Une GUI qui n'existe pas met fin au script.\nDepuis: 3.00.",
|
|
args = "(gui)",
|
|
returns = "()",
|
|
},
|
|
guiSetHandler = {
|
|
type = "function",
|
|
description = "guiSetHandler(gui, document, id, event, function)\nguiSetHandler(gui, document, id, event, nil)\nAppelle function(gui, document, id, event, value) chaque fois que l'élément qui porte cet id déclenche l'événement nommé : \"click\" pour les boutons et les lignes, \"change\" pour les contrôles de formulaire, \"submit\" pour un formulaire, ou tout autre nom d'événement RmlUi (\"focus\", \"mouseover\", \"keydown\", ...). value est la valeur de l'élément à ce moment, sous forme de chaîne, telle que la renverrait guiGetValue (un curseur arrive tel que RmlUi le formate, \"85.000000\" : passez-le donc par tonumber). Une seule fonction est gardée par élément et par événement ; en régler une autre la remplace, et nil la retire. Le gestionnaire appartient à cet id, pas à un élément : quand l'élément est remplacé -- une liste reconstruite par inner_rml crée de nouveaux éléments -- réglez de nouveau le gestionnaire après la reconstruction et il s'attache à l'élément qui porte l'id à présent. Les gestionnaires s'exécutent au moment où les événements se produisent, entre les callbacks du jeu lui-même, et une erreur dans l'un d'eux met fin au jeu comme une erreur dans n'importe quel callback. Les ids font au plus 63 caractères. Lève No element \"id\" in document N of GUI G quand l'élément n'existe pas, et Argument 5 must be a function or nil pour toute autre chose à cette place.\nDepuis: 3.00.",
|
|
args = "(gui, document, id, event, function)",
|
|
returns = "()",
|
|
},
|
|
guiSetInput = {
|
|
type = "function",
|
|
description = "Indique si la souris et le pistolet optique, les touches, le texte tapé et les contacts du framework venus d'une manette ou d'une souris parviennent à la GUI. Une nouvelle GUI ne fait qu'afficher, ce qui convient à un HUD ou à un panneau ; activez les entrées pour un menu ou un formulaire. Tant qu'elles sont activées, le pointeur atteint la GUI partout où elle est dessinée à plat (la dernière dessinée au-dessus) ou montrée sur une surface de la scène, chaque touche lui est transmise sauf Tab, que la GUI ne reçoit que pendant la saisie dans un champ de texte (RmlUi s'en sert pour déplacer le focus et ne la rend jamais, et un jeu dont les touches comprennent Tab la perdrait sinon), un champ de texte qui a le focus active la saisie de texte de SDL, et les directions de la manette arrivent comme des touches fléchées, avec ACTION_1 pour Entrée et ACTION_2 pour Échap. Ce qu'un élément utilise n'atteint jamais onInputPressed, onKeyPressed ni les callbacks de la souris ; ce que rien n'a utilisé leur parvient comme d'habitude. Met fin au script pour un handle non valide.\nDepuis: 3.00.",
|
|
args = "(gui, enabled)",
|
|
returns = "()",
|
|
},
|
|
guiSetValue = {
|
|
type = "function",
|
|
description = "Règle la valeur de l'élément qui porte cet id : la valeur d'un contrôle de formulaire (le texte d'un champ de texte, le nombre d'un curseur, la value d'une option de select ; l'état checked d'une case à cocher est un attribut, réglé par l'API de RmlUi), ou, pour tout autre élément, son RML intérieur, si bien qu'un paragraphe ou une div peut être réécrit avec du texte simple ou avec du balisage. Le document refait sa mise en page à l'image suivante. Lève No element \"id\" in document N of GUI G quand l'élément n'existe pas.\nDepuis: 3.00.",
|
|
args = "(gui, document, id, value)",
|
|
returns = "()",
|
|
},
|
|
guiShow = {
|
|
type = "function",
|
|
description = "Affiche un document masqué par guiHide (un document est affiché quand guiLoad rend la main, l'appel n'est donc pas nécessaire à ce moment-là). Un document affiché est dessiné partout où sa GUI l'est et reçoit les entrées quand sa GUI les reçoit. Lève No document N in GUI G pour un handle non valide.\nDepuis: 3.00.",
|
|
args = "(gui, document)",
|
|
returns = "()",
|
|
},
|
|
hypseusGetHeight = {
|
|
type = "function",
|
|
description = "Un alias de singeGetHeight.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "_hypseus_compatibility",
|
|
},
|
|
hypseusGetWidth = {
|
|
type = "function",
|
|
description = "Un alias de singeGetWidth.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "_hypseus_compatibility",
|
|
},
|
|
jitterGet = {
|
|
type = "function",
|
|
description = "Le paquet qui doit être joué maintenant, et le tampon avancé d'un pas. Appelez-le une fois par durée de trame, quoi qu'il soit arrivé.\nRenvoie: le paquet, ou nil, et un état : \"ok\", \"missing\" (rien n'est dû : passez nil à opusDecode pour combler le trou), ou \"insertion\" (le tampon grandit pour absorber les paquets en retard : jouez un peu de silence).\nDepuis: 3.00.",
|
|
args = "(jitter [, span])",
|
|
returns = "(packet, status)",
|
|
},
|
|
jitterNew = {
|
|
type = "function",
|
|
description = "Un tampon de gigue : les paquets y entrent selon leur horodatage à mesure qu'ils arrivent, et en ressortent dans l'ordre, un pas à la fois, avec un léger retard pour qu'un paquet en retard passe encore.\nRenvoie: le handle du tampon de gigue.\nDepuis: 3.00.",
|
|
args = "([step])",
|
|
returns = "(jitter)",
|
|
},
|
|
jitterPut = {
|
|
type = "function",
|
|
description = "Un paquet qui est arrivé. Le tampon en garde sa propre copie.\nDepuis: 3.00.",
|
|
args = "(jitter, packet: string, timestamp [, span])",
|
|
returns = "()",
|
|
},
|
|
jointBall = {
|
|
type = "function",
|
|
description = "Crée une rotule au point du monde (ax, ay, az) : les corps peuvent tourner dans tous les sens autour de lui mais ne peuvent pas se séparer. Un pendule, un maillon de chaîne, une enseigne suspendue, l'épaule d'un ragdoll. Les deux nœuds doivent porter un corps, ou bien nodeB peut valoir -1 pour suspendre nodeA à un point fixe du monde. Une rotule n'a pas de limites, donc jointSetLimits la refuse. Met fin au script quand un nœud n'a pas de corps ou que l'articulation ne peut pas être créée.\nRenvoie: Le handle de l'articulation.\nDepuis: 3.00.",
|
|
args = "(nodeA, nodeB, ax, ay, az)",
|
|
returns = "(joint)",
|
|
},
|
|
jointDelete = {
|
|
type = "function",
|
|
description = "Supprime l'articulation ; les corps sont de nouveau libres l'un de l'autre et gardent la vitesse qu'ils avaient. Les articulations disparaissent aussi avec l'un ou l'autre de leurs corps, donc cet appel ne sert qu'à libérer deux corps qui restent tous les deux. Met fin au script pour un handle qui n'existe pas ou qui a déjà été supprimé.\nDepuis: 3.00.",
|
|
args = "(joint)",
|
|
returns = "()",
|
|
},
|
|
jointHinge = {
|
|
type = "function",
|
|
description = "Crée une charnière entre les deux corps, passant par le point du monde (ax, ay, az) selon l'axe (dx, dy, dz) : une porte, une roue, un levier, une bascule. Les corps gardent ce point et cet axe en commun et ne peuvent que tourner autour. L'axe est normalisé, sa longueur n'a donc pas d'importance ; un axe nul devient (0, 1, 0). Les deux nœuds doivent porter un corps, ou bien nodeB peut valoir -1 pour attacher nodeA au monde par une charnière. Met fin au script quand un nœud n'a pas de corps ou que l'articulation ne peut pas être créée.\nRenvoie: Le handle de l'articulation.\nDepuis: 3.00.",
|
|
args = "(nodeA, nodeB, ax, ay, az, dx, dy, dz)",
|
|
returns = "(joint)",
|
|
},
|
|
jointSetLimits = {
|
|
type = "function",
|
|
description = "Borne l'angle d'une charnière en degrés, ou la course d'une glissière en unités du monde, de part et d'autre de la position de départ de l'articulation. Un angle de charnière positif est une rotation de nodeA autour de l'axe selon la règle de la main droite ; une distance de glissière positive va dans le sens de l'axe. low est ramené à 0 au plus et high à 0 au moins, si bien que la pose de départ est toujours dans la plage. Rappelez-la pour changer la plage à tout moment. Met fin au script pour une rotule ou un handle qui n'existe plus.\nDepuis: 3.00.",
|
|
args = "(joint, low, high)",
|
|
returns = "()",
|
|
},
|
|
jointSlider = {
|
|
type = "function",
|
|
description = "Ne laisse les corps glisser l'un par rapport à l'autre que selon l'axe (dx, dy, dz) passant par l'ancre (ax, ay, az), en gardant leur orientation : un tiroir, un piston, un ascenseur, une porte coulissante. L'axe est normalisé, sa longueur n'a donc pas d'importance ; un axe nul devient (0, 1, 0). Les deux nœuds doivent porter un corps, ou bien nodeB peut valoir -1 pour faire courir nodeA le long d'un rail fixé dans le monde. Met fin au script quand un nœud n'a pas de corps ou que l'articulation ne peut pas être créée.\nRenvoie: Le handle de l'articulation.\nDepuis: 3.00.",
|
|
args = "(nodeA, nodeB, ax, ay, az, dx, dy, dz)",
|
|
returns = "(joint)",
|
|
},
|
|
joyMouseEnable = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Active ou désactive le pilotage de la souris par le joystick pendant que le jeu tourne. Quand il est actif, le stick gauche de l'emplacement de manette 0 déplace le pointeur que voit le jeu, par le même onMouseMoved qu'atteint une vraie souris, en restant à l'intérieur de l'image ; --js_range est la vitesse et l'axe obéit à sa propre zone morte. C'est ce qui rend un jeu de pistolet optique jouable sur une borne qui a un stick et pas de souris.\nRenvoie: rien.\nDepuis: 3.00 (Hypseus)",
|
|
args = "(enabled)",
|
|
returns = "()",
|
|
},
|
|
joyMouseIsEnabled = {
|
|
type = "function",
|
|
description = "Indique si le stick pilote le curseur de la souris en ce moment, que cela ait été décidé par --joymouse ou par joyMouseEnable.\nRenvoie: booléen.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "(boolean)",
|
|
},
|
|
keyboardCatchQuit = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Confie le contact de sortie au script, exactement comme le fait singeSetQuitKeyEnabled(not catch) : keyboardCatchQuit(true) empêche le moteur de quitter sur INPUT_QUIT, et false le lui rend. C'est une fonction définie dans Framework.singe, conservée pour que les jeux écrits pour Hypseus Singe tournent sans modification.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(catch)",
|
|
returns = "()",
|
|
},
|
|
keyboardGetLastDown = {
|
|
type = "function",
|
|
description = "Renvoie le scancode de la touche enfoncée le plus récemment dans l'image en cours, ou 0 quand rien n'a été enfoncé depuis l'image précédente. La valeur est effacée après chaque appel à onOverlayUpdate, ce qui en fait une interrogation ponctuelle « une touche vient-elle d'être enfoncée ? » pour le modèle à fil d'exécution. Les boutons des manettes et de la souris sont aussi enregistrés ici, sous leurs codes GAMEPAD_N et MOUSE_N, puisque le moteur les fait passer par le même chemin que les touches. La valeur est conservée quels que soient le mode du clavier et les affectations de controls.cfg.\nRenvoie: scancode entier, ou 0.\nDepuis: 2.10",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
keyboardGetLastUp = {
|
|
type = "function",
|
|
description = "Renvoie le scancode de la touche relâchée le plus récemment dans l'image en cours, ou 0 quand rien n'a été relâché depuis l'image précédente. La valeur est effacée après chaque appel à onOverlayUpdate, comme celle de keyboardGetLastDown, et enregistre de la même façon les codes des boutons des manettes et de la souris.\nRenvoie: scancode entier, ou 0.\nDepuis: 2.10",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
keyboardGetMode = {
|
|
type = "function",
|
|
description = "Renvoie le mode du clavier en vigueur : MODE_NORMAL (0) ou MODE_FULL (1). Chaque script démarre en MODE_NORMAL, y compris après un rechargement.\nRenvoie: mode entier.\nDepuis: 1.x (RDG)",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
keyboardGetModifiers = {
|
|
type = "function",
|
|
description = "Renvoie les touches de modification maintenues en ce moment, sous forme de masque de bits KMOD_* de SDL. Testez-le avec un et bit à bit contre les valeurs de la table MODIFIER : les entrées d'une seule touche comme MODIFIER.LSHIFT et les entrées combinées MODIFIER.SHIFT, MODIFIER.CTRL, MODIFIER.ALT et MODIFIER.GUI, qui couvrent l'un ou l'autre côté. La fonction lit l'état réel, donc elle fonctionne dans tous les modes du clavier et depuis n'importe quel callback.\nRenvoie: masque de bits entier.\nDepuis: 2.10",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
keyboardIsDown = {
|
|
type = "function",
|
|
description = "Teste si une touche est physiquement maintenue en ce moment, d'après l'état que le moteur garde pour chaque événement de touche qu'il voit. Elle ne dépend ni du mode du clavier ni de controls.cfg, et elle fonctionne depuis n'importe quel callback ; elle convient donc aux déplacements qui doivent continuer tant qu'une touche est maintenue. Les scancodes hors de la plage que définit SDL renvoient false au lieu de mettre fin au script.\nRenvoie: booléen.\nDepuis: 2.10",
|
|
args = "(scancode)",
|
|
returns = "(boolean)",
|
|
},
|
|
keyboardSetMode = {
|
|
type = "function",
|
|
description = "Bascule entre les deux modèles de clavier. En MODE_NORMAL, seules les touches affectées dans controls.cfg atteignent le script, sous forme de valeurs SWITCH_*, la répétition des touches est supprimée pour que chaque appui n'arrive qu'une fois, et le moteur agit sur ses propres contacts (pause, sortie, capture d'écran, capture de la souris). En MODE_FULL, chaque touche atteint onInputPressed et onInputReleased sous forme de son keysym, et onKeyPressed et onKeyReleased sous forme de keysym et de scancode, le texte que produit un appui atteint onTextInput, la répétition des touches est livrée pour la saisie de texte, et les affectations clavier des contacts propres au moteur sont ignorées pour que le jeu garde toutes les touches ; les affectations des boutons des manettes et de la souris agissent toujours, et ces boutons atteignent toujours le script sous forme de leurs valeurs SWITCH_*, puisqu'on ne peut pas les taper. La plupart des jeux règlent le mode une fois au démarrage ; un jeu avec saisie de texte passe en MODE_FULL le temps de la saisie, puis revient. Toute autre valeur met fin au script. En MODE_FULL, les keysyms de quatre touches sont aussi des numéros de contact -- Retour arrière vaut 8 (SWITCH_BUTTON3), Tab 9 (SWITCH_COIN1), Entrée 13 et Échap 27 -- si bien qu'un script qui lit onInputPressed pour un contact de manette ou de souris et qui attend aussi ces touches doit vérifier keyboardIsDown pour la touche avant de traiter la valeur comme le contact.\nDepuis: 1.x (RDG)",
|
|
args = "(mode)",
|
|
returns = "()",
|
|
},
|
|
lightNew = {
|
|
type = "function",
|
|
description = "Crée un nouveau nœud portant une lumière et renvoie le handle du nœud. La lumière démarre blanche, d'intensité 1, sans limite de portée et, pour un projecteur, avec un cône de 20 à 30 degrés. Placez-la et orientez-la avec les appels de nœud : nodeSetPosition pour une lumière ponctuelle ou un projecteur, nodeLookAt pour une lumière directionnelle ou un projecteur. Une lumière rattachée à un nœud qui bouge bouge avec lui, si bien qu'un phare sur une voiture ou une torche dans une main tient en un appel. Met fin au script pour un type inconnu ou quand aucun nœud ne peut être créé.\nRenvoie: Le handle du nœud de la lumière, un entier.\nDepuis: 3.00.",
|
|
args = "(type [, parent])",
|
|
returns = "(node)",
|
|
},
|
|
lightSetColor = {
|
|
type = "function",
|
|
description = "La couleur de la lumière, de 0 à 255 par canal (les valeurs hors plage sont ramenées dans la plage), traitée comme du sRGB ; blanche par défaut. La luminosité relève de lightSetIntensity, alors gardez la couleur pour la teinte (une ampoule chaude 255, 230, 190, une lune froide 150, 190, 255) et laissez au moins un canal près de 255. Met fin au script quand le nœud ne porte pas de lumière.\nDepuis: 3.00.",
|
|
args = "(node, r, g, b)",
|
|
returns = "()",
|
|
},
|
|
lightSetCone = {
|
|
type = "function",
|
|
description = "La forme du cône d'un projecteur, les deux angles étant mesurés depuis l'axe (le -Z du nœud) : pleine luminosité à l'intérieur de innerDegrees, puis un fondu progressif jusqu'à rien à outerDegrees. Les valeurs par défaut sont 20 et 30. Un faible écart entre les deux donne une poursuite de théâtre aux bords nets, un grand écart une flaque de lumière douce. Les valeurs sont enregistrées pour toutes les lumières, mais seul un LIGHT_SPOT s'en sert. Met fin au script quand le nœud ne porte pas de lumière.\nDepuis: 3.00.",
|
|
args = "(node, innerDegrees, outerDegrees)",
|
|
returns = "()",
|
|
},
|
|
lightSetIntensity = {
|
|
type = "function",
|
|
description = "Le multiplicateur de luminosité de la lumière dans la lumière linéaire de la scène, 1 par défaut. Une lumière directionnelle d'intensité 1 rend blanche une surface blanche tournée vers elle. Une lumière ponctuelle ou un projecteur faiblit avec la distance selon 1 / (1 + d^2), si bien que son intensité est la luminosité à la lumière elle-même, la moitié à une unité de distance et un centième à dix unités ; les ampoules demandent en général des valeurs bien au-dessus de 1, de 10 à 50 pour une pièce, et sceneSetExposure ramène toute la scène dans la plage. Met fin au script quand le nœud ne porte pas de lumière.\nDepuis: 3.00.",
|
|
args = "(node, intensity)",
|
|
returns = "()",
|
|
},
|
|
lightSetRange = {
|
|
type = "function",
|
|
description = "La portée d'une lumière ponctuelle ou d'un projecteur, en unités du monde ; 0 (la valeur par défaut) signifie aucune limite. La lumière s'éteint exactement à la portée, en plus de son atténuation avec la distance, si bien que les lumières n'apparaissent pas d'un coup quand des objets la franchissent. Une portée borne aussi jusqu'où doit aller la carte d'ombres d'une lumière qui projette des ombres, ce qui garde ses ombres nettes. Les lumières directionnelles l'ignorent. Met fin au script quand le nœud ne porte pas de lumière.\nDepuis: 3.00.",
|
|
args = "(node, range)",
|
|
returns = "()",
|
|
},
|
|
lightSetShadow = {
|
|
type = "function",
|
|
description = "Fait projeter à la lumière des ombres de tout ce qui est opaque dans la scène, ou l'en empêche ; désactivé par défaut. N'importe laquelle des huit lumières peut projeter des ombres, dans n'importe quelle combinaison. Un projecteur reçoit une carte d'ombres ; une lumière directionnelle reçoit une carte par cascade (sceneSetShadowCascades) ; une lumière ponctuelle reçoit une carte cubique de six vues, qui couvre toutes les directions (une ampoule dans une pièce) pour six fois le coût. nodeSetShadow dispense un maillage de projeter des ombres. Met fin au script quand le nœud ne porte pas de lumière.\nDepuis: 3.00.",
|
|
args = "(node, shadow)",
|
|
returns = "()",
|
|
},
|
|
lineDraw = {
|
|
type = "function",
|
|
description = "Trace une ligne droite entre deux points de l'espace du monde, par-dessus la scène, pour l'image en cours seulement, en blanc sauf si une couleur est donnée. Appelez-la à chaque image pour garder une ligne à l'écran, comme avec l'overlay. La ligne subit le test de profondeur contre la scène mais n'écrit pas la profondeur : elle se cache donc derrière les murs comme tout le reste et ne masque jamais rien. Rien n'est dessiné tant que la scène est désactivée. Elle sert à voir ce que fait un script (un lancer de rayon, un chemin, une boîte englobante) ; physicsSetDebug et navDraw dessinent par ces mêmes lignes.\nDepuis: 3.00.",
|
|
args = "(x0, y0, z0, x1, y1, z1 [, r, g, b])",
|
|
returns = "()",
|
|
},
|
|
mainBezelLoaded = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Indique si --bezel a chargé des illustrations de borne, et l'identifiant du fichier chargé. L'identifiant est le hachage FNV-1a sur 64 bits des octets du fichier, écrit sous forme de chaîne décimale, ce que rapporte Hypseus, si bien qu'un jeu qui reconnaît un bezel particulier à son numéro reconnaît ici le même fichier. Sans illustration chargée, les réponses sont false et \"0\".\nRenvoie: booléen, et l'identifiant sous forme de chaîne.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "()",
|
|
returns = "(loaded, id)",
|
|
},
|
|
materialDelete = {
|
|
type = "function",
|
|
description = "Libère le matériau et toute texture qu'il a envoyée au GPU. Chaque nœud qui était dessiné avec lui revient à l'aspect par défaut (blanc, à moitié rugueux) : réaffectez donc d'abord ces nœuds avec nodeSetMaterial s'ils doivent garder un aspect. Le handle n'est plus valide ensuite et met fin au script s'il est réutilisé. Le matériau privé qu'un nœud se crée sous nodeSetSprite ou nodeSetText appartient au nœud et ne peut pas être supprimé ; l'appel met fin au script, et c'est en retirant le sprite ou le texte qu'on le libère. Les matériaux ne coûtent pas cher ; les supprimer compte surtout pour ceux qui portaient de grandes textures.\nDepuis: 3.00.",
|
|
args = "(material)",
|
|
returns = "()",
|
|
},
|
|
materialNew = {
|
|
type = "function",
|
|
description = "Alloue un nouveau matériau et renvoie son handle. Il démarre blanc et opaque (couleur 255, 255, 255, 255), avec une rugosité de 0.5, une métallicité de 0, aucune couleur émissive, une répétition de 1, 1, un filtrage linéaire, une seule face, éclairé, et sans texture ni cartes. Réglez ce qui en diffère et passez le handle à nodeSetMesh. Les modèles chargés apportent leurs propres matériaux : celui-ci sert donc aux maillages construits par le script. Met fin au script sur une machine sans GPU utilisable.\nRenvoie: Le handle du matériau, un entier.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(material)",
|
|
},
|
|
materialSetBlend = {
|
|
type = "function",
|
|
description = "Avec true, le matériau est dessiné translucide, mélangé selon l'alpha de la couleur de base multiplié par l'alpha de la texture, après tous les maillages opaques et trié du plus éloigné au plus proche. Les maillages mélangés n'écrivent pas la profondeur : laissez-le donc à false (la valeur par défaut) pour les surfaces pleines, car un maillage opaque avec le mélange activé peut laisser transparaître ce qui est derrière lui. Servez-vous-en avec un alpha inférieur à 255 venu de materialSetColor ou une texture qui a de la transparence.\nDepuis: 3.00.",
|
|
args = "(material, blend)",
|
|
returns = "()",
|
|
},
|
|
materialSetColor = {
|
|
type = "function",
|
|
description = "Règle la couleur de base, de 0 à 255 par canal (les valeurs hors plage sont ramenées dans la plage), a valant 255 par défaut. La couleur est traitée comme du sRGB et éclairée en lumière linéaire. Quand le matériau a une texture, une vidéo ou une vue, la couleur la multiplie : le blanc laisse donc l'image telle quelle et une couleur plus sombre la teinte. L'alpha ne se voit qu'avec materialSetBlend.\nDepuis: 3.00.",
|
|
args = "(material, r, g, b [, a])",
|
|
returns = "()",
|
|
},
|
|
materialSetCutoff = {
|
|
type = "function",
|
|
description = "Jette chaque texel dont l'alpha est inférieur à cutoff et dessine le reste entièrement opaque, dans la passe éclairée comme dans la passe d'ombre, si bien qu'une carte de feuillage projette l'ombre de ses feuilles plutôt que celle de son quad. C'est le masquage alpha de glTF : contrairement à materialSetBlend, il n'a besoin d'aucun tri, mais un texel est gardé entier ou jeté, jamais mélangé. Le seuil est borné entre 0 et 1, et 0, la valeur par défaut, désactive le masquage. Un modèle chargé depuis glTF arrive avec le seuil que son fichier donne à un matériau MASK.\nDepuis: 3.00.",
|
|
args = "(material: integer, cutoff: number)",
|
|
returns = "()",
|
|
},
|
|
materialSetDoubleSided = {
|
|
type = "function",
|
|
description = "Dessine les deux faces de chaque triangle au lieu d'éliminer la face arrière. Nécessaire pour les formes ouvertes vues de dos, comme un simple meshPlane vu de dessous, un drapeau ou une carte de feuillage. Les formes fermées ont le même aspect dans les deux cas : laissez-le donc à false (la valeur par défaut) pour elles, car un matériau double face coûte du taux de remplissage et les ombres sont alors projetées par les deux faces aussi.\nDepuis: 3.00.",
|
|
args = "(material, doubleSided)",
|
|
returns = "()",
|
|
},
|
|
materialSetEmissive = {
|
|
type = "function",
|
|
description = "La lumière que la surface émet d'elle-même, de 0 à 255 par canal (les valeurs hors plage sont ramenées dans la plage), ajoutée par-dessus l'éclairage : écrans, ampoules, néons, tableaux de bord. La valeur par défaut est le noir, aucune lueur. Elle n'éclaire rien d'autre et ne projette aucune lumière ; placez un nœud de lumière au même endroit pour cela. Avec materialSetEmissiveMap, la carte indique à quels endroits de la surface cette couleur s'applique. Les surfaces émissives assez lumineuses pour franchir le seuil de sceneSetBloom rayonnent.\nDepuis: 3.00.",
|
|
args = "(material, r, g, b)",
|
|
returns = "()",
|
|
},
|
|
materialSetEmissiveMap = {
|
|
type = "function",
|
|
description = "materialSetEmissiveMap(material, sprite)\nmaterialSetEmissiveMap(material, \"file.ktx2\")\nmaterialSetEmissiveMap(material, nil)\nmaterialSetEmissiveMap(material)\nUne texture qui indique quelles parties de la surface luisent. Sa couleur est multipliée par la couleur de materialSetEmissive : réglez donc celle-ci aussi, en blanc pour utiliser les couleurs propres de la carte, ou en une teinte. L'image vient d'un sprite chargé (une copie est envoyée au GPU, si bien que le sprite peut être déchargé ensuite) ou d'un fichier .ktx2 désigné par son nom, gardé compressé sur le GPU. Avec nil ou sans second argument, la carte est retirée. Met fin au script quand la texture ne peut pas être envoyée au GPU ou que le fichier n'est pas une texture KTX2.\nDepuis: 3.00.",
|
|
args = "(material, sprite)",
|
|
returns = "()",
|
|
},
|
|
materialSetFilter = {
|
|
type = "function",
|
|
description = "La façon dont les textures du matériau sont échantillonnées. FILTER_LINEAR (la valeur par défaut) mélange les texels entre eux et les niveaux de mipmap entre eux, avec un filtrage anisotrope sur les surfaces vues sous un angle rasant. FILTER_NEAREST prend le texel le plus proche et le niveau de mipmap le plus proche, si bien que le pixel art reste net sur un quad. Chaque texture porte une chaîne de mipmaps complète, donc une texture vue en petit ne scintille jamais, dans un cas comme dans l'autre. Toute autre valeur met fin au script.\nDepuis: 3.00.",
|
|
args = "(material, filter)",
|
|
returns = "()",
|
|
},
|
|
materialSetGui = {
|
|
type = "function",
|
|
description = "materialSetGui(material, gui)\nmaterialSetGui(material, nil)\nmaterialSetGui(material)\nAffiche une interface créée par guiNew comme texture de couleur de base du matériau, mise à jour à chaque image : un moniteur, un tableau de bord de cockpit, une enseigne, avec le même document qu'un guiDraw afficherait à plat. Généralement associé à materialSetUnlit pour que la page ne soit pas ombrée par les lumières, et teinté par la couleur de base comme toute texture. Avec nil ou sans second argument, le matériau revient à sa propre texture, conservée en dessous ; supprimer l'interface fait de même. Régler une interface abandonne toute vidéo ou vue que le matériau affichait. Tant que l'interface prend les entrées, la souris ou un pistolet optique pointé sur une surface dessinée avec le matériau l'atteint par le même sondage que sceneProbeGui. Met fin au script pour un handle d'interface qui n'est pas valide.\nDepuis: 3.00.",
|
|
args = "(material, gui)",
|
|
returns = "()",
|
|
},
|
|
materialSetMetallic = {
|
|
type = "function",
|
|
description = "À quel point la surface est métallique, de 0 pour les diélectriques (peinture, plastique, bois, peau) à 1 pour les métaux, qui teintent leurs reflets et leurs réflexions de la couleur de base. La valeur par défaut est 0. Les valeurs intermédiaires servent aux mélanges et aux surfaces usées ; la plupart des matériaux veulent l'une ou l'autre extrémité. Avec materialSetMetallicRoughnessMap, le canal bleu de la carte multiplie cette valeur. Un métal a peu de choses à refléter sans un ciel venu de sceneSetSky : associez donc les deux.\nDepuis: 3.00.",
|
|
args = "(material, metallic)",
|
|
returns = "()",
|
|
},
|
|
materialSetMetallicRoughnessMap = {
|
|
type = "function",
|
|
description = "materialSetMetallicRoughnessMap(material, sprite)\nmaterialSetMetallicRoughnessMap(material, \"file.ktx2\")\nmaterialSetMetallicRoughnessMap(material, nil)\nmaterialSetMetallicRoughnessMap(material)\nUne texture qui fait varier le fini sur la surface : son canal vert multiplie la rugosité de materialSetRoughness et son canal bleu la métallicité de materialSetMetallic, comme glTF les range, si bien qu'une carte produite par un outil glTF fonctionne telle quelle. Réglez les deux facteurs sur 1 pour n'utiliser que les valeurs de la carte. L'image vient d'un sprite ou d'un fichier .ktx2 désigné par son nom ; nil ou l'absence de second argument retire la carte. Met fin au script quand la texture ne peut pas être envoyée au GPU.\nDepuis: 3.00.",
|
|
args = "(material, sprite)",
|
|
returns = "()",
|
|
},
|
|
materialSetNormalMap = {
|
|
type = "function",
|
|
description = "materialSetNormalMap(material, sprite)\nmaterialSetNormalMap(material, sprite, strength)\nmaterialSetNormalMap(material, \"file.ktx2\")\nmaterialSetNormalMap(material, \"file.ktx2\", strength)\nmaterialSetNormalMap(material, nil)\nmaterialSetNormalMap(material)\nUne carte de normales en espace tangent (le genre bleuté habituel, plat à 128, 128, 255) qui incline l'éclairage texel par texel, si bien que briques, rainures et rivets accrochent la lumière sans géométrie supplémentaire. Chaque maillage a des tangentes pour cela : celles du modèle quand le fichier en porte, sinon calculées à partir des UV. L'image vient d'un sprite ou d'un fichier .ktx2 désigné par son nom ; nil ou l'absence de second argument retire la carte. Met fin au script quand la texture ne peut pas être envoyée au GPU.\nDepuis: 3.00.",
|
|
args = "(material, sprite)",
|
|
returns = "()",
|
|
},
|
|
materialSetOccluder = {
|
|
type = "function",
|
|
description = "Fait écrire au matériau la profondeur et aucune couleur. Tout ce que le maillage couvre est caché comme si le maillage était plein, mais le maillage lui-même ne se voit pas : ce qui a été dessiné derrière lui -- un décor peint, le disque -- transparaît. C'est la doublure de quelque chose qui est dans une image mais pas dans la scène : un pilier dans une pièce peinte derrière lequel un personnage 3D doit passer, une embrasure de porte, une table. Un occulteur ne projette aucune ombre, puisque la peinture en a déjà une, et ne reçoit aucune lumière. false (la valeur par défaut) rend le matériau de nouveau ordinaire.\nDepuis: 3.00.",
|
|
args = "(material, occluder)",
|
|
returns = "()",
|
|
},
|
|
materialSetOcclusionMap = {
|
|
type = "function",
|
|
description = "materialSetOcclusionMap(material, sprite)\nmaterialSetOcclusionMap(material, sprite, strength)\nmaterialSetOcclusionMap(material, \"file.ktx2\")\nmaterialSetOcclusionMap(material, \"file.ktx2\", strength)\nmaterialSetOcclusionMap(material, nil)\nmaterialSetOcclusionMap(material)\nUne carte d'occlusion ambiante, l'occlusion dans le canal rouge (blanc pour le dégagé, sombre pour les recoins), qui assombrit la lumière ambiante et celle du ciel dans les coins et les replis. La lumière directe des nœuds de lumière n'est pas affectée, comme dans glTF. L'image vient d'un sprite ou d'un fichier .ktx2 désigné par son nom ; nil ou l'absence de second argument retire la carte. Met fin au script quand la texture ne peut pas être envoyée au GPU.\nDepuis: 3.00.",
|
|
args = "(material, sprite)",
|
|
returns = "()",
|
|
},
|
|
materialSetRoughness = {
|
|
type = "function",
|
|
description = "À quel point la surface est rugueuse, de 0 pour un reflet serré comme un miroir à 1 pour une surface mate. La valeur par défaut est 0.5. Les reflets suivent le modèle GGX : les valeurs basses donnent un petit point brillant et des réflexions du ciel nettes, les valeurs hautes un lustre large et doux et des réflexions floues. Avec materialSetMetallicRoughnessMap, le canal vert de la carte multiplie cette valeur.\nDepuis: 3.00.",
|
|
args = "(material, roughness)",
|
|
returns = "()",
|
|
},
|
|
materialSetTexture = {
|
|
type = "function",
|
|
description = "materialSetTexture(material, sprite)\nmaterialSetTexture(material, \"file.ktx2\")\nmaterialSetTexture(material, nil)\nmaterialSetTexture(material)\nUtilise l'image d'un sprite comme texture de couleur de base (une copie est envoyée au GPU, si bien que le sprite peut être déchargé ensuite), ou un fichier KTX2 désigné par son nom, gardé compressé sur le GPU dans le format par blocs dont dispose la machine (voir Textures compressées dans Scènes 3D). Avec nil ou sans second argument, la texture est retirée et le matériau ne montre que sa couleur de base. Régler une texture abandonne aussi toute vidéo ou vue que le matériau affichait. Les coordonnées de texture viennent du maillage ; les primitives plaquent une image une fois sur chaque face, et materialSetTiling la répète. Un nom qui n'est pas un fichier KTX2 met fin au script (chargez les autres images avec spriteLoad), tout comme un envoi au GPU qui échoue.\nDepuis: 3.00.",
|
|
args = "(material, sprite)",
|
|
returns = "()",
|
|
},
|
|
materialSetTiling = {
|
|
type = "function",
|
|
description = "Combien de fois les textures du matériau (la texture de base comme les cartes) se répètent sur la plage UV de 0 à 1 d'une surface, 1 et 1 par défaut. 24, 24 sur une carte de hauteurs de 120 unités de large répète une texture toutes les cinq unités. Les textures se répètent au-delà de leurs bords : l'image doit donc se raccorder proprement. Les valeurs inférieures à 1 montrent une partie de l'image ; les valeurs négatives la retournent en miroir.\nDepuis: 3.00.",
|
|
args = "(material, u, v)",
|
|
returns = "()",
|
|
},
|
|
materialSetUnlit = {
|
|
type = "function",
|
|
description = "Montre la couleur de base et la texture exactement telles qu'elles sont, en ignorant toutes les lumières, la lumière ambiante et le ciel : pour les écrans vidéo, les moniteurs qui montrent une vue, les skybox et les rendus en aplat. Le brouillard s'applique toujours. La couleur émissive et les cartes ne servent pas sur un matériau non éclairé. La valeur par défaut est false.\nDepuis: 3.00.",
|
|
args = "(material, unlit)",
|
|
returns = "()",
|
|
},
|
|
materialSetVideo = {
|
|
type = "function",
|
|
description = "Utilise le laserdisc (sans video) ou une vidéo chargée avec videoLoad comme texture de couleur de base, mise à jour à chaque image pendant la lecture. Généralement associé à materialSetUnlit pour que l'image ne soit pas teintée par les lumières. La vidéo continue de jouer, qu'elle soit aussi dessinée sur l'overlay ou non, et plusieurs matériaux peuvent montrer la même. Régler une vidéo abandonne toute texture ou vue qu'avait le matériau ; materialSetTexture la retire de nouveau.\nDepuis: 3.00.",
|
|
args = "(material [, video])",
|
|
returns = "()",
|
|
},
|
|
materialSetView = {
|
|
type = "function",
|
|
description = "materialSetView(material, view)\nmaterialSetView(material, nil)\nmaterialSetView(material)\nAffiche une vue rendue par viewNew comme texture de couleur de base du matériau, mise à jour à chaque image : un moniteur de surveillance, un rétroviseur, un portail. Généralement associé à materialSetUnlit pour que l'image ne soit pas ombrée par les lumières, et teinté par la couleur de base comme toute texture. Avec nil ou sans second argument, le matériau revient à sa propre texture, conservée en dessous. Régler une vue abandonne toute vidéo que le matériau affichait. Met fin au script pour un handle de vue qui n'est pas valide.\nDepuis: 3.00.",
|
|
args = "(material, view)",
|
|
returns = "()",
|
|
},
|
|
meshBox = {
|
|
type = "function",
|
|
description = "Une boîte de width selon X, height selon Y et depth selon Z, centrée sur l'origine. Chacune des six faces a ses quatre sommets à elle avec une normale plate, si bien que les arêtes sont ombrées nettement, et la texture est posée une fois sur chaque face. Caisses, murs, sols et carrosseries de voiture sont tous des boîtes.\nRenvoie: Le handle du maillage.\nDepuis: 3.00.",
|
|
args = "(width, height, depth)",
|
|
returns = "(mesh)",
|
|
},
|
|
meshCone = {
|
|
type = "function",
|
|
description = "Un cône dressé sur Y avec une base fermée : le cercle de base de rayon radius à -height / 2 et la pointe à height / 2. segments (24 par défaut, au moins 3) est le nombre de facettes qui en font le tour ; les côtés sont ombrés de façon lisse d'une facette à l'autre. La texture s'enroule une fois autour des côtés et est posée une fois sur la base.\nRenvoie: Le handle du maillage.\nDepuis: 3.00.",
|
|
args = "(radius, height [, segments])",
|
|
returns = "(mesh)",
|
|
},
|
|
meshCylinder = {
|
|
type = "function",
|
|
description = "Un cylindre selon Y, fermé aux deux bouts, de -height / 2 à height / 2. segments (24 par défaut, au moins 3) est le nombre de facettes qui en font le tour, ombrées de façon lisse. Pour une roue ou une pièce de monnaie, tournez le nœud de 90 degrés autour de X ou de Z pour que l'axe soit là où il vous le faut.\nRenvoie: Le handle du maillage.\nDepuis: 3.00.",
|
|
args = "(radius, height [, segments])",
|
|
returns = "(mesh)",
|
|
},
|
|
meshDelete = {
|
|
type = "function",
|
|
description = "Libère les tampons GPU du maillage et sa copie côté CPU. Les nœuds qui l'utilisaient se retrouvent sans maillage (et sans poids de morphing) et ne dessinent rien tant qu'on ne leur en donne pas un autre ; le handle devient invalide et peut être réutilisé par un constructeur ultérieur. Les maillages ne sont pas libérés quand un nœud est supprimé : supprimez donc vous-même un maillage quand plus rien ne s'en servira.\nDepuis: 3.00.",
|
|
args = "(mesh)",
|
|
returns = "()",
|
|
},
|
|
meshHeightmap = {
|
|
type = "function",
|
|
description = "Un maillage de terrain tiré d'une image en niveaux de gris, de 2 à 1025 pixels dans chaque sens : un sommet par pixel, répartis sur sizeX par sizeZ unités centrées sur le nœud, chacun élevé de la valeur du canal rouge du pixel (de 0 pour le noir à 255 pour le blanc) multipliée par sizeY, la ligne du haut de l'image étant au bord lointain (-Z). Les normales sont calculées à partir des pentes et les coordonnées de texture vont de 0 à 1 sur l'ensemble, si bien que materialSetTiling règle la répétition de la texture. Les échantillons de hauteur sont conservés : terrainGetHeight les lit, et un corps SHAPE_MESH sur le nœud devient un champ de hauteurs. Un fichier qui ne peut pas être ouvert ou décodé, une mauvaise taille ou l'absence de moteur de rendu 3D met fin au script.\nRenvoie: Le handle du maillage.\nDepuis: 3.00.",
|
|
args = "(image, sizeX, sizeY, sizeZ)",
|
|
returns = "(mesh)",
|
|
},
|
|
meshNew = {
|
|
type = "function",
|
|
description = "Construit une géométrie à partir de tables de nombres. Les tangentes que demandent les cartes de normales sont calculées pour vous, de même que des normales lisses quand normals vaut nil, en faisant la moyenne des triangles qui partagent chaque sommet. Les triangles sont de face quand leurs sommets tournent dans le sens inverse des aiguilles d'une montre, vus de l'extérieur ; donnez au matériau materialSetDoubleSided si la face arrière doit se voir. Une table de mauvaise forme, ou un indice hors de la liste des sommets, met fin au script avec un message qui dit lequel des deux.\nRenvoie: Le handle du maillage.\nDepuis: 3.00.",
|
|
args = "(positions, normals, uvs, indices)",
|
|
returns = "(mesh)",
|
|
},
|
|
meshPlane = {
|
|
type = "function",
|
|
description = "Un rectangle plat dans le plan XZ tourné vers +Y, de width selon X et depth selon Z, centré sur l'origine, avec la texture posée une fois dessus. Deux arguments donnent un seul quad. columns (et rows, qui vaut columns par défaut) le subdivisent en autant de quads dans chaque sens, ce dont un corps mou (softNew) a besoin pour se plier comme du tissu ; les deux doivent valoir au moins 1. Tournez le nœud de 90 degrés autour de X pour le dresser face à +Z. Il n'a qu'une face, sauf si son matériau est double face.\nRenvoie: Le handle du maillage.\nDepuis: 3.00.",
|
|
args = "(width, depth [, columns, rows])",
|
|
returns = "(mesh)",
|
|
},
|
|
meshSphere = {
|
|
type = "function",
|
|
description = "Une sphère de rayon radius, centrée sur l'origine, construite à partir de bandes de latitude et de longitude : segments (32 par défaut, au moins 3) autour de l'équateur et moitié moins d'un pôle à l'autre. La texture s'enroule une fois autour, v allant du pôle du haut à celui du bas. Moins de segments donnent un maillage plus léger pour des balles vues de loin ; davantage donnent une silhouette plus lisse de près.\nRenvoie: Le handle du maillage.\nDepuis: 3.00.",
|
|
args = "(radius [, segments])",
|
|
returns = "(mesh)",
|
|
},
|
|
meshTorus = {
|
|
type = "function",
|
|
description = "Un anneau couché dans le plan XZ autour de Y, centré sur l'origine : radius du centre au milieu du tube et tubeRadius le rayon du tube lui-même. segments (32 par défaut, au moins 3) font le tour de l'anneau et moitié moins (au moins 3) le tour du tube. La texture s'enroule une fois autour de l'anneau en u et une fois autour du tube en v.\nRenvoie: Le handle du maillage.\nDepuis: 3.00.",
|
|
args = "(radius, tubeRadius [, segments])",
|
|
returns = "(mesh)",
|
|
},
|
|
micCalibrate = {
|
|
type = "function",
|
|
description = "Mesure la latence du microphone : joue cinq clics par les haut-parleurs, à une fraction de seconde d'intervalle, et chronomètre le retour de chacun par le microphone. Cela prend quelques secondes ; micCalibration dit quand c'est fini. La réponse est la médiane des clics entendus, et elle est conservée pour cette machine. Faites-le dans une pièce calme, avec les haut-parleurs assez forts pour que le microphone les entende.\nRenvoie: true quand il a démarré ; false sans microphone ouvert ou sans haut-parleur pour jouer les clics.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(started)",
|
|
},
|
|
micCalibration = {
|
|
type = "function",
|
|
description = "Où en est un calibrage.\nRenvoie: state, l'un de \"idle\", \"running\", \"done\" ou \"failed\" (moins de trois des clics ont été entendus en retour), et la latence en millisecondes une fois qu'elle est connue, nil sinon.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(state, latency)",
|
|
},
|
|
micClose = {
|
|
type = "function",
|
|
description = "Arrête d'écouter, et arrête avec lui tout enregistrement et tout retour audio. Le microphone se ferme aussi quand le jeu se termine.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
micIsOpen = {
|
|
type = "function",
|
|
description = "Renvoie: true tant qu'un microphone est ouvert.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(open)",
|
|
},
|
|
micLatency = {
|
|
type = "function",
|
|
description = "Renvoie: le temps qui sépare un son produit du moment où le jeu l'entend, tel que mesuré sur cette machine par micCalibrate (à n'importe quel moment, dans n'importe quel jeu), ou réglé par micSetLatency ; nil jusque-là.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(milliseconds)",
|
|
},
|
|
micLevel = {
|
|
type = "function",
|
|
description = "Quelle était l'intensité du dernier instant entendu.\nRenvoie: la valeur RMS et la crête du dernier bloc d'échantillons, chacune de 0 à 1. Un son continu à pleine échelle donne environ 0.71 en RMS. Les deux valent 0 sans microphone ouvert.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(rms, peak)",
|
|
},
|
|
micList = {
|
|
type = "function",
|
|
description = "Renvoie: une liste des noms des microphones de cette machine, pour micOpen. Elle est refaite à chaque fois, si bien qu'un microphone branché depuis le dernier appel y apparaît.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(names)",
|
|
},
|
|
micMonitor = {
|
|
type = "function",
|
|
description = "Joue ce qu'entend le microphone par les haut-parleurs, pour qu'un chanteur s'entende par-dessus la musique. Désactivé tant qu'on ne le demande pas : sur la plupart des machines, la voix revient avec assez de retard pour être gênante, et sur un portable les haut-parleurs repassent dans le microphone. Tout ce qui attendrait plus d'un dixième de seconde avant d'être joué est abandonné plutôt qu'entendu en retard.\nRenvoie: true, ou false sans microphone ouvert ou sans haut-parleur où jouer.\nDepuis: 3.00.",
|
|
args = "(on [, volume])",
|
|
returns = "(ok)",
|
|
},
|
|
micOpen = {
|
|
type = "function",
|
|
description = "Commence à écouter le microphone désigné (pris dans micList) ou celui de la machine par défaut. Un microphone déjà ouvert est d'abord fermé.\nRenvoie: true quand il s'est ouvert.\nDepuis: 3.00.",
|
|
args = "([name])",
|
|
returns = "(opened)",
|
|
},
|
|
micPitch = {
|
|
type = "function",
|
|
description = "La note chantée, trouvée dans les 43 dernières millisecondes entendues. La fonction trouve une fondamentale entre 50 et 2000 Hz, ce qui couvre toutes les voix chantées, et répond à un hertz ou deux près sur un son pur.\nRenvoie: la fondamentale en Hz, et à quel point le son est nettement une seule note, de 0 à 1. Sans rien de voisé -- silence, souffle, toux, foule -- hz vaut 0. Convertissez les Hz en numéro de note avec 69 + 12 * math.log(hz / 440, 2) : 69 est le la au-dessus du do central, et chaque 1 vaut un demi-ton.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(hz, clarity)",
|
|
},
|
|
micRead = {
|
|
type = "function",
|
|
description = "Ce qui a été entendu depuis le dernier appel, le plus ancien en premier.\nRenvoie: une chaîne d'échantillons de 16 bits, deux octets chacun, little-endian, un canal à 48000 par seconde : il y en a #samples / 2. Lisez-en un avec string.unpack(\"<i2\", samples, n * 2 - 1). Un jeu qui ne lit rien pendant plus de huit secondes perd les plus anciens.\nDepuis: 3.00.",
|
|
args = "([max])",
|
|
returns = "(samples)",
|
|
},
|
|
micRecordStart = {
|
|
type = "function",
|
|
description = "Écrit tout ce qui est entendu à partir de maintenant dans un fichier WAV (un canal, 16 bits, 48000 par seconde) jusqu'à micRecordStop. Le nom est celui de n'importe quel fichier que le jeu a le droit d'écrire, et il va là où vont les autres fichiers écrits par le jeu.\nRenvoie: true quand le fichier a été ouvert.\nDepuis: 3.00.",
|
|
args = "(name)",
|
|
returns = "(started)",
|
|
},
|
|
micRecordStop = {
|
|
type = "function",
|
|
description = "Termine l'enregistrement.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
micSetLatency = {
|
|
type = "function",
|
|
description = "Règle la latence du microphone de cette machine, comme le fait un menu de service à partir d'une mesure prise d'une autre façon ; nil l'oublie. Elle est conservée avec les autres réglages de la machine.\nDepuis: 3.00.",
|
|
args = "(milliseconds | nil)",
|
|
returns = "()",
|
|
},
|
|
midiCloseInput = {
|
|
type = "function",
|
|
description = "Cesse d'écouter le port d'entrée. onMidiMessage n'est plus appelé. Fermer un port qui n'est pas ouvert ne fait rien.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
midiCloseOutput = {
|
|
type = "function",
|
|
description = "Libère le port de sortie. Les appels d'envoi répondent false à partir de là. Fermer un port qui n'est pas ouvert ne fait rien.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
midiControlChange = {
|
|
type = "function",
|
|
description = "Déplace un contrôleur sur le port de sortie ouvert : le volume est le contrôleur 7, le panoramique le 10, la pédale de sustain le 64.\nRenvoie: true quand le message est parti.\nDepuis: 3.00.",
|
|
args = "(channel: number, control: number, value: number)",
|
|
returns = "(sent)",
|
|
},
|
|
midiInputCount = {
|
|
type = "function",
|
|
description = "Combien de ports d'entrée MIDI a cette machine. 0 quand il n'y en a aucun, ou quand la plateforme n'a pas de MIDI du tout.\nRenvoie: un nombre.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(count)",
|
|
},
|
|
midiInputName = {
|
|
type = "function",
|
|
description = "Le nom d'un port d'entrée, pour un écran de réglages qui laisse un joueur en choisir un.\nRenvoie: une chaîne, ou nil quand l'indice ne désigne aucun port.\nDepuis: 3.00.",
|
|
args = "(index: number)",
|
|
returns = "(name)",
|
|
},
|
|
midiIsInputOpen = {
|
|
type = "function",
|
|
description = "Indique si un port d'entrée est ouvert.\nRenvoie: true ou false.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(open)",
|
|
},
|
|
midiIsOutputOpen = {
|
|
type = "function",
|
|
description = "Indique si un port de sortie est ouvert. Bon à demander avant une rafale de messages, car sinon chacun répondrait false séparément.\nRenvoie: true ou false.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(open)",
|
|
},
|
|
midiNoteOff = {
|
|
type = "function",
|
|
description = "Relâche une note sur le port de sortie ouvert. Une note laissée enfoncée sonne jusqu'à ce que quelque chose l'arrête, donc chaque midiNoteOn a besoin de l'un de ces appels.\nRenvoie: true quand le message est parti.\nDepuis: 3.00.",
|
|
args = "(channel: number, key: number)",
|
|
returns = "(sent)",
|
|
},
|
|
midiNoteOn = {
|
|
type = "function",
|
|
description = "Fait sonner une note sur le port de sortie ouvert.\nRenvoie: true quand le message est parti.\nDepuis: 3.00.",
|
|
args = "(channel: number, key: number, velocity: number)",
|
|
returns = "(sent)",
|
|
},
|
|
midiOpenInput = {
|
|
type = "function",
|
|
description = "Écoute un port d'entrée. onMidiMessage est alors appelé pour chaque message qui arrive. Le port d'entrée qui était ouvert, quel qu'il soit, est d'abord fermé.\nRenvoie: true quand le port s'est ouvert.\nDepuis: 3.00.",
|
|
args = "(index: number)",
|
|
returns = "(opened)",
|
|
},
|
|
midiOpenOutput = {
|
|
type = "function",
|
|
description = "Prend un port de sortie pour les appels d'envoi. Le port de sortie qui était ouvert, quel qu'il soit, est d'abord fermé.\nRenvoie: true quand le port s'est ouvert.\nDepuis: 3.00.",
|
|
args = "(index: number)",
|
|
returns = "(opened)",
|
|
},
|
|
midiOutputCount = {
|
|
type = "function",
|
|
description = "Combien de ports de sortie MIDI a cette machine.\nRenvoie: un nombre.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(count)",
|
|
},
|
|
midiOutputName = {
|
|
type = "function",
|
|
description = "Le nom d'un port de sortie.\nRenvoie: une chaîne, ou nil quand l'indice ne désigne aucun port.\nDepuis: 3.00.",
|
|
args = "(index: number)",
|
|
returns = "(name)",
|
|
},
|
|
midiPitchBend = {
|
|
type = "function",
|
|
description = "Infléchit la hauteur d'un canal. 8192 est le milieu, c'est-à-dire aucune inflexion ; jusqu'où vont 0 et 16383 dépend d'un réglage propre au périphérique récepteur, en général deux demi-tons.\nRenvoie: true quand le message est parti.\nDepuis: 3.00.",
|
|
args = "(channel: number, value: number)",
|
|
returns = "(sent)",
|
|
},
|
|
midiProgramChange = {
|
|
type = "function",
|
|
description = "Choisit le son que joue un canal. Les numéros sont ceux du périphérique récepteur ; sur un périphérique General MIDI, 0 est un piano à queue.\nRenvoie: true quand le message est parti.\nDepuis: 3.00.",
|
|
args = "(channel: number, program: number)",
|
|
returns = "(sent)",
|
|
},
|
|
midiRescan = {
|
|
type = "function",
|
|
description = "Cherche de nouveau les ports, pour un périphérique branché pendant que le jeu tourne. Un port ouvert reste ouvert. Les indices ne sont pas plus stables que la liste : relisez donc les noms après cet appel plutôt que de supposer que le port 2 est toujours ce qu'il était.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
midiSend = {
|
|
type = "function",
|
|
description = "sent = midiSend(byte [, byte [, byte]])\nsent = midiSend(string)\nN'importe quel message, pour ceux que les appels nommés ne couvrent pas. Avec des nombres, il les envoie tels quels, c'est-à-dire un octet de statut et jusqu'à deux octets de données -- et notez que l'octet de statut porte le canal dans ses quatre bits de poids faible, compté à partir de 0, contrairement à tous les autres appels de cette section. Avec une chaîne, il envoie la chaîne entière, et c'est ainsi que part un message système exclusif.\nRenvoie: true quand le message est parti.\nDepuis: 3.00.",
|
|
args = "(byte [, byte [, byte]])",
|
|
returns = "(sent)",
|
|
},
|
|
modelDelete = {
|
|
type = "function",
|
|
description = "Libère les maillages, les matériaux et les données analysées du modèle. Chaque instance qui en a été faite est oubliée en même temps : ses nœuds restent dans la scène (position, parent et enfants intacts) mais ne dessinent rien, ses animations s'arrêtent là où elles en sont, et un appel animation* ultérieur sur sa racine met fin au script, parce que le nœud n'est plus une instance de modèle. Supprimez les racines des instances avec nodeDelete quand vous ne voulez pas non plus des nœuds. Un handle qui n'est pas un modèle chargé met fin au script.\nDepuis: 3.00.",
|
|
args = "(model)",
|
|
returns = "()",
|
|
},
|
|
modelGetAnimations = {
|
|
type = "function",
|
|
description = "Liste les clips d'animation du modèle dans l'ordre du fichier, sous forme de table de chaînes, si bien que names[3] est le clip que joue animationPlay(node, 3). Un clip que l'exportateur a laissé sans nom donne une chaîne vide ; on peut quand même le jouer par son numéro. Un modèle sans animations donne une table vide. Un handle qui n'est pas un modèle chargé met fin au script.\nRenvoie: Une table de chaînes indicée à partir de 1.\nDepuis: 3.00.",
|
|
args = "(model)",
|
|
returns = "(names)",
|
|
},
|
|
modelInstance = {
|
|
type = "function",
|
|
description = "Construit l'arbre de nœuds du modèle sous un nouveau nœud racine, lui-même placé sous parent ou sous la racine de la scène. La racine est un nœud ordinaire : placez-la, tournez-la, mettez-la à l'échelle ou donnez-lui un parent comme à n'importe quel autre, et supprimez-la avec nodeDelete pour retirer toute l'instance. Les nœuds propres au modèle prennent leurs noms glTF (ou le nom de leur maillage quand le nœud n'a pas de nom), si bien que nodeFind(name, node) les atteint ; un maillage à plusieurs matériaux devient un nœud enfant par partie ; les lumières du fichier deviennent des lumières de la scène avec la couleur, l'intensité, la portée et le cône du fichier ; les skins sont attachés et les poids de morphing réglés. Les nœuds gardent la pose du fichier jusqu'à ce qu'une animation joue. Un handle qui n'est pas un modèle chargé ou un parent qui n'est pas un nœud met fin au script, tout comme le manque de nœuds disponibles.\nRenvoie: Le handle du nœud racine de l'instance.\nDepuis: 3.00.",
|
|
args = "(model [, parent])",
|
|
returns = "(node)",
|
|
},
|
|
modelLoad = {
|
|
type = "function",
|
|
description = "Lit un .glb par la même recherche que toute autre ressource (dossier du jeu, dossier de données, base de données empaquetée), envoie une fois ses maillages et ses matériaux au GPU, et garde son arbre de nœuds, ses skins et ses animations pour l'instanciation. Appelez-la une fois au démarrage et instanciez le handle autant de fois qu'il le faut ; charger deux fois le même fichier en fait deux copies sur le GPU. Elle a besoin de la scène 3D, donc sur une machine sans GPU adapté elle échoue comme tout autre appel 3D. Un mauvais fichier met fin au script avec un message qui nomme le problème : le fichier n'a pas pu être lu, n'est pas du glTF, renvoie à un tampon ou à une image externe, échoue à la validation, contient une primitive qui n'a pas pu être envoyée au GPU, a un skin de plus de 128 articulations, ou a un maillage skinné qui nomme une articulation numérotée 128 ou plus. Un maillage skinné qui nomme une articulation au-delà des skins qui l'utilisent se charge, de même qu'une animation dont les images clés ne peuvent pas être lues (cet échantillonneur est ignoré) ; l'un et l'autre cas sont notés dans la trace du programme. Une texture qui ne peut pas être décodée, ou une image KTX2 manquante, ne fait pas échouer le chargement ; le matériau se passe de cette carte et la trace du programme (--program) dit laquelle.\nRenvoie: Le handle du modèle, un entier.\nDepuis: 3.00.",
|
|
args = "(name)",
|
|
returns = "(model)",
|
|
},
|
|
mouseDisable = {
|
|
type = "function",
|
|
description = "Désactive l'entrée de la souris, exactement comme le fait mouseSetEnabled(false). C'est une fonction définie dans Framework.singe, conservée pour que les anciens jeux tournent sans modification.\nDepuis: 1.18 (RDG)",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
mouseEnable = {
|
|
type = "function",
|
|
description = "Active l'entrée de la souris, exactement comme le fait mouseSetEnabled(true), et, comme elle, la laisse désactivée quand Singe a été lancé avec --nomouse. C'est une fonction définie dans Framework.singe, conservée pour que les anciens jeux tournent sans modification.\nDepuis: 1.18 (RDG)",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
mouseGetName = {
|
|
type = "function",
|
|
description = "Le nom que le pilote de souris donne à un périphérique, ou nil quand aucun périphérique ne porte cet indice. C'est grâce à lui qu'on distingue deux pistolets d'une borne sur un écran de service, ce qui sinon relève de la devinette quand les deux se signalent comme souris 0 et 1. Un indice hors de 0 à 3 met fin au script.\nRenvoie: chaîne, ou nil.\nDepuis: 3.00",
|
|
args = "(mouse)",
|
|
returns = "(string)",
|
|
},
|
|
mouseGetPadding = {
|
|
type = "function",
|
|
description = "Extension Hypseus, toujours 0, pour la raison que donne controllerGetPadding. Hypseus ajoute ce décalage aux codes d'entrée que ses souris signalent en mode relatif ; les codes de Singe ne portent aucun décalage de ce genre, il n'y a donc rien à soustraire.\nRenvoie: un entier, toujours 0.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "(padding)",
|
|
},
|
|
mouseGetPosition = {
|
|
type = "function",
|
|
description = "Renvoie la dernière position signalée d'une souris en coordonnées de l'overlay, les mêmes valeurs que portait le dernier onMouseMoved de ce périphérique. En mode à une seule souris, seule la souris 0 bouge ; en mode multi-souris, chaque périphérique a sa propre position, qui part du centre de la vidéo. La position cesse d'être mise à jour tant que l'entrée de la souris est désactivée. Interrogez-la depuis onOverlayUpdate ou singeMain quand c'est plus simple que de suivre le callback. Un indice hors de 0 à 3 met fin au script.\nRenvoie: deux entiers, x et y, en coordonnées de l'overlay.\nDepuis: 2.00",
|
|
args = "(index)",
|
|
returns = "(x, y)",
|
|
},
|
|
mouseHowMany = {
|
|
type = "function",
|
|
description = "Renvoie le nombre de souris que le moteur a trouvées au démarrage, de 0 à 4. Les périphériques branchés plus tard ne sont pas comptés. Quand aucune n'a été trouvée, la souris reste désactivée. Servez-vous-en pour décider s'il faut proposer un second joueur au pistolet optique.\nRenvoie: entier, de 0 à 4.\nDepuis: 1.18 (RDG)",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
mouseHowManyReal = {
|
|
type = "function",
|
|
description = "Un alias de mouseHowMany. Hypseus compte les vraies souris à part de celles qu'il dérive d'une manette ; Singe n'a pas de souris dérivées, si bien que son compte est déjà celui des vraies.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "_hypseus_compatibility",
|
|
},
|
|
mouseSetCaptured = {
|
|
type = "function",
|
|
description = "Capture la souris, en la confinant à la fenêtre de Singe et en masquant le curseur, ou la libère et montre de nouveau le curseur. Le moteur capture la souris au démarrage, si bien que la plupart des jeux n'appellent jamais cette fonction ; un éditeur de niveaux en fenêtre ou un jeu qui veut que le curseur du bureau reste visible la libère. Le contact affecté à INPUT_GRAB dans controls.cfg bascule le même état depuis le clavier.\nDepuis: 2.00",
|
|
args = "(captured: boolean)",
|
|
returns = "()",
|
|
},
|
|
mouseSetEnabled = {
|
|
type = "function",
|
|
description = "Active ou désactive l'entrée de la souris. Quand elle est désactivée, les événements de mouvement, de bouton et de molette sont écartés avant d'atteindre le script : onMouseMoved n'est plus appelé, les boutons de la souris ne produisent plus de contacts, et mouseGetPosition continue de renvoyer la dernière position qu'il avait. Le curseur lui-même bouge toujours. L'activation respecte --nomouse : quand Singe a été lancé avec cette option, la souris reste désactivée. Un argument non booléen met fin au script.\nDepuis: 3.00",
|
|
args = "(enabled)",
|
|
returns = "()",
|
|
},
|
|
mouseSetMode = {
|
|
type = "function",
|
|
description = "Choisit la façon dont les souris sont lues. En MOUSE_SINGLE (par défaut), les événements de pointeur de la fenêtre pilotent un curseur unique signalé comme périphérique 0, les positions absolues comme les mouvements relatifs étant convertis en coordonnées de l'overlay. En MOUSE_MANY, chaque périphérique physique est lu séparément : les mouvements relatifs sont intégrés en une position propre à chaque périphérique, ramenée dans la zone de la vidéo, les périphériques absolus comme les tablettes et certains pistolets optiques sont projetés sur la vidéo, et onMouseMoved signale l'indice du périphérique. Les deux modes livrent les mêmes cinq boutons et la molette verticale sous forme de contacts. SINGLE_MOUSE et MANY_MOUSE sont acceptés comme anciennes écritures ; toute autre valeur met fin au script. --manymouse est la décision de l'utilisateur lui-même et passe avant cet appel : quand il est donné, le mode est MOUSE_MANY dès le départ et mouseSetMode(MOUSE_SINGLE) ne le désactive pas, si bien qu'on peut faire fonctionner une borne à deux pistolets de l'extérieur d'un jeu qui ne le demande jamais.\nDepuis: 1.18 (RDG)",
|
|
args = "(mode)",
|
|
returns = "()",
|
|
},
|
|
musicGetPosition = {
|
|
type = "function",
|
|
description = "Où en est l'auditeur dans une piste en cours de lecture, en secondes : la position propre du mélangeur, moins ce qui est encore en route vers les haut-parleurs -- la file du périphérique, le calibrage audio de la machine et le retard audio du jeu -- si bien qu'une image calée dessus tombe avec le son. C'est l'horloge sur laquelle animer quand la musique mène, comme dans une démo ou un jeu de rythme, et elle reste avec le morceau quelle que soit sa durée, là où compter les images ou les ticks dérive. Le mélangeur avance sa position d'un tampon à la fois, si bien qu'entre deux avancées la réponse continue avec l'horloge, jamais de plus de 50 ms, et elle avance en douceur à chaque image. Une piste en pause reste immobile. Une piste qui ne joue pas répond -1.\nRenvoie: nombre ; les secondes écoulées dans la piste, ou -1.\nDepuis: 3.00",
|
|
args = "(id: number)",
|
|
returns = "(number)",
|
|
},
|
|
musicIsPlaying = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Indique si cette piste joue, ou -- sans handle -- si une musique quelconque joue. Une piste en pause ne joue pas.\nRenvoie: booléen.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "([id])",
|
|
returns = "(boolean)",
|
|
},
|
|
musicLoad = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Charge une piste de musique par le système de fichiers virtuel et renvoie son handle. Le fichier entier est décodé d'avance, comme pour un son, si bien qu'une longue piste coûte de la mémoire, sauf un chiptune qui ne dit pas sa durée ou ce qui ferait plus de 512 Mo une fois décodé, l'un comme l'autre décodé au fil de la lecture ; le handle est valide jusqu'à musicUnload ou jusqu'à un rechargement.\nRenvoie: nombre, le handle de musique.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(filename: string)",
|
|
returns = "(number)",
|
|
},
|
|
musicPause = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Met cette piste en pause là où elle en est, ou toute la musique quand aucun handle n'est donné. musicResume la relance.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "([id])",
|
|
returns = "()",
|
|
},
|
|
musicPlay = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Joue une piste depuis son début et répond son handle, et c'est ainsi que les jeux d'Hypseus le gardent (sndHandle = musicPlay(music)) pour arrêter le morceau plus tard. loops a le même sens que celui de soundPlay : 0, la valeur par défaut, joue une fois, -1 joue indéfiniment, et N répète N fois de plus. Le nombre est ramené entre -1 et 64, comme le fait Hypseus, si bien qu'un jeu qui en demande davantage obtient ce qu'il aurait obtenu là-bas.\nRenvoie: nombre ; le handle qu'il a reçu.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(id [, loops])",
|
|
returns = "(number)",
|
|
},
|
|
musicResume = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Reprend une piste en pause, ou toute la musique en pause quand aucun handle n'est donné.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "([id])",
|
|
returns = "()",
|
|
},
|
|
musicSetVolume = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Règle le gain de toute la musique à la fois, sur l'échelle de 0 à 128 d'Hypseus, et répond le niveau retenu. Elle ne touche à rien d'autre que la musique : les effets sonores gardent ce que leur a donné soundSetVolume, et soundSetVolume laisse la musique tranquille.\nRenvoie: nombre, le niveau qui a été réglé.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(volume: number)",
|
|
returns = "(number)",
|
|
},
|
|
musicStop = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Arrête cette piste, ou toute la musique quand aucun handle n'est donné (un handle nil compte comme aucun). fadeMs la fait disparaître en fondu sur ce nombre de millisecondes au lieu de la couper ; 0, la valeur par défaut, l'arrête aussitôt. Un fondu négatif met fin au script.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "([id [, fadeMs]])",
|
|
returns = "()",
|
|
},
|
|
musicUnload = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Arrête la piste et la libère. Le handle n'est plus valide ensuite et l'utiliser met fin au script.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(id: number)",
|
|
returns = "()",
|
|
},
|
|
navAddNode = {
|
|
type = "function",
|
|
description = "Ajoute le maillage du nœud, et celui de chaque nœud situé sous lui, à la géométrie à partir de laquelle le maillage de navigation sera précalculé, tels qu'ils se trouvent dans le monde à cet instant : placez-les donc d'abord. Le nœud racine d'une instance de modèle ajoute le modèle entier, et un niveau construit à partir de primitives peut être ajouté nœud par nœud. Seule la géométrie des maillages compte : les corps, les sprites et le texte n'ajoutent rien. Met fin au script une fois que le maillage a été construit.\nDepuis: 3.00.",
|
|
args = "(nav, node)",
|
|
returns = "()",
|
|
},
|
|
navAgentDelete = {
|
|
type = "function",
|
|
description = "Retire l'agent du maillage et libère son handle ; le nœud reste où il est et n'est plus déplacé. Supprimer le maillage avec navDelete fait de même pour chaque agent qui s'y trouve. Un handle invalide met fin au script.\nDepuis: 3.00.",
|
|
args = "(agent)",
|
|
returns = "()",
|
|
},
|
|
navAgentGetVelocity = {
|
|
type = "function",
|
|
description = "La façon dont la foule déplace l'agent à cette image, en unités du monde par seconde sur chaque axe ; sa longueur va jusqu'à la vitesse de l'agent et tombe à zéro quand il s'arrête. Pour choisir entre une animation d'attente, de marche ou de course, ou pour adapter le cycle de marche au terrain parcouru.\nRenvoie: Trois nombres.\nDepuis: 3.00.",
|
|
args = "(agent)",
|
|
returns = "(x, y, z)",
|
|
},
|
|
navAgentIsArrived = {
|
|
type = "function",
|
|
description = "Indique si l'agent a atteint la dernière cible que lui a donnée navAgentMoveTo : à moins d'une fois et demie son rayon de la cible et presque arrêté. Il passe à true au moment où onNavArrived est déclenché et reste true jusqu'au prochain navAgentMoveTo ; il vaut false pour un agent qui n'a jamais été envoyé nulle part ou qui a été arrêté en chemin.\nRenvoie: Vrai ou faux.\nDepuis: 3.00.",
|
|
args = "(agent)",
|
|
returns = "(arrived)",
|
|
},
|
|
navAgentMoveTo = {
|
|
type = "function",
|
|
description = "Envoie l'agent marcher jusqu'au point du maillage le plus proche de x, y, z, en en cherchant un jusqu'à 2 unités sur les côtés et 4 vers le haut ou vers le bas. La foule planifie l'itinéraire au fil des images suivantes et guide l'agent autour des autres agents en chemin ; onNavArrived est déclenché une fois qu'il y est arrivé. Renvoie false, et laisse l'agent tel qu'il était, quand aucun point du maillage n'est assez proche ou que la foule refuse la demande. Une nouvelle cible remplace l'ancienne à tout moment.\nRenvoie: Vrai quand l'agent s'est mis en route.\nDepuis: 3.00.",
|
|
args = "(agent, x, y, z)",
|
|
returns = "(ok)",
|
|
},
|
|
navAgentNew = {
|
|
type = "function",
|
|
description = "Place sur le maillage un agent de cette taille, au point le plus proche de la position du nœud dans le monde (la position brute quand rien ne se trouve à moins de 2 unités sur les côtés et de 4 vers le haut ou vers le bas), marchant à speed unités par seconde et accélérant à 8 unités par seconde au carré. Le rayon et la hauteur sont maintenus à 0.01 ou plus, comme navNew le fait pour les siens. Dès lors, le moteur déplace le nœud le long du maillage à chaque image, dans le repère de son parent, et le fait tourner autour de Y pour qu'il regarde dans la direction où il va chaque fois qu'il se déplace à plus de 0.05 unité par seconde ; les nœuds regardent vers -Z, comme les modèles. La foule guide les agents les uns autour des autres, anticipe les virages et les tient à distance. Pour piloter un contrôleur de joueur sur le nœud au lieu de placer le nœud, voir navAgentSetPlayer. Met fin au script quand le maillage n'est pas construit ou que 128 agents s'y trouvent déjà.\nRenvoie: Le handle de l'agent, un entier.\nDepuis: 3.00.",
|
|
args = "(nav, node, radius, height, speed)",
|
|
returns = "(agent)",
|
|
},
|
|
navAgentSetPlayer = {
|
|
type = "function",
|
|
description = "Avec true, l'agent cesse de placer son nœud et transmet à la place sa vitesse, à chaque image, au contrôleur de joueur du nœud sous forme d'un playerMove (horizontal seulement), si bien que les escaliers, les pentes, les poussées et les collisions continuent de fonctionner ; avant chaque mise à jour de la foule, la position du contrôleur dans le monde est relue comme celle de l'agent, si bien qu'être bousculé hors de sa route est pris en compte par la planification. Le nœud se tourne toujours dans le sens de sa marche. Le nœud a besoin d'un contrôleur venant de playerNew, sinon rien ne bouge. Avec false, l'agent recommence à placer le nœud lui-même.\nDepuis: 3.00.",
|
|
args = "(agent, player)",
|
|
returns = "()",
|
|
},
|
|
navAgentStop = {
|
|
type = "function",
|
|
description = "Oublie la cible de l'agent : la foule cesse de le guider vers quoi que ce soit, il ralentit jusqu'à s'immobiliser là où il est, et onNavArrived n'est pas déclenché. Les autres agents le contournent toujours. Envoyez-le quelque part avec navAgentMoveTo pour qu'il reparte.\nDepuis: 3.00.",
|
|
args = "(agent)",
|
|
returns = "()",
|
|
},
|
|
navBuild = {
|
|
type = "function",
|
|
description = "Précalcule le maillage praticable à partir de tout ce que navAddNode a ajouté : les sols et les pentes jusqu'à l'angle du maillage, les marches jusqu'à sa hauteur, le rayon de l'agent étant retranché autour de chaque mur et de chaque à-pic, et tout ce qui a moins que la hauteur de l'agent au-dessus de lui étant laissé de côté. Le précalcul travaille sur des cellules larges d'un tiers du rayon de l'agent et en couvre au plus 4096 sur 4096 : un petit rayon sur un grand niveau est donc lent et peut échouer ; un dixième de seconde pour Sponza sur un ordinateur de bureau, quelques secondes sur un Raspberry Pi. La géométrie ajoutée est libérée ensuite, et plus rien ne peut être ajouté ; précalculez plutôt un autre maillage. navSave conserve le résultat. Met fin au script quand rien n'a été ajouté, que le maillage est déjà construit ou que le précalcul échoue.\nDepuis: 3.00.",
|
|
args = "(nav)",
|
|
returns = "()",
|
|
},
|
|
navDelete = {
|
|
type = "function",
|
|
description = "Libère le maillage et chaque agent qui s'y trouve ; leurs nœuds restent où ils sont. Le handle du maillage et ceux des agents sont ensuite invalides et mettent fin au script s'ils sont utilisés. L'emplacement est libre pour un nouveau navNew ou navLoad.\nDepuis: 3.00.",
|
|
args = "(nav)",
|
|
returns = "()",
|
|
},
|
|
navDraw = {
|
|
type = "function",
|
|
description = "Dessine les polygones du maillage précalculé sous forme de lignes par-dessus la scène pour cette image, en cyan sauf autre couleur, chaque polygone en éventail de triangles, si bien qu'un polygone de plus de trois côtés montre ses diagonales. Appelez-le à chaque image tant que vous regardez ; il coûte trois lignes par triangle, et un maillage qui n'est pas encore construit ne dessine rien. Pour vérifier qu'un précalcul couvre le sol et évite les meubles, avec physicsSetDebug.\nDepuis: 3.00.",
|
|
args = "(nav [, r, g, b])",
|
|
returns = "()",
|
|
},
|
|
navLoad = {
|
|
type = "function",
|
|
description = "Charge un maillage écrit par navSave, cherché d'abord parmi les fichiers du jeu (si bien qu'un maillage précalculé peut être livré avec le jeu, empaqueté ou non) puis dans le dossier de données du jeu. Le maillage revient construit, prêt pour les agents et les requêtes, et n'accepte plus de navAddNode. La pente et la marche avec lesquelles il a été précalculé sont dans le fichier ; le rayon et la hauteur de l'agent sont ceux avec lesquels la foule guide les agents, donnez donc les valeurs pour lesquelles il a été précalculé. Met fin au script quand le fichier ne peut pas être lu, n'est pas un maillage de navigation, est plus court que le maillage que décrit son en-tête (tronqué, ou modifié à la main) ou qu'aucun emplacement de maillage n'est libre.\nRenvoie: Le handle du maillage, un entier.\nDepuis: 3.00.",
|
|
args = "(name, agentRadius, agentHeight)",
|
|
returns = "(nav)",
|
|
},
|
|
navNearest = {
|
|
type = "function",
|
|
description = "Le point du maillage le plus proche d'un point donné, cherché jusqu'à 2 unités sur les côtés et 4 vers le haut ou vers le bas, ou nil quand rien n'est aussi proche. Pour ramener sur le sol un point d'apparition, un point de chute ou un clic avant de le confier à un agent, et pour trouver la hauteur du sol sous un point.\nRenvoie: Trois nombres, ou nil.\nDepuis: 3.00.",
|
|
args = "(nav, x, y, z)",
|
|
returns = "(x, y, z)",
|
|
},
|
|
navNew = {
|
|
type = "function",
|
|
description = "Commence un maillage de navigation pour des agents de ce rayon et de cette hauteur, capables de monter des marches jusqu'à maxStep unités et des pentes jusqu'à maxSlope degrés. Le rayon et la hauteur sont maintenus à 0.01 ou plus, la pente entre 0 et 89 et la marche à 0 ou plus. Le rayon fixe aussi la résolution du précalcul, une cellule en faisant le tiers : il décide donc du temps que prend navBuild et de la taille du niveau qu'il peut couvrir. Ajoutez la géométrie avec navAddNode, puis navBuild. Met fin au script quand huit maillages existent déjà.\nRenvoie: Le handle du maillage, un entier.\nDepuis: 3.00.",
|
|
args = "(agentRadius, agentHeight, maxSlope, maxStep)",
|
|
returns = "(nav)",
|
|
},
|
|
navPath = {
|
|
type = "function",
|
|
description = "Les coins du plus court chemin à pied d'un point à un autre, tous deux d'abord ramenés sur le maillage, sous forme d'une table de tables { x, y, z }, la première au départ et la dernière à l'arrivée ; jusqu'à 256 coins. Quand l'arrivée ne peut pas être atteinte, le chemin s'arrête au point accessible le plus proche en chemin, si bien que le dernier coin est toujours un endroit où un agent peut se tenir. nil quand l'une des extrémités est loin du maillage ou qu'aucun chemin n'est trouvé. Pour dessiner un itinéraire, mesurer à quelle distance se trouve quelque chose à pied, ou déplacer vous-même quelque chose le long du chemin ; les agents le font d'eux-mêmes.\nRenvoie: Une table de tables { x, y, z }, ou nil.\nDepuis: 3.00.",
|
|
args = "(nav, x0, y0, z0, x1, y1, z1)",
|
|
returns = "(points)",
|
|
},
|
|
navRandomPoint = {
|
|
type = "function",
|
|
description = "Un point au hasard sur le maillage praticable, partout où il s'étend, pour errer, éparpiller des objets à ramasser ou placer un point d'apparition. nil seulement quand le maillage n'est pas construit.\nRenvoie: Trois nombres, ou nil.\nDepuis: 3.00.",
|
|
args = "(nav)",
|
|
returns = "(x, y, z)",
|
|
},
|
|
navRaycast = {
|
|
type = "function",
|
|
description = "Indique si une marche en ligne droite d'un point à un autre quitte le maillage, contre un mur ou à un à-pic, et à quel endroit. Le départ est ramené sur le maillage ; false seul signifie que la voie est libre, ou que le départ est loin du maillage. En cas de blocage, le point est celui où la ligne franchit le bord du maillage, sa hauteur étant interpolée entre les deux extrémités. Une vérification peu coûteuse de l'existence d'un raccourci avant de demander navPath.\nRenvoie: false, ou true et le point où la marche quitte le maillage.\nDepuis: 3.00.",
|
|
args = "(nav, x0, y0, z0, x1, y1, z1)",
|
|
returns = "(blocked, x, y, z)",
|
|
},
|
|
navSave = {
|
|
type = "function",
|
|
description = "Écrit le maillage précalculé dans le dossier de données du jeu sous le nom name, pour navLoad la fois suivante, ou pour le copier dans le dossier du jeu afin de le livrer. Le maillage doit être construit. Met fin au script quand il ne l'est pas, ou quand le fichier ne peut pas être écrit.\nDepuis: 3.00.",
|
|
args = "(nav, name)",
|
|
returns = "()",
|
|
},
|
|
netTrustSystem = {
|
|
type = "function",
|
|
description = "Ajoute les certificats racines de confiance propres à la machine à un contexte client LuaSec, en plus de ce que le contexte contient déjà (normalement le Singe/cacerts.pem fourni). Une connexion établie avec ce contexte est alors vérifiée dès que l'une ou l'autre des listes connaît la racine du serveur. La liste de la machine est, dans l'ordre : le fichier ou le répertoire que désigne SSL_CERT_FILE ou SSL_CERT_DIR quand ils sont définis ; sinon, le bundle de la distribution sous Linux (le premier des six emplacements habituels qui existe), le magasin système racine sous Windows, ou les ancres système sous macOS. cacerts.local.pem, dans le dossier de données, est ajouté lui aussi quand il existe ; le moteur ne l'écrit jamais.\nDepuis: 3.00.",
|
|
args = "(context)",
|
|
returns = "(lists, report)",
|
|
},
|
|
nodeDelete = {
|
|
type = "function",
|
|
description = "Supprime le nœud et tout ce qui se trouve sous lui, en libérant chaque handle de ce sous-arbre ; un sprite ou un texte posé sur l'un d'eux est libéré aussi. Les maillages et les matériaux que dessinaient les nœuds ne sont pas touchés, puisque d'autres nœuds peuvent les partager. Si le nœud supprimé était la caméra, la scène revient à la vue par défaut. Le nœud racine ne peut pas être supprimé ; le demander met fin au script.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "()",
|
|
},
|
|
nodeFind = {
|
|
type = "function",
|
|
description = "Cherche, en profondeur d'abord, le premier nœud nommé name, en partant de root (la racine de la scène quand il est omis) et en examinant root lui-même avant ses enfants, puis le sous-arbre de chaque enfant à son tour. Renvoie nil quand rien ne correspond. Les nœuds d'un modèle portent les noms de leur fichier glTF, si bien qu'un os, un maillage ou un objet vide servant de repère placé dans Blender peut être trouvé par ce nom sous la racine de l'instance. Les noms donnés avec nodeSetName se trouvent de la même façon.\nRenvoie: Un handle de nœud, ou nil.\nDepuis: 3.00.",
|
|
args = "(name [, root])",
|
|
returns = "(node)",
|
|
},
|
|
nodeGetChildren = {
|
|
type = "function",
|
|
description = "Les enfants directs du nœud sous forme d'une table de handles, dans l'ordre où ils ont été attachés ; changer le parent d'un nœud le place à la fin de la liste de son nouveau parent. Les petits-enfants ne sont pas inclus ; procédez récursivement pour parcourir un sous-arbre entier. Une table vide signifie que le nœud n'a pas d'enfants.\nRenvoie: Une table de handles de nœuds.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(children)",
|
|
},
|
|
nodeGetMorph = {
|
|
type = "function",
|
|
description = "Le poids actuel d'une cible de morphing du maillage du nœud, désignée par son nom ou par son numéro à partir de 1, dans l'ordre où nodeGetMorphs les liste. Le nœud est celui qui porte le maillage, pas la racine d'une instance de modèle. Un nom ou un numéro que le maillage n'a pas met fin au script.\nRenvoie: Un nombre, 0 tant que rien n'a réglé la cible.\nDepuis: 3.00.",
|
|
args = "(node, nameOrIndex)",
|
|
returns = "(weight)",
|
|
},
|
|
nodeGetMorphs = {
|
|
type = "function",
|
|
description = "Les cibles de morphing du maillage du nœud sous forme d'une table de noms, dans l'ordre où le fichier les stocke ; cet ordre est la numérotation qu'acceptent nodeSetMorph et nodeGetMorph. Les exportateurs qui n'écrivent pas de noms donnent des chaînes vides, et ces cibles peuvent toujours être réglées par numéro. Un nœud sans maillage, ou un maillage sans cibles, donne une table vide.\nRenvoie: Une table de chaînes.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(names)",
|
|
},
|
|
nodeGetName = {
|
|
type = "function",
|
|
description = "Le nom du nœud : celui que lui a donné nodeSetName, ou son nom glTF pour un nœud de modèle, une chaîne vide quand il n'a ni l'un ni l'autre. Le nœud racine s'appelle root.\nRenvoie: Une chaîne.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(name)",
|
|
},
|
|
nodeGetParent = {
|
|
type = "function",
|
|
description = "Le handle du parent du nœud, ou nil pour la racine. Tout autre nœud a un parent, ne serait-ce que la racine.\nRenvoie: Un handle de nœud, ou nil.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(parent)",
|
|
},
|
|
nodeGetPosition = {
|
|
type = "function",
|
|
description = "La position du nœud relative à son parent, telle que l'ont réglée en dernier nodeSetPosition, nodeMove ou le moteur (un corps, un véhicule ou une animation qui le déplace). Pour savoir où se trouve le nœud dans le monde, utilisez nodeGetWorldPosition.\nRenvoie: Trois nombres.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(x, y, z)",
|
|
},
|
|
nodeGetQuaternion = {
|
|
type = "function",
|
|
description = "La rotation du nœud relative à son parent sous forme de quaternion unitaire, la forme que stockent les modèles et les animations. Servez-vous-en pour copier une rotation d'un nœud à l'autre ou pour garder une pose sans l'ambiguïté des angles d'Euler.\nRenvoie: Quatre nombres.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(x, y, z, w)",
|
|
},
|
|
nodeGetRotation = {
|
|
type = "function",
|
|
description = "La rotation du nœud relative à son parent sous forme d'angles d'Euler en degrés, décomposée de la même façon que nodeSetRotation la compose : tournée autour de Y, puis inclinée autour de X, puis mise en roulis autour de Z. Les angles décrivent la même rotation que celle qui a été réglée, mais pas forcément avec les mêmes nombres : X revient entre -90 et 90, et quand il atteint 90 ou -90, la torsion est donnée à Y et Z est renvoyé à 0.\nRenvoie: Trois nombres.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(x, y, z)",
|
|
},
|
|
nodeGetScale = {
|
|
type = "function",
|
|
description = "L'échelle propre du nœud sur chaque axe, telle que l'a réglée nodeSetScale (1, 1, 1 pour un nouveau nœud). Les échelles des parents n'y sont pas intégrées.\nRenvoie: Trois nombres.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(x, y, z)",
|
|
},
|
|
nodeGetWorldPosition = {
|
|
type = "function",
|
|
description = "L'endroit où se trouve l'origine du nœud dans l'espace du monde, avec la transformation de chaque parent appliquée, tel qu'à la dernière image rendue. Les changements faits à cette image (les vôtres, ou ceux d'un corps) se voient après le rendu suivant, et un nœud créé à cette image renvoie 0, 0, 0 jusque-là. C'est la position à donner à sceneProject ou à un test de distance.\nRenvoie: Trois nombres.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(x, y, z)",
|
|
},
|
|
nodeLookAt = {
|
|
type = "function",
|
|
description = "Tourne le nœud pour que son propre -Z pointe vers une position du monde, en gardant son +Y aussi proche du haut du monde que la direction le permet. C'est ce que veulent les caméras et les lumières, et cela convient aussi à une tourelle ou à une tête qui suit une cible. Seule la rotation du nœud change ; sa position reste. Si la cible coïncide avec la position du nœud, rien ne change.\nDepuis: 3.00.",
|
|
args = "(node, x, y, z)",
|
|
returns = "()",
|
|
},
|
|
nodeMove = {
|
|
type = "function",
|
|
description = "Déplace le nœud selon ses propres axes : le décalage est tourné par la rotation actuelle du nœud et ajouté à sa position, si bien que nodeMove(ship, 0, 0, -0.1) fait avancer le vaisseau dans la direction où il pointe, quelle qu'elle soit, et que nodeMove(ship, 0.1, 0, 0) le fait glisser latéralement vers la droite. Utilisez nodeSetPosition pour un emplacement absolu dans l'espace du parent.\nDepuis: 3.00.",
|
|
args = "(node, dx, dy, dz)",
|
|
returns = "()",
|
|
},
|
|
nodeNew = {
|
|
type = "function",
|
|
description = "Crée un nœud vide à l'origine de son parent, sans rotation, à l'échelle 1, visible, projetant des ombres, sans maillage ni matériau. Sans parent, le nœud va sous la racine ; avec un parent, il devient le dernier enfant de ce nœud et se déplace désormais avec lui. Les nœuds vides servent de pivots et de groupes : placez-en un, suspendez-y des maillages, des lumières ou une caméra, puis déplacez le groupe d'un seul bloc.\nRenvoie: Le handle du nœud.\nDepuis: 3.00.",
|
|
args = "([parent])",
|
|
returns = "(node)",
|
|
},
|
|
nodeRotate = {
|
|
type = "function",
|
|
description = "Tourne le nœud du nombre de degrés donné autour de ses propres axes, en plus de sa rotation actuelle : nodeRotate(wheel, 5, 0, 0) à chaque image fait tourner la roue sur son propre X, quelle que soit l'inclinaison de l'essieu. Les trois angles sont combinés comme nodeSetRotation les combine (Y, puis X, puis Z) avant d'être appliqués. Les angles positifs tournent dans le sens inverse des aiguilles d'une montre quand on regarde le long de l'axe vers l'origine.\nDepuis: 3.00.",
|
|
args = "(node, dx, dy, dz)",
|
|
returns = "()",
|
|
},
|
|
nodeSetBillboard = {
|
|
type = "function",
|
|
description = "Tourne le nœud face à la caméra à chaque image. BILLBOARD_ALL lui fait face de plein front, en prenant les trois axes de la caméra ; BILLBOARD_Y tourne autour du haut du monde seulement, si bien que le nœud reste debout (arbres, barres de vie) ; BILLBOARD_NONE, la valeur par défaut, ne tourne pas du tout. La position et l'échelle du nœud dans le monde sont conservées, et sa propre rotation est ignorée tant qu'un mode est réglé. Toute autre valeur met fin au script. Cela fonctionne sur les maillages aussi bien que sur les sprites et le texte, et se tourne vers la caméra qui dessine, quelle qu'elle soit : une vue voit elle aussi le billboard de face, tandis que son ombre suit la caméra de la fenêtre.\nDepuis: 3.00.",
|
|
args = "(node, mode)",
|
|
returns = "()",
|
|
},
|
|
nodeSetLayer = {
|
|
type = "function",
|
|
description = "Choisit où, dans la fenêtre, le nœud est dessiné. LAYER_SCENE, la valeur par défaut, le dessine dans la scène sous l'overlay ; LAYER_FRONT le dessine après l'overlay, par la même caméra avec les mêmes lumières, dans une couche transparente qui lui est propre. Un nœud de la couche avant emmène ses enfants avec lui, quel que soit leur propre réglage. Toute autre valeur met fin au script. Voir Devant l'overlay.\nDepuis: 3.00.",
|
|
args = "(node, layer)",
|
|
returns = "()",
|
|
},
|
|
nodeSetMaterial = {
|
|
type = "function",
|
|
description = "nodeSetMaterial(node, material)\nnodeSetMaterial(node, nil)\nPose un matériau sur le maillage du nœud, quel qu'il soit, en gardant le maillage. nil le retire, ce qui laisse l'aspect par défaut : blanc, à moitié rugueux, sans texture. Servez-vous-en pour changer le style d'une partie d'un modèle, pour mettre et retirer un matériau de surbrillance, ou pour habiller un maillage que le moteur a fait pour vous, comme le tube d'une corde venant de softNew. Un handle de matériau qui n'existe pas met fin au script.\nDepuis: 3.00.",
|
|
args = "(node, material)",
|
|
returns = "()",
|
|
},
|
|
nodeSetMesh = {
|
|
type = "function",
|
|
description = "Donne au nœud un maillage à dessiner, avec un matériau ou, en son absence, l'aspect par défaut (blanc, à moitié rugueux). Les deux arguments doivent être des handles valides ; un maillage ou un matériau manquant met fin au script. Tout nœud peut dessiner, y compris un nœud à l'intérieur d'une instance de modèle, et un nombre quelconque de nœuds peuvent partager un même maillage. Les poids de morphing du nœud sont dimensionnés selon les cibles du nouveau maillage et commencent à 0.\nDepuis: 3.00.",
|
|
args = "(node, mesh [, material])",
|
|
returns = "()",
|
|
},
|
|
nodeSetMorph = {
|
|
type = "function",
|
|
description = "Règle dans quelle mesure le maillage du nœud montre une cible de morphing (blend shape), désignée par son nom ou par son numéro à partir de 1 ; les poids vont en général de 0 à 1 et plusieurs cibles s'additionnent. Le nœud est celui qui porte le maillage, c'est-à-dire, pour un modèle, un enfant de la racine de l'instance (nodeFind par le nom du maillage, ou nodeGetChildren). Une cible que le maillage n'a pas met fin au script. Une animation dotée d'un canal de poids écrit les poids à chaque image tant qu'elle joue, ce qui écrase ce que vous avez réglé.\nDepuis: 3.00.",
|
|
args = "(node, nameOrIndex, weight)",
|
|
returns = "()",
|
|
},
|
|
nodeSetName = {
|
|
type = "function",
|
|
description = "Nomme le nœud pour que nodeFind puisse le trouver plus tard, en remplaçant le nom qu'il avait (y compris le nom glTF d'un nœud de modèle). Les noms n'ont pas besoin d'être uniques ; nodeFind renvoie la première correspondance dans l'ordre en profondeur d'abord.\nDepuis: 3.00.",
|
|
args = "(node, name)",
|
|
returns = "()",
|
|
},
|
|
nodeSetParent = {
|
|
type = "function",
|
|
description = "Déplace le nœud, avec tout son sous-arbre, sous un autre parent, dont il devient le dernier enfant. La position, la rotation et l'échelle locales du nœud sont gardées telles quelles, si bien qu'il se trouve maintenant à ce décalage du nouveau parent et se déplace avec lui ; passez 0 pour le ramener à la racine. La racine ne peut pas être déplacée, et un nœud ne peut aller ni sous lui-même ni sous l'un de ses propres descendants ; l'un comme l'autre met fin au script.\nDepuis: 3.00.",
|
|
args = "(node, parent)",
|
|
returns = "()",
|
|
},
|
|
nodeSetPosition = {
|
|
type = "function",
|
|
description = "Place le nœud en x, y, z dans l'espace de son parent ; pour un nœud sous la racine, c'est l'espace du monde. Les enfants suivent. Un nœud portant un corps dynamique est ensuite déplacé par la physique ; réglez sa position avant bodyNew, ou téléportez-le au moyen des appels de corps.\nDepuis: 3.00.",
|
|
args = "(node, x, y, z)",
|
|
returns = "()",
|
|
},
|
|
nodeSetQuaternion = {
|
|
type = "function",
|
|
description = "Règle la rotation du nœud relative à son parent sous forme de quaternion, pour des valeurs venant de nodeGetQuaternion, d'un modèle ou de vos propres calculs. Le quaternion est normalisé à l'entrée, si bien qu'il n'a pas besoin d'être de longueur unité.\nDepuis: 3.00.",
|
|
args = "(node, x, y, z, w)",
|
|
returns = "()",
|
|
},
|
|
nodeSetRotation = {
|
|
type = "function",
|
|
description = "Règle la rotation du nœud relative à son parent sous forme d'angles d'Euler en degrés, en remplaçant celle qu'il avait : le nœud est d'abord tourné autour de son Y (lacet), puis incliné autour de son X (tangage), puis mis en roulis autour de son Z. Les angles positifs tournent dans le sens inverse des aiguilles d'une montre quand on regarde le long de l'axe vers l'origine, si bien que nodeSetRotation(plane, 90, 0, 0) relève un plan de sol pour qu'il fasse face à +Z.\nDepuis: 3.00.",
|
|
args = "(node, x, y, z)",
|
|
returns = "()",
|
|
},
|
|
nodeSetScale = {
|
|
type = "function",
|
|
description = "nodeSetScale(node, scale)\nnodeSetScale(node, x, y, z)\nMet à l'échelle le nœud et tout ce qui se trouve sous lui, uniformément avec un seul facteur ou par axe avec trois. Les modèles chargés sont souvent en centimètres ou en mètres ; mettez une fois à l'échelle la racine de l'instance pour l'adapter à votre scène, et placez les choses sous elle dans les unités propres au modèle. Les sprites et le texte du nœud sont mis à l'échelle eux aussi, en plus de leur height.\nDepuis: 3.00.",
|
|
args = "(node, scale)",
|
|
returns = "()",
|
|
},
|
|
nodeSetShadow = {
|
|
type = "function",
|
|
description = "Indique si le maillage du nœud est dessiné dans les cartes d'ombres ; true pour tout nouveau nœud. Désactivez-le pour le maillage qui entoure une lumière (une ampoule, une flamme), afin qu'il ne fasse pas d'ombre à sa propre lumière, et pour tout ce qui brille. Le nœud se dessine toujours et reçoit toujours les ombres des autres. Cela ne s'applique qu'au nœud, pas à ses enfants.\nDepuis: 3.00.",
|
|
args = "(node, casts)",
|
|
returns = "()",
|
|
},
|
|
nodeSetSprite = {
|
|
type = "function",
|
|
description = "nodeSetSprite(node, sprite)\nnodeSetSprite(node, sprite, height)\nnodeSetSprite(node, sprite, height, lit)\nnodeSetSprite(node, nil)\nnodeSetSprite(node)\nMontre un sprite chargé sur le nœud : un quad haut de height unités du monde (1 par défaut) et aussi large que le format de l'image le veut, mélangé selon l'alpha de l'image, dessiné des deux côtés, et éclairé par la scène sauf si lit vaut false. Chaque image d'un sprite animé est envoyée et la première s'affiche ; nodeSetSpriteFrame en choisit une autre. Le quad devient le maillage du nœud, avec un matériau privé, et remplace tout maillage, sprite ou texte qu'il avait ; nil ou l'absence de second argument retire l'image et laisse le nœud vide. Met fin au script quand le moteur de rendu 3D n'est pas disponible.\nDepuis: 3.00.",
|
|
args = "(node, sprite)",
|
|
returns = "()",
|
|
},
|
|
nodeSetSpriteFrame = {
|
|
type = "function",
|
|
description = "Quelle image du sprite animé du nœud s'affiche, comptée à partir de 0. Le sprite du nœud n'avance pas tout seul ; pilotez-le depuis onOverlayUpdate. Un nœud sans sprite, ou une image qu'il n'a pas, met fin au script ; un texte et un sprite fixe n'ont que l'image 0.\nDepuis: 3.00.",
|
|
args = "(node, frame)",
|
|
returns = "()",
|
|
},
|
|
nodeSetText = {
|
|
type = "function",
|
|
description = "nodeSetText(node, text)\nnodeSetText(node, text, height)\nnodeSetText(node, nil)\nnodeSetText(node)\nMontre une ligne de texte sur le nœud, rendue dans la police sélectionnée (fontSelect), à la qualité courante (fontQuality), dans la couleur de premier plan (colorForeground), sur un quad haut de height unités du monde (1 par défaut) et aussi large que le texte rendu le veut. Il est non éclairé, mélangé et dessiné des deux côtés : étiquettes de nom, panneaux, un score au-dessus d'une table. Comme un sprite, il devient le maillage du nœud et remplace tout maillage, sprite ou texte qui s'y trouvait ; appelez-le de nouveau pour changer le texte, avec nil ou sans second argument pour le retirer. Sans police sélectionnée, ou sans le moteur de rendu 3D, il met fin au script.\nDepuis: 3.00.",
|
|
args = "(node, text)",
|
|
returns = "()",
|
|
},
|
|
nodeSetVisible = {
|
|
type = "function",
|
|
description = "Cache ou montre le nœud et tout ce qui se trouve sous lui ; l'indicateur propre d'un enfant s'applique toujours quand son parent est de nouveau montré. Les maillages cachés ne sont pas dessinés et les lumières cachées cessent de briller. Servez-vous-en pour garder prêt un marqueur ou un accessoire de rechange sans avoir à le supprimer puis le reconstruire.\nDepuis: 3.00.",
|
|
args = "(node, visible)",
|
|
returns = "()",
|
|
},
|
|
onCollision = {
|
|
type = "function",
|
|
description = "Appelé une fois pour chaque nouveau contact entre deux corps après un pas de la physique, et plus jamais pour une paire qui reste en contact. Une caisse qui atterrit, une balle qui heurte la borne, la voiture du joueur qui accroche un mur. Les contacts avec des déclencheurs sont signalés par onTrigger à la place. Les événements d'un pas sont transmis ensemble après celui-ci, avant que l'image ne soit dessinée.\nDepuis: 3.00.",
|
|
args = "(nodeA, nodeB, x, y, z, speed)",
|
|
returns = "()",
|
|
},
|
|
onControllerMoved = {
|
|
type = "function",
|
|
description = "Appelé pour chaque événement de mouvement d'axe d'une manette connectée, y compris les mouvements dans la zone morte, si bien qu'un stick sous un pouce le déclenche de nombreuses fois par seconde. Les directions au-delà de SINGE_DEAD_ZONE agissent aussi comme des contacts quand controls.cfg les affecte, si bien qu'un jeu qui n'a besoin que d'une direction tout ou rien peut affecter GAMEPAD_0.AXIS_LEFT_X_L et GAMEPAD_0.AXIS_LEFT_X_R et ignorer ce callback. La valeur est enregistrée pour controllerGetAxis avant que le callback ne s'exécute.",
|
|
args = "(axis, value, which)",
|
|
returns = "()",
|
|
},
|
|
onInputPressed = {
|
|
type = "function",
|
|
description = "Appelés quand une entrée logique s'enfonce ou se relâche. Ce qui arrive dépend du mode du clavier. En MODE_NORMAL, what est une valeur SWITCH_* : les touches, les boutons de manette, les directions d'axe au-delà de la zone morte, les boutons de la souris et la molette arrivent tous ainsi, traduits par controls.cfg, chaque appui une seule fois sans répétition des touches, et les entrées qui ne sont affectées à aucun contact sont ignorées. SWITCH_PAUSE n'arrive qu'après singeSetPauseKeyEnabled(false) ; sinon, le moteur fige le jeu sur cette touche et le script ne la voit jamais. En MODE_FULL, what est le keysym de la touche (la valeur du caractère, pas le scancode), les répétitions sont transmises, et les boutons de manette et de souris passent 0 ; chaque événement atteint aussi onKeyPressed et onKeyReleased, qui portent le scancode ou le code du bouton. Quand la touche pause fige le jeu, chaque contact que tient le script est d'abord relâché via onInputReleased, et au dégel tout ce qui est encore physiquement enfoncé est de nouveau appuyé, si bien qu'un jeu ne voit jamais l'état périmé d'un bouton. Les appuis dans la première seconde après le démarrage du script, ou après que la fenêtre a repris le focus, sont considérés comme hérités d'avant et avalés avec leur relâchement. Un contact n'arrive d'aucune commande : SWITCH_MOUSE_DISCONNECT est levé par le moteur quand une souris ou un pistolet optique est débranché, une fois comme un appui puis aussitôt une fois comme un relâchement, si bien qu'un jeu de tir au pistolet peut remarquer que son pistolet s'en va (voir Souris, pistolets, et qui décide).",
|
|
args = "(what)",
|
|
returns = "()",
|
|
anchor = "oninputpressedoninputreleased",
|
|
},
|
|
onInputReleased = {
|
|
type = "function",
|
|
description = "Appelés quand une entrée logique s'enfonce ou se relâche. Ce qui arrive dépend du mode du clavier. En MODE_NORMAL, what est une valeur SWITCH_* : les touches, les boutons de manette, les directions d'axe au-delà de la zone morte, les boutons de la souris et la molette arrivent tous ainsi, traduits par controls.cfg, chaque appui une seule fois sans répétition des touches, et les entrées qui ne sont affectées à aucun contact sont ignorées. SWITCH_PAUSE n'arrive qu'après singeSetPauseKeyEnabled(false) ; sinon, le moteur fige le jeu sur cette touche et le script ne la voit jamais. En MODE_FULL, what est le keysym de la touche (la valeur du caractère, pas le scancode), les répétitions sont transmises, et les boutons de manette et de souris passent 0 ; chaque événement atteint aussi onKeyPressed et onKeyReleased, qui portent le scancode ou le code du bouton. Quand la touche pause fige le jeu, chaque contact que tient le script est d'abord relâché via onInputReleased, et au dégel tout ce qui est encore physiquement enfoncé est de nouveau appuyé, si bien qu'un jeu ne voit jamais l'état périmé d'un bouton. Les appuis dans la première seconde après le démarrage du script, ou après que la fenêtre a repris le focus, sont considérés comme hérités d'avant et avalés avec leur relâchement. Un contact n'arrive d'aucune commande : SWITCH_MOUSE_DISCONNECT est levé par le moteur quand une souris ou un pistolet optique est débranché, une fois comme un appui puis aussitôt une fois comme un relâchement, si bien qu'un jeu de tir au pistolet peut remarquer que son pistolet s'en va (voir Souris, pistolets, et qui décide).",
|
|
args = "(what)",
|
|
returns = "()",
|
|
anchor = "oninputpressedoninputreleased",
|
|
},
|
|
onKeyPressed = {
|
|
type = "function",
|
|
description = "Appelés en MODE_FULL seulement, pour chaque touche qui s'enfonce ou se relâche, avec à la fois le keysym logique (le caractère que produit la touche dans la disposition actuelle) et le scancode physique (la position de la touche, à comparer avec la table SCANCODE). Les touches maintenues se répètent dans ce mode, ce que veut la saisie de texte. Les boutons de manette et de souris arrivent aussi, avec keysym à 0 et leur code GAMEPAD_N ou MOUSE_N comme scancode. Pour du texte, utilisez keysym ; pour des commandes où une touche sert de bouton, utilisez scancode, pour que l'affectation soit la même dans toutes les dispositions. Les affectations clavier des propres contacts du moteur n'agissent pas dans ce mode : un jeu en MODE_FULL doit donc fournir sa propre façon d'en sortir.",
|
|
args = "(keysym, scancode)",
|
|
returns = "()",
|
|
anchor = "onkeypressedonkeyreleased",
|
|
},
|
|
onKeyReleased = {
|
|
type = "function",
|
|
description = "Appelés en MODE_FULL seulement, pour chaque touche qui s'enfonce ou se relâche, avec à la fois le keysym logique (le caractère que produit la touche dans la disposition actuelle) et le scancode physique (la position de la touche, à comparer avec la table SCANCODE). Les touches maintenues se répètent dans ce mode, ce que veut la saisie de texte. Les boutons de manette et de souris arrivent aussi, avec keysym à 0 et leur code GAMEPAD_N ou MOUSE_N comme scancode. Pour du texte, utilisez keysym ; pour des commandes où une touche sert de bouton, utilisez scancode, pour que l'affectation soit la même dans toutes les dispositions. Les affectations clavier des propres contacts du moteur n'agissent pas dans ce mode : un jeu en MODE_FULL doit donc fournir sa propre façon d'en sortir.",
|
|
args = "(keysym, scancode)",
|
|
returns = "()",
|
|
anchor = "onkeypressedonkeyreleased",
|
|
},
|
|
onMidiMessage = {
|
|
type = "function",
|
|
description = "Appelé pour chaque message qui arrive sur le port d'entrée MIDI qu'a ouvert midiOpenInput, une fois par message, avec le reste des entrées de l'image. Les trois nombres sont le message tel qu'un appareil l'envoie : status porte le type dans ses quatre bits de poids fort et le canal dans ses quatre bits de poids faible, en comptant à partir de 0, si bien qu'une note sur le premier canal arrive sous la forme 0x90. bytes est le message entier sous forme de chaîne, ce dont a besoin un message système exclusif et ce qu'il faut lire pour un message de plus de trois octets.\nDepuis: 3.00.",
|
|
args = "(status: number, data1: number, data2: number, bytes: string)",
|
|
returns = "()",
|
|
},
|
|
onMouseMoved = {
|
|
type = "function",
|
|
description = "Appelé pour chaque événement de mouvement de la souris, avec la position et le déplacement depuis l'événement précédent en coordonnées de l'overlay. En mode MOUSE_SINGLE, la position du pointeur de la fenêtre est convertie en coordonnées de l'overlay et which vaut toujours 0. En mode MOUSE_MANY, le déplacement relatif de chaque périphérique est intégré en une position qui lui est propre, ramenée dans la zone de la vidéo, et which est l'indice du périphérique ; un périphérique absolu comme une tablette signale sa position projetée avec xRelative et yRelative à 0. La position est enregistrée pour mouseGetPosition avant que le callback ne s'exécute, si bien qu'un jeu peut ignorer ce callback et interroger la souris à la place. Le dessin doit quand même attendre onOverlayUpdate : gardez ici la dernière position dans des variables globales et dessinez le curseur là-bas.",
|
|
args = "(x, y, xRelative, yRelative, which)",
|
|
returns = "()",
|
|
},
|
|
onNavArrived = {
|
|
type = "function",
|
|
description = "Appelé quand un agent de navigation atteint la cible que lui a donnée navAgentMoveTo, une fois par arrivée, après la mise à jour de la navigation de l'image. Envoyez l'agent ailleurs, ou jouez son animation d'attente. Un script qui préfère interroger peut appeler navAgentIsArrived à la place.\nDepuis: 3.00.",
|
|
args = "(agent)",
|
|
returns = "()",
|
|
},
|
|
onOverlayUpdate = {
|
|
type = "function",
|
|
description = "Le seul callback où le dessin est permis. Singe l'appelle au plus une fois toutes les 15 millisecondes tant que le jeu n'est pas figé, en comptant à partir du début de l'appel précédent, si bien que le temps que prend le script lui-même est compris dans ces 15 millisecondes au lieu de s'y ajouter ; tout appel overlay*, spriteDraw, videoDraw, fontPrint ou similaire fait ailleurs n'apparaîtra pas à l'écran et risque de corrompre l'overlay. Renvoyez OVERLAY_UPDATED (1) quand l'overlay a changé, pour que Singe le compose de nouveau sur la vidéo, ou OVERLAY_NOT_UPDATED (0) quand rien n'a changé, pour que la composition précédente soit réutilisée ; ne rien renvoyer compte comme OVERLAY_NOT_UPDATED. L'affichage est de toute façon redessiné chaque fois qu'une nouvelle image vidéo arrive ou qu'une scène 3D est activée : la valeur renvoyée est donc une optimisation pour les écrans statiques. Après son retour, le moteur efface les valeurs derrière keyboardGetLastDown et keyboardGetLastUp. Dans le modèle à fil d'exécution, Framework.singe définit lui-même cette fonction pour reprendre singeMain et renvoie toujours OVERLAY_UPDATED ; ne la définissez pas en plus.\nRenvoie: OVERLAY_UPDATED ou OVERLAY_NOT_UPDATED.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
onShutdown = {
|
|
type = "function",
|
|
description = "Appelé une fois quand le script se termine, que ce soit par singeQuit, le contact de sortie, la fermeture de la fenêtre, scriptExecute ou scriptPush, après la dernière image et avant que l'état Lua ne soit abandonné. Il n'est pas appelé par singeReload. Enregistrez ici les réglages et libérez les sprites, les sons, les polices et les vidéos que le script a chargés ; le moteur arrête ensuite chaque son et libère ce qui reste, si bien qu'un handle oublié n'est pas une fuite, mais un déchargement explicite garde l'ordre d'arrêt sous le contrôle du script. N'appelez pas singeQuit depuis ici.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
onSoundCompleted = {
|
|
type = "function",
|
|
description = "Appelé avec le numéro du canal chaque fois qu'un canal s'arrête : quand son clip se termine, quand la dernière boucle finit, et quand soundStop ou soundFullStop l'interrompt, si bien qu'un script qui enchaîne des sons depuis ici doit savoir quels canaux il a arrêtés lui-même. Le mélangeur note l'arrêt sur son propre fil d'exécution et le moteur transmet le callback sur le fil d'exécution du jeu entre deux images ; pendant que la touche pause tient le jeu figé, les avis attendent, et ils sont abandonnés quand un script se termine ou se recharge. Jusqu'à 64 fins sont mises en file entre deux images ; au-delà, celles d'une même image sont perdues.",
|
|
args = "(channel)",
|
|
returns = "()",
|
|
},
|
|
onTextInput = {
|
|
type = "function",
|
|
description = "Appelé en MODE_FULL seulement, avec le texte qu'a produit un appui de touche -- un caractère ou quelques-uns, en UTF-8 -- après application de l'état de Maj et de la disposition du clavier, si bien qu'une majuscule, un guillemet ou une lettre d'une disposition non anglaise arrive tel que la personne l'a tapé. onKeyPressed donne le même appui sous forme de son keysym sans Maj et de son scancode, et c'est lui qu'il faut utiliser pour les touches qui sont des commandes ; celui-ci est celui qu'il faut utiliser pour les touches qui sont du texte. Une GUI dont un champ de texte a le focus prend le texte en premier, et le script n'en entend rien.\nDepuis: 3.00.",
|
|
args = "(text)",
|
|
returns = "()",
|
|
},
|
|
onTrigger = {
|
|
type = "function",
|
|
description = "Appelé quand un corps entre dans un déclencheur créé avec bodySetTrigger ou en sort, une fois à l'entrée et une fois à la sortie, quelles que soient les formes en jeu (un maillage ou une forme composée qui touche en plusieurs endroits compte toujours pour un seul corps). Les déclencheurs ne poussent jamais rien : c'est donc la façon de remarquer qu'un corps franchit une porte, atteint un point de contrôle ou tombe dans une zone mortelle.\nDepuis: 3.00.",
|
|
args = "(trigger, other, entered)",
|
|
returns = "()",
|
|
},
|
|
opusDecode = {
|
|
type = "function",
|
|
description = "Un paquet reconverti en échantillons. nil pour un paquet jamais arrivé demande à Opus de combler le trou avec quelque chose de plausible, de la durée du dernier paquet.\nRenvoie: les échantillons.\nDepuis: 3.00.",
|
|
args = "(decoder, packet | nil)",
|
|
returns = "(samples)",
|
|
},
|
|
opusDecoderNew = {
|
|
type = "function",
|
|
description = "Renvoie: le handle du décodeur.\nDepuis: 3.00.",
|
|
args = "([rate [, channels]])",
|
|
returns = "(decoder)",
|
|
},
|
|
opusEncode = {
|
|
type = "function",
|
|
description = "Une trame d'échantillons en un paquet. Une trame représente 2,5 ; 5 ; 10 ; 20 ; 40 ou 60 millisecondes d'échantillons. Tout le reste est refusé.\nRenvoie: le paquet, une chaîne.\nDepuis: 3.00.",
|
|
args = "(encoder, samples)",
|
|
returns = "(packet)",
|
|
},
|
|
opusEncoderNew = {
|
|
type = "function",
|
|
description = "Renvoie: le handle de l'encodeur.\nDepuis: 3.00.",
|
|
args = "([rate [, channels [, application]]])",
|
|
returns = "(encoder)",
|
|
},
|
|
opusEncoderSet = {
|
|
type = "function",
|
|
description = "Depuis: 3.00.",
|
|
args = "(encoder, bitrate [, complexity])",
|
|
returns = "()",
|
|
},
|
|
overlayBanner = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Affiche un court message par-dessus l'image pendant une trentaine d'images dessinées, puis le retire. height est l'endroit où il se place, en pourcentage de la hauteur de l'image en partant du haut, de 1 à 95 ; la valeur par défaut est 47, celle d'Hypseus lui-même, et un nombre hors de cet intervalle est remplacé par la valeur par défaut au lieu d'être refusé.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(text [, height])",
|
|
returns = "()",
|
|
},
|
|
overlayBox = {
|
|
type = "function",
|
|
description = "Dessine le contour du rectangle aligné sur les axes dont les coins opposés sont (x1, y1) et (x2, y2), sous forme de quatre lignes d'un pixel dans la couleur de premier plan. Les deux coins sont inclus et peuvent être donnés dans n'importe quel ordre. Il n'existe pas de variante pleine ; remplissez tout l'overlay avec overlayClear sur une couleur de fond, ou une zone avec un sprite étiré.\nDepuis: 2.00",
|
|
args = "(x1, y1, x2, y2)",
|
|
returns = "()",
|
|
},
|
|
overlayCircle = {
|
|
type = "function",
|
|
description = "Dessine le contour d'un cercle d'un pixel dans la couleur de premier plan, centré sur (x, y), avec l'algorithme du point milieu. Un rayon de 0 ou moins ne dessine rien. Les coordonnées et le rayon sont des entiers en unités de l'overlay ; les fractions sont tronquées.\nDepuis: 2.00",
|
|
args = "(x, y, radius)",
|
|
returns = "()",
|
|
},
|
|
overlayClear = {
|
|
type = "function",
|
|
description = "Remplit tout l'overlay avec la couleur de fond actuelle. Quand la couleur est la même que lors du dernier effacement, seul ce qui a été dessiné depuis est rempli de nouveau, si bien qu'effacer un overlay qui contient quelques lignes de texte ne coûte presque rien, quelle que soit sa taille. Le fond est au départ noir transparent : sans appel à colorBackground, cela efface donc l'overlay pour le rendre de nouveau invisible, et la vidéo apparaît au travers. Un fond partiellement opaque assombrit la vidéo ; un fond entièrement opaque la cache. La plupart des jeux l'appellent en tout premier dans onOverlayUpdate. Les arguments éventuels sont ignorés.\nDepuis: 1.x",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
overlayEllipse = {
|
|
type = "function",
|
|
description = "Dessine le contour d'une ellipse d'un pixel dans la couleur de premier plan, inscrite dans le rectangle aligné sur les axes dont les coins opposés sont (x1, y1) et (x2, y2). Les coins peuvent être donnés dans n'importe quel ordre. Un rectangle de largeur et de hauteur égales donne un cercle : c'est donc aussi le moyen de dessiner un cercle à partir de son rectangle englobant plutôt que de son centre.\nDepuis: 2.00",
|
|
args = "(x1, y1, x2, y2)",
|
|
returns = "()",
|
|
},
|
|
overlayGetFontHeight = {
|
|
type = "function",
|
|
description = "Renvoie la hauteur en pixels d'une cellule de caractère de la police de console intégrée, l'unité dans laquelle compte overlayPrint. La police de console est une seule image intégrée de 256 glyphes, chargée une fois avant l'exécution de tout script : cette valeur ne change donc jamais pendant que le programme tourne. Les arguments éventuels sont ignorés.\nRenvoie: hauteur entière d'une cellule en pixels.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
overlayGetFontWidth = {
|
|
type = "function",
|
|
description = "Renvoie la largeur en pixels d'une cellule de caractère de la police de console intégrée, l'unité dans laquelle compte overlayPrint. Utilisez-la avec overlayGetWidth pour calculer combien de colonnes tiennent, ou pour placer du texte de console par rapport à quelque chose dessiné en pixels. Divisez avec // plutôt qu'avec / : la division ordinaire de Lua donne un nombre fractionnaire, et une position de cellule doit être entière. Les arguments éventuels sont ignorés.\nRenvoie: largeur entière d'une cellule en pixels.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
overlayGetHeight = {
|
|
type = "function",
|
|
description = "Renvoie la hauteur de la surface de l'overlay en unités de l'overlay : la dernière valeur donnée à overlaySetResolution, ou la moitié de la hauteur de la vidéo avant tout appel. Lisez-la au démarrage, après avoir réglé la résolution, pour disposer les positions en fonction de la zone de dessin réelle. Les arguments éventuels sont ignorés.\nRenvoie: hauteur entière.\nDepuis: 1.x",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
overlayGetWidth = {
|
|
type = "function",
|
|
description = "Renvoie la largeur de la surface de l'overlay en unités de l'overlay : la dernière valeur donnée à overlaySetResolution, ou la moitié de la largeur de la vidéo avant tout appel. Servez-vous-en pour aligner à droite ou centrer des éléments au lieu de coder une largeur en dur. Les arguments éventuels sont ignorés.\nRenvoie: largeur entière.\nDepuis: 1.x",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
overlayLine = {
|
|
type = "function",
|
|
description = "Dessine une ligne de Bresenham d'un pixel dans la couleur de premier plan, de (x1, y1) à (x2, y2), les deux extrémités comprises. Les pixels hors de l'overlay sont abandonnés, si bien que les extrémités peuvent se trouver hors de la surface. Les coordonnées sont tronquées en entiers.\nDepuis: 2.00",
|
|
args = "(x1, y1, x2, y2)",
|
|
returns = "()",
|
|
},
|
|
overlayPlot = {
|
|
type = "function",
|
|
description = "Donne la couleur de premier plan à un pixel de l'overlay. Un point hors de la surface est ignoré. Chaque appel verrouille puis déverrouille l'overlay : tracer des milliers de points par image depuis Lua est donc lent ; utilisez un sprite pour tout ce qui a une structure et gardez ceci pour les étoiles, les étincelles et les marques de débogage.\nDepuis: 2.00",
|
|
args = "(x, y)",
|
|
returns = "()",
|
|
},
|
|
overlayPrint = {
|
|
type = "function",
|
|
description = "Affiche une chaîne avec la police de console à chasse fixe intégrée au moteur. Contrairement à tous les autres appels de dessin, la position est une cellule de caractère : le moteur multiplie column et row par la largeur et la hauteur d'un glyphe, si bien que (0, 0) est la cellule en haut à gauche et que (1, 0) se trouve un glyphe plus à droite. Les glyphes sont copiés tels quels depuis l'image de la police ; les couleurs de premier plan et de fond actuelles ne sont pas appliquées, et seul le fond propre de la police est transparent. Chaque octet de la chaîne choisit l'un des 256 glyphes de la police : le texte est donc traité comme des octets, pas comme de l'UTF-8. Les caractères qui dépasseraient le bord droit de l'overlay sont abandonnés, et un texte qui commence au-delà du bord ne dessine rien.\nDepuis: 1.x",
|
|
args = "(column, row, text)",
|
|
returns = "()",
|
|
},
|
|
overlaySetMonochrome = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Montre l'overlay en gris : avant chaque envoi, le moteur convertit une copie de l'overlay en luminance avec les coefficients BT.601, en gardant le canal alpha tel quel (Hypseus le seuille). Les pixels propres de l'overlay restent en couleur, si bien que rien de ce que le script relit ne change, et le dessin continue comme d'habitude. Associez-le à vldpSetMonochrome pour un mode noir et blanc. Un argument non booléen met fin au script.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(enabled)",
|
|
returns = "()",
|
|
},
|
|
overlaySetResolution = {
|
|
type = "function",
|
|
description = "Remplace l'overlay par une nouvelle surface de la taille donnée et abandonne tout ce qui a été dessiné jusque-là. Dès lors, chaque coordonnée de l'overlay, chaque position de sprite et chaque résultat de overlayGetWidth ou de overlayGetHeight est dans le nouvel espace, que le moteur met à l'échelle de la fenêtre au moment de l'affichage. Appelez-la une fois au démarrage, avant de dessiner ; la valeur par défaut est la moitié de la résolution de la vidéo dans chaque dimension. Une largeur ou une hauteur de 0 ou moins met fin au script avec une erreur. Une résolution plus élevée donne un placement plus fin et un texte plus net, au prix de plus de travail de composition par image ; la taille native du disque, donnée par discGetWidth et discGetHeight, est le choix courant.\nDepuis: 2.00",
|
|
args = "(width, height)",
|
|
returns = "()",
|
|
},
|
|
physicsRaycast = {
|
|
type = "function",
|
|
description = "Trouve le premier corps le long d'un rayon partant de (x, y, z) dans la direction (dx, dy, dz), à moins de maxDistance unités du monde. La direction est normalisée, si bien que n'importe quelle longueur convient, mais une direction nulle ne touche rien. Les déclencheurs et les joueurs sont touchés comme n'importe quel autre corps ; un joueur est signalé par son nœud. Avec sceneUnproject qui fournit deux points le long de la souris, c'est de la sélection ; tout droit vers le bas depuis un point, c'est une sonde de hauteur.\nRenvoie: Le nœud du corps, le point d'impact et la normale de la surface à cet endroit, ou un seul nil quand rien n'est touché.\nDepuis: 3.00.",
|
|
args = "(x, y, z, dx, dy, dz [, maxDistance])",
|
|
returns = "(node, hx, hy, hz, nx, ny, nz)",
|
|
},
|
|
physicsSet2D = {
|
|
type = "function",
|
|
description = "Avec true, les corps créés à partir de maintenant ne se déplacent qu'en X et en Y et ne tournent qu'autour de Z : le monde d'un jeu 2D, généralement en coordonnées de l'overlay, avec une gravité dirigée vers +Y pour que les choses tombent vers le bas de l'écran. Les corps déjà créés gardent leur liberté : appelez-le donc avant tout bodyNew ; false revient à la 3D complète pour les corps créés ensuite. Les joueurs sont différents : tant que le mode est actif, chaque joueur, quel que soit le moment où il a été créé, se déplace le long de X avec son Z maintenu à 0, et playerMove prend une seule valeur. Le monde 2D fonctionne sans GPU, Raspberry Pi 3 compris.\nDepuis: 3.00.",
|
|
args = "(planar)",
|
|
returns = "()",
|
|
},
|
|
physicsSetDebug = {
|
|
type = "function",
|
|
description = "Dessine ce que contient la simulation sous forme de lignes par-dessus la scène à chaque image, tant que le masque est réglé : DEBUG_SHAPES pour la forme de chaque corps mobile en fil de fer (corps mous compris, et joueurs activés en jaune), DEBUG_CONSTRAINTS pour les articulations, les articulations de ragdoll et les contraintes de véhicule avec leurs limites, DEBUG_CONTACTS pour une croix rouge là où des corps se sont rencontrés à ce pas, et DEBUG_VELOCITIES pour une ligne le long de la vitesse de chaque corps mobile. Additionnez les indicateurs ; DEBUG_ALL vaut les quatre. Les formes des corps statiques restent masquées sauf si DEBUG_STATIC est ajouté, parce qu'un maillage de niveau fait beaucoup de lignes. DEBUG_NONE le désactive, et rien n'est dessiné ni ne coûte quoi que ce soit tant qu'il est désactivé.\nDepuis: 3.00.",
|
|
args = "(mask)",
|
|
returns = "()",
|
|
},
|
|
physicsSetEnabled = {
|
|
type = "function",
|
|
description = "Met la simulation en pause avec false et la reprend avec true. Pendant la pause, aucun pas ne s'exécute : les corps dynamiques restent immobiles et gardent leurs vitesses, les corps cinématiques cessent de suivre leurs nœuds, les joueurs cessent de bouger, et aucun onCollision ni onTrigger n'est déclenché. Le temps ne s'accumule pas pendant la pause : la reprise ne rejoue donc pas les pas manqués. La pause propre du jeu fait la même chose sans cet appel ; servez-vous de celui-ci pour un menu, une cinématique ou un arrêt sur image qui laisse tourner le reste du jeu.\nDepuis: 3.00.",
|
|
args = "(enabled)",
|
|
returns = "()",
|
|
},
|
|
physicsSetGravity = {
|
|
type = "function",
|
|
description = "Règle l'accélération que ressentent tous les corps dynamiques et tous les joueurs, en unités du monde par seconde au carré selon chaque axe du monde. La valeur par défaut est 0, -9.81, 0, la gravité terrestre en mètres ; 0, 0, 0 est l'espace, et un jeu 2D en pixels de l'overlay veut quelque chose comme 0, 900, 0, puisque le Y de l'overlay va vers le bas de l'écran. La direction opposée à la gravité est « le haut » pour les joueurs : le sens dans lequel ils se tiennent debout, sautent et montent les marches.\nDepuis: 3.00.",
|
|
args = "(x, y, z)",
|
|
returns = "()",
|
|
},
|
|
playerDelete = {
|
|
type = "function",
|
|
description = "Retire le joueur ; le nœud et tout ce qui est suspendu sous lui restent où ils sont. Supprimer le nœud retire aussi son joueur, tout comme donner au nœud un corps avec bodyNew. Met fin au script quand le nœud n'a pas de joueur.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "()",
|
|
},
|
|
playerGetGround = {
|
|
type = "function",
|
|
description = "Ce sur quoi se tient le joueur, et la normale de la surface du sol à cet endroit. Le nœud est le corps sous ses pieds, praticable ou non ; il vaut nil en l'air, et la normale est alors 0, 1, 0. Servez-vous du nœud pour distinguer du sol une plateforme mobile, de la glace ou une plaque de pression, et de la normale pour pencher un modèle dans une pente.\nRenvoie: Le nœud sur lequel il se tient, ou nil, puis la normale.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(ground, nx, ny, nz)",
|
|
},
|
|
playerGetVelocity = {
|
|
type = "function",
|
|
description = "La vitesse du joueur après le dernier pas, en unités du monde par seconde selon chaque axe du monde, y compris ce que lui a donné le sol qui le porte. Lisez la composante verticale pour distinguer une montée d'une chute, ou le tout pour un bruit sourd à l'atterrissage.\nRenvoie: Trois nombres.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(x, y, z)",
|
|
},
|
|
playerIsOnGround = {
|
|
type = "function",
|
|
description = "Indique si le joueur se tient sur un sol praticable au dernier pas : une surface pas plus raide que playerSetSlope. En l'air, ou sur une pente trop raide pour être gravie, la valeur est false. C'est le même test que fait playerJump.\nRenvoie: Booléen.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(boolean)",
|
|
},
|
|
playerIsSwimming = {
|
|
type = "function",
|
|
description = "Indique si le joueur était dans l'eau au dernier pas : le milieu de sa forme sous la surface d'un volume bodySetWater. Pendant la nage, playerMove dirige selon trois axes, la gravité laisse la place à la vitesse de descente, et le courant de l'eau emporte le joueur.\nRenvoie: Booléen.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(boolean)",
|
|
},
|
|
playerJump = {
|
|
type = "function",
|
|
description = "Demande au joueur de quitter le sol à cette vitesse vers le haut, en unités du monde par seconde, au pas suivant. Ce n'est accordé que s'il y a, à cet instant, un sol praticable sous ses pieds : maintenir un bouton enfoncé ne fait donc pas rebondir le joueur, et un saut en plein air ne fait rien. Une vitesse négative est traitée comme 0. Le joueur garde sa vitesse horizontale pendant le saut, et playerMove le dirige toujours en l'air.\nRenvoie: true quand le saut a été accordé.\nDepuis: 3.00.",
|
|
args = "(node, speed)",
|
|
returns = "(jumped)",
|
|
},
|
|
playerMove = {
|
|
type = "function",
|
|
description = "playerMove(node, vx, vz)\nplayerMove(node, vx, vy, vz)\nplayerMove(node, vx)\nIndique au joueur la vitesse qu'il veut à cette image, en unités du monde par seconde. Au sol ou en l'air, les deux valeurs horizontales sont utilisées telles quelles, en plus de celle de la plateforme sur laquelle il se tient ; la composante verticale vient de la gravité, du sol et de playerJump, et vy est ignoré. Quand le joueur nage, les trois valeurs le dirigent, et l'eau amène progressivement sa vitesse vers elles selon la traînée de playerSetSwim, en coulant à la vitesse de descente quand vy vaut 0. Dans un monde 2D, un vx seul le fait avancer le long de X et tout vz est ignoré. Appelez-le à chaque image depuis onOverlayUpdate : la demande est consommée par les pas de cette image, et à une image sans demande, le joueur reste immobile.\nDepuis: 3.00.",
|
|
args = "(node, vx, vz)",
|
|
returns = "()",
|
|
},
|
|
playerNew = {
|
|
type = "function",
|
|
description = "playerNew(node, radius, height)\nplayerNew(node, SHAPE_CAPSULE, radius, height)\nplayerNew(node, SHAPE_CYLINDER, radius, height)\nplayerNew(node, SHAPE_SPHERE, radius, 0)\nplayerNew(node, SHAPE_BOX, width, height, depth)\nplayerNew(node, SHAPE_HULL)\nPlace un joueur sur le nœud, là où le nœud se trouve dans le monde à cet instant : une capsule de ce rayon et de cette hauteur totale, ou n'importe quelle forme convexe de bodyNew avec ses tailles, mise à l'échelle par l'échelle du nœud dans le monde. La forme repose sur l'origine du nœud, si bien que le nœud correspond aux pieds. Il commence avec une masse de 70 kilogrammes, une poussée de 300 newtons, une limite de pente de 45 degrés, une hauteur de marche de 0.3 mise à l'échelle de la forme, une échelle de gravité de 1 et les taux de nage par défaut. Remplace tout corps ou joueur qu'avait le nœud. Met fin au script pour SHAPE_MESH (un joueur a besoin d'une forme convexe ; utilisez SHAPE_HULL), quand la physique n'est pas disponible sur cette machine, ou quand le joueur ne peut pas être créé (une enveloppe avec trop peu de maillage, ou seize joueurs déjà présents).\nDepuis: 3.00.",
|
|
args = "(node, radius, height)",
|
|
returns = "()",
|
|
},
|
|
playerSetEnabled = {
|
|
type = "function",
|
|
description = "Avec false, le joueur quitte la simulation : son corps est retiré du monde, si bien qu'il ne bouge plus, ne tombe plus, ne pilote plus son nœud et ne bloque plus rien, onTrigger signale qu'il quitte chaque déclencheur dans lequel il se trouvait, et il est exclu du dessin de débogage. true remet le corps en place et le reprend là où se trouve le nœud. Désactivez un joueur tant qu'un ragdoll, une cinématique ou un véhicule a la main sur le personnage.\nDepuis: 3.00.",
|
|
args = "(node, enabled)",
|
|
returns = "()",
|
|
},
|
|
playerSetGravityScale = {
|
|
type = "function",
|
|
description = "Multiplie la gravité du monde pour ce seul joueur : 1 (la valeur par défaut) tombe comme tout le reste, 0 flotte sur place (une échelle, une salle en apesanteur, une monture volante), une valeur plus grande fait tomber plus vite pour une sensation de lourdeur, et une valeur plus petite donne un saut flottant. Cela ne change pas ce que fait playerJump au décollage, seulement la vitesse à laquelle le joueur redescend. Pendant la nage, la vitesse de descente de l'eau prend la place de la gravité.\nDepuis: 3.00.",
|
|
args = "(node, scale)",
|
|
returns = "()",
|
|
},
|
|
playerSetMass = {
|
|
type = "function",
|
|
description = "La masse du joueur, utilisée quand il bouscule des corps dynamiques et comme son poids sur ceux sur lesquels il se tient. La valeur par défaut est 70 kilogrammes ; les valeurs inférieures à 0.001 sont relevées à ce minimum. La masse n'a aucun effet sur la façon dont le joueur tombe ou marche, seulement sur les bousculades : associez-la donc à playerSetPush.\nDepuis: 3.00.",
|
|
args = "(node, kilograms)",
|
|
returns = "()",
|
|
},
|
|
playerSetPosition = {
|
|
type = "function",
|
|
description = "Téléporte le joueur à une position du monde, sans rien toucher en chemin, et l'arrête net. Le nœud se déplace avec lui et garde sa rotation. Servez-vous-en pour l'apparition, la réapparition et les transitions de niveau ; déplacer plutôt le nœud avec nodeSetPosition laisse le joueur où il était, et le nœud est ramené au pas suivant.\nDepuis: 3.00.",
|
|
args = "(node, x, y, z)",
|
|
returns = "()",
|
|
},
|
|
playerSetPush = {
|
|
type = "function",
|
|
description = "La force avec laquelle le joueur bouscule les corps dynamiques qu'il heurte en marchant, en newtons. La valeur par défaut, 300, déplace les caisses et les ballons mais pas les armoires ; 0 contourne tout comme si c'était statique. Les valeurs négatives sont ramenées à 0. Le bodySetMass propre d'un corps décide de ce qu'une force donnée peut déplacer.\nDepuis: 3.00.",
|
|
args = "(node, strength)",
|
|
returns = "()",
|
|
},
|
|
playerSetSlope = {
|
|
type = "function",
|
|
description = "La pente la plus raide que le joueur gravit, en degrés depuis l'horizontale ; un sol plus raide ne compte pas comme un appui, si bien que le joueur glisse dessus et ne peut pas en sauter. La valeur par défaut est 45, et la valeur est bornée entre 0 et 89. Une valeur basse fait des collines des obstacles, une valeur élevée laisse le joueur gravir presque tout ce qui n'est pas un mur.\nDepuis: 3.00.",
|
|
args = "(node, degrees)",
|
|
returns = "()",
|
|
},
|
|
playerSetStep = {
|
|
type = "function",
|
|
description = "La plus haute marche que le joueur monte sans sauter, en unités du monde ; tout ce qui est plus haut est un mur le long duquel il glisse. La valeur par défaut est 0.3 pour une forme dont la plus petite demi-taille est 0.3 (une capsule de rayon 0.3), et elle s'adapte à la forme, si bien qu'un joueur de 30 pixels dans un monde 2D commence à 30 pixels. La même distance est celle jusqu'à laquelle le joueur reste collé au sol en passant le rebord d'une marche, si bien qu'une marche plus haute le garde aussi collé au sol dans les descentes. Les valeurs négatives sont ramenées à 0.\nDepuis: 3.00.",
|
|
args = "(node, height)",
|
|
returns = "()",
|
|
},
|
|
playerSetSwim = {
|
|
type = "function",
|
|
description = "Règle le comportement du joueur dans l'eau : à quelle vitesse il coule, en unités du monde par seconde, quand playerMove ne demande aucun mouvement vertical (0.3 par défaut), et à quelle rapidité l'eau amène sa vitesse vers ce que demande playerMove, sous forme de taux par seconde (2 par défaut, si bien que l'essentiel de l'écart a disparu en une seconde ; 0 ne change jamais la vitesse). Les deux valeurs sont ramenées à 0 au minimum. Un plongeur lourd coule vite avec une forte traînée ; un bouchon ne coule pas du tout.\nDepuis: 3.00.",
|
|
args = "(node, sinkSpeed, drag)",
|
|
returns = "()",
|
|
},
|
|
playerSetVelocity = {
|
|
type = "function",
|
|
description = "Règle la vitesse entière du joueur, en unités du monde par seconde selon chaque axe du monde, et abandonne toute demande playerMove faite à cette image. C'est la composante verticale qui dure : une vitesse vers le haut décolle le joueur du sol et il retombe sous l'effet de la gravité, ce qui donne un tremplin ou un rebond. La composante horizontale ne tient que jusqu'au pas suivant, où elle est remplacée par ce que demande playerMove (rien, quand il n'est pas appelé), parce qu'un joueur n'a pas d'élan horizontal propre. Un recul ou une ruée se fait donc ici avec une poussée vers le haut plus une vitesse playerMove fournie au fil des images suivantes.\nDepuis: 3.00.",
|
|
args = "(node, x, y, z)",
|
|
returns = "()",
|
|
},
|
|
ragdollActivate = {
|
|
type = "function",
|
|
description = "Confie le squelette à la physique à partir de sa pose actuelle : chaque couche d'animation du nœud s'arrête, une capsule dynamique est créée pour chaque os là où se trouve son articulation à cet instant, les articulations swing-twist sont créées entre elles, et dès lors chaque pas de physique pilote les nœuds des articulations à partir des corps, si bien que le maillage skinné suit. Les os entrent en collision avec le monde et entre eux, sauf chaque os avec son parent. La pose à ce moment-là est celle vers laquelle tire ragdollSetStrength. Un ragdoll déjà actif est laissé tel quel. Met fin au script quand le corps d'un os ne peut pas être créé.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "()",
|
|
},
|
|
ragdollApplyImpulse = {
|
|
type = "function",
|
|
description = "Ajoute une impulsion en newtons-secondes, selon les axes du monde, au corps de l'os qui commence à l'articulation nommée : le coup de poing, le tir, l'explosion. Le ragdoll doit être actif : appelez donc d'abord ragdollActivate, puis poussez. Renvoie false, et ne fait rien, quand le ragdoll n'est pas actif ou quand aucun os ne porte ce nom (les articulations terminales ne sont pas des os) ; le nom est comparé sans tenir compte de la casse.\nRenvoie: Vrai quand l'os a été trouvé et que le ragdoll était actif.\nDepuis: 3.00.",
|
|
args = "(node, jointName, x, y, z)",
|
|
returns = "(hit)",
|
|
},
|
|
ragdollDeactivate = {
|
|
type = "function",
|
|
description = "Supprime les corps et les articulations et rend le squelette. Les nœuds des articulations gardent la pose dans laquelle le ragdoll les a laissés, et rien ne les déplace tant qu'aucune animation ne joue ; un animationPlay avec un fondu part de cette pose en mélangeant, si bien qu'un personnage à terre peut se relever. La recette reste, si bien que ragdollActivate peut reprendre la main plus tard à partir de l'endroit où l'animation a amené le squelette. Ne fait rien à un ragdoll qui n'est pas actif.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "()",
|
|
},
|
|
ragdollDelete = {
|
|
type = "function",
|
|
description = "Supprime le ragdoll : ses corps et ses articulations s'il est actif, puis la recette. Les nœuds des articulations restent là où la physique les a laissés, si bien que le modèle reste couché tel qu'il est tombé jusqu'à ce qu'une animation le déplace, et le nœud est libre pour un nouveau ragdollNew. Un nœud sans ragdoll met fin au script.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "()",
|
|
},
|
|
ragdollIsActive = {
|
|
type = "function",
|
|
description = "Indique si la physique pilote le squelette en ce moment : true de ragdollActivate jusqu'à ragdollDeactivate ou ragdollDelete. Un nœud sans ragdoll met fin au script.\nRenvoie: Vrai ou faux.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(active)",
|
|
},
|
|
ragdollIsResting = {
|
|
type = "function",
|
|
description = "Indique si le corps de chaque os s'est mis en sommeil, ce que fait la physique quand un corps est resté immobile un moment. false tant que le ragdoll n'est pas actif : cela ne permet donc pas de distinguer un modèle inactif d'un modèle qui s'est immobilisé ; vérifiez aussi ragdollIsActive.\nRenvoie: Vrai ou faux.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(resting)",
|
|
},
|
|
ragdollNew = {
|
|
type = "function",
|
|
description = "Cherche dans le nœud et sous lui le premier maillage skinné et construit une recette de ragdoll à partir de son squelette : chaque articulation qui a une articulation enfant devient un os, une capsule allant de l'articulation vers ses enfants, reliée à l'os le plus proche au-dessus d'elle par une articulation swing-twist limitée à 45 degrés de balancement et à 30 de torsion. Les articulations sans articulation enfant, comme le bout des doigts et le bout d'une queue, suivent leur os parent et ne peuvent pas être nommées dans les autres appels. Rien n'est encore simulé : le modèle continue de s'animer jusqu'à ragdollActivate. L'appeler de nouveau sur le même nœud abandonne d'abord l'ancien ragdoll. Met fin au script quand la physique n'est pas disponible, quand aucun maillage skinné doté d'os ne se trouve sous le nœud, ou quand huit ragdolls existent déjà.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "()",
|
|
},
|
|
ragdollSetJoint = {
|
|
type = "function",
|
|
description = "Règle la recette d'un os. Les valeurs sont lues quand les corps sont créés : appelez-le donc avant ragdollActivate ; un ragdoll déjà actif garde ses corps jusqu'à ce qu'il soit désactivé puis activé de nouveau. Le rayon 0 demande la capsule automatique, 0,22 fois la longueur de l'os et jamais plus fine que 0.02 unité. Le balancement est le demi-angle du cône dans lequel l'os peut se déplacer par rapport à son parent, la torsion jusqu'où il peut tourner autour de son propre axe ; les deux sont bornés entre 0 et 179. Seuls les os peuvent être nommés, pas les articulations terminales ; le nom est comparé sans tenir compte de la casse, et un nom qui ne correspond à aucun os met fin au script.\nDepuis: 3.00.",
|
|
args = "(node, jointName, radius, swingDegrees, twistDegrees)",
|
|
returns = "()",
|
|
},
|
|
ragdollSetStrength = {
|
|
type = "function",
|
|
description = "Motorise chaque articulation avec un moteur qui tire vers la pose dans laquelle le ragdoll a été activé, limité à ce nombre de newtons-mètres ; 0 (par défaut) coupe les moteurs et le corps devient mou. Les moteurs sont des ressorts à 4 Hz, à amortissement critique. La valeur peut être réglée avant l'activation ou pendant que le ragdoll bouge, et prend effet au pas suivant. Cela ne remet pas un corps debout, puisque rien ne prend appui sur le sol : quelques dizaines de newtons-mètres changent une chute en titubement et permettent à un personnage à terre de ramener ses membres.\nDepuis: 3.00.",
|
|
args = "(node, strength)",
|
|
returns = "()",
|
|
},
|
|
random = {
|
|
type = "lib",
|
|
description = "En outre, Framework.singe redéfinit random = { new = math.random } pour que les scripts d'avant 2.00 qui utilisent random.new() fonctionnent toujours. Le nouveau code doit utiliser math.random directement.",
|
|
childs = {
|
|
new = {
|
|
type = "function",
|
|
description = "",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
},
|
|
},
|
|
ratioGetX = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Renvoie le nombre donné avec --xratio, ou 0 quand l'option n'a pas été utilisée. Les jeux au pistolet optique écrits pour Hypseus le lisent et étirent avec lui leurs propres coordonnées de pistolet, pour une borne dont l'écran n'a pas la forme dans laquelle la vidéo a été masterisée -- 1.33 fait correspondre une dalle 16:9 à une vidéo 4:3. Singe ne l'applique à rien ; c'est le jeu qui fait le calcul, exactement comme dans Hypseus, et c'est pourquoi chaque jeu qui le lit traite 0 et tout ce qui est inférieur à 1 comme 1.\nRenvoie: nombre.\nDepuis: 3.00 (Hypseus)",
|
|
args = "()",
|
|
returns = "(number)",
|
|
},
|
|
ratioGetY = {
|
|
type = "function",
|
|
description = "Extension Hypseus. La moitié verticale de la paire : le nombre donné avec --yratio, ou 0 quand l'option n'a pas été utilisée. Voir ratioGetX.\nRenvoie: nombre.\nDepuis: 3.00 (Hypseus)",
|
|
args = "()",
|
|
returns = "(number)",
|
|
},
|
|
rewriteStatus = {
|
|
type = "function",
|
|
description = "Fonction bouchon qui renvoie false. Dans Hypseus, elle indique si les chemins des ressources sont réécrits pour une installation -espath ; le système de fichiers virtuel de Singe trouve les fichiers d'un jeu là où ils ont été installés, si bien que rien n'est réécrit et que le jeu garde son propre dossier de ressources.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "_hypseus_compatibility",
|
|
},
|
|
saveClear = {
|
|
type = "function",
|
|
description = "Oublie tout et écrit la sauvegarde vide. Pour la « remise à zéro des meilleurs scores » d'un menu de service.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
saveDelete = {
|
|
type = "function",
|
|
description = "Retire une clé. Supprimer une clé qui n'a jamais existé n'est pas une erreur.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "(key)",
|
|
returns = "()",
|
|
},
|
|
saveFlush = {
|
|
type = "function",
|
|
description = "Écrit la sauvegarde tout de suite plutôt qu'à la fin de l'image. Utilisez-la après quelque chose que vous seriez désolé de perdre -- un nouveau meilleur score sur une borne qu'on éteint à la prise.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
saveGet = {
|
|
type = "function",
|
|
description = "Ce qui a été sauvegardé sous cette clé. Quand rien ne l'a été, c'est la valeur par défaut qui revient, ou nil quand il n'y en a pas -- c'est ainsi qu'on distingue un premier lancement des suivants.\nRenvoie: la valeur sauvegardée, la valeur par défaut ou nil.\nDepuis: 3.00.",
|
|
args = "(key [, default])",
|
|
returns = "(value)",
|
|
},
|
|
saveGetAll = {
|
|
type = "function",
|
|
description = "Une copie de toute la sauvegarde, pour la lecture : l'afficher en entier pendant le débogage, ou parcourir des clés dont le jeu ne connaît pas les noms d'avance. Modifier ce qui revient ne change rien -- c'est saveSetAll qui écrit une table entière.\nRenvoie: une table ; vide quand rien n'a été sauvegardé.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(everything)",
|
|
},
|
|
saveSet = {
|
|
type = "function",
|
|
description = "Garde une valeur jusqu'à ce que le jeu soit désinstallé. L'écriture a lieu à la fin de l'image : régler vingt clés dans une boucle n'écrit donc qu'un seul fichier.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "(key, value)",
|
|
returns = "()",
|
|
},
|
|
saveSetAll = {
|
|
type = "function",
|
|
description = "Remplace toute la sauvegarde par cette table, en une seule étape. Les clés qui existaient et ne sont pas dans la table que vous donnez disparaissent.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "(everything: table)",
|
|
returns = "()",
|
|
},
|
|
sceneEnable = {
|
|
type = "function",
|
|
description = "Active ou désactive la couche 3D. Les nœuds, les maillages et les matériaux peuvent être construits avant qu'elle soit active et survivent à sa désactivation ; seul le dessin s'arrête. Met fin au script quand on l'active sans GPU utilisable (voir Scènes 3D) : un jeu qui a une solution de repli en 2D interroge donc d'abord singeCapabilities().SCENE. Dans les deux cas, l'affichage se rafraîchit à l'image suivante.\nDepuis: 3.00.",
|
|
args = "(enabled)",
|
|
returns = "()",
|
|
},
|
|
sceneGetSize = {
|
|
type = "function",
|
|
description = "La taille de la couche, qui est la résolution de l'overlay : l'espace dans lequel travaillent sceneProject et sceneUnproject, et la taille à laquelle la scène est rendue. Changez-la avec overlaySetResolution. Avant que la couche ait reçu une taille, les deux valeurs valent 0.\nRenvoie: Deux entiers, la largeur et la hauteur en coordonnées de l'overlay.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(width, height)",
|
|
},
|
|
sceneGetStats = {
|
|
type = "function",
|
|
description = "Les chiffres de la dernière image pour la caméra de la fenêtre : les maillages rassemblés pour le dessin, combien d'entre eux étaient dans le champ de la caméra, les appels de dessin qu'ils sont devenus après instanciation, et la mémoire de textures que tient la scène, en kilo-octets. Pour la mise au point : une scène avec des centaines de drawn mais une poignée de calls partage bien ses maillages, et un textureKB qui ne tiendra pas dans la mémoire d'un Raspberry Pi réclame des textures KTX2. Les vues rendues ne comptent pas.\nRenvoie: Quatre entiers.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(total, drawn, calls, textureKB)",
|
|
},
|
|
sceneMeasure = {
|
|
type = "function",
|
|
description = "sceneMeasure(on)\nms = sceneMeasure(false)\nChronomètre la scène 3D. sceneMeasure(true) démarre : chaque image qui suit attend que le GPU ait fini la scène et additionne ce temps, si bien que ce qui est mesuré est le travail plutôt que la cadence de l'affichage. sceneMeasure(false) arrête et renvoie le nombre moyen de millisecondes par image, ou nil quand aucune image n'a été dessinée. L'attente coûte de la fréquence d'images : chronométrez donc quelques secondes, pas une partie entière.\nRenvoie: rien au démarrage ; un nombre ou nil à l'arrêt.\nDepuis: 3.00.",
|
|
args = "(on)",
|
|
returns = "(ms)",
|
|
},
|
|
sceneProbeGui = {
|
|
type = "function",
|
|
description = "Quelle GUI se trouve sur la surface sous un point de l'overlay, et à quel endroit de celle-ci : un rayon qui part de la caméra et passe par le point, avec la caméra de la dernière image rendue, lancé contre les triangles de chaque nœud visible dont le matériau affiche une GUI (materialSetGui), les coordonnées de texture de l'impact le plus proche donnant l'endroit sur la GUI. Renvoie le handle de la GUI et le pixel dans les coordonnées propres à cette GUI (0, 0 en haut à gauche, guiGetWidth, guiGetHeight en bas à droite), ou nil seul quand le point n'est sur aucune de ces surfaces, que la scène est désactivée ou que rien n'a encore été rendu. Le moteur pose la même question quand la souris ou un pistolet optique vise la scène alors qu'une GUI qui accepte les entrées est sur une surface et que rien de dessiné à plat ne se trouve sous le pointeur : les clics sur un moniteur dans la scène n'ont donc besoin d'aucun script ; l'appel sert au jeu qui veut la réponse lui-même, pour une visée laser, un effet de survol ou un test.\nRenvoie: Un entier et deux entiers, ou nil.\nDepuis: 3.00.",
|
|
args = "(sx, sy)",
|
|
returns = "(gui, x, y)",
|
|
},
|
|
sceneProject = {
|
|
type = "function",
|
|
description = "Où tombe un point du monde en coordonnées de l'overlay, avec la caméra de la dernière image rendue. depth vaut 0 au plan proche et 1 au plan lointain, pour trier des étiquettes ou les estomper avec la distance. inFront vaut false quand le point est derrière la caméra, et x et y n'ont alors aucun sens ; avant que la première image ait été rendue, il n'y a rien contre quoi projeter, et toutes les valeurs reviennent à 0 avec inFront à false. Les points situés devant mais hors de la vue reviennent avec des coordonnées au-delà des bords de l'overlay : vérifiez-les donc avec sceneGetSize avant de dessiner. L'usage habituel est une étiquette de nom ou une barre de vie dessinée avec fontPrint ou spriteDraw au-dessus d'un objet 3D.\nRenvoie: Deux nombres, un nombre et un booléen.\nDepuis: 3.00.",
|
|
args = "(wx, wy, wz)",
|
|
returns = "(x, y, depth, inFront)",
|
|
},
|
|
sceneSetAmbient = {
|
|
type = "function",
|
|
description = "De la lumière venue de partout, de 0 à 255 par canal, traitée comme du sRGB ; par défaut, un gris sombre de 26, 26, 26. Elle éclaircit les faces qu'aucune lumière n'atteint pour qu'elles ne soient pas noires, et materialSetOcclusionMap l'assombrit dans les creux. Quand un ciel est réglé et que sceneSetEnvironment est actif, la lumière du ciel remplace cette valeur.\nDepuis: 3.00.",
|
|
args = "(r, g, b)",
|
|
returns = "()",
|
|
},
|
|
sceneSetAntialias = {
|
|
type = "function",
|
|
description = "Active ou désactive le multiéchantillonnage 4x ; il est actif par défaut partout où le GPU le propose pour les formats de la couche, et absent sans bruit là où il ne le propose pas. Le désactiver fait gagner de la vitesse sur un Raspberry Pi. Les cibles de rendu sont reconstruites aussitôt : appelez-la donc pendant la mise en place plutôt qu'à chaque image.\nDepuis: 3.00.",
|
|
args = "(antialias)",
|
|
returns = "()",
|
|
},
|
|
sceneSetBackground = {
|
|
type = "function",
|
|
description = "La couleur à laquelle la couche est effacée à chaque image, de 0 à 255 par canal. a vaut 255 quand il est omis, une toile de fond opaque ; en dessous de 255, la vidéo transparaît, et 0 (le choix habituel pour un jeu avec un disque) rend le fond entièrement transparent. Tant qu'elle n'est pas appelée, la couche est effacée en noir transparent. Un ciel de sceneSetSky est dessiné par-dessus le fond : la vidéo ne transparaît donc plus tant qu'un ciel est réglé.\nDepuis: 3.00.",
|
|
args = "(r, g, b [, a])",
|
|
returns = "()",
|
|
},
|
|
sceneSetBloom = {
|
|
type = "function",
|
|
description = "Un halo autour de tout ce qui est plus lumineux que threshold, pris dans la lumière linéaire de la scène avant l'exposition et la courbe de tons (où 1 est le blanc), puis rajouté avec la force strength. Par défaut, le seuil vaut 1 et la force 0, donc pas de bloom ; de 0.2 à 0.4, c'est discret, 1 fait une brume. Le halo est flouté sur une chaîne de passes à demi-taille, si bien qu'il coûte peu, et seule la caméra de la fenêtre en bénéficie : les vues rendues s'en passent. Les valeurs négatives sont ramenées à 0.\nDepuis: 3.00.",
|
|
args = "(threshold, strength)",
|
|
returns = "()",
|
|
},
|
|
sceneSetEnvironment = {
|
|
type = "function",
|
|
description = "Indique si le ciel réglé par sceneSetSky éclaire la scène : sa lumière diffuse venue de toutes les directions à la place de sceneSetAmbient, et ses reflets sur les métaux et les surfaces brillantes, nets sur un miroir et de plus en plus flous à mesure que la rugosité augmente. Actif par défaut, si bien qu'un ciel éclaire la scène dès qu'il est réglé ; false ne garde le ciel que comme toile de fond, et la lumière ambiante uniforme revient. Sans ciel, cela n'a aucun effet.\nDepuis: 3.00.",
|
|
args = "(lit)",
|
|
returns = "()",
|
|
},
|
|
sceneSetExposure = {
|
|
type = "function",
|
|
description = "Éclaircit ou assombrit toute la scène en diaphragmes photographiques, de -10 à 10 (les valeurs hors plage sont ramenées dans la plage) : 1 double la lumière, -1 la divise par deux. La valeur par défaut est 0. Elle est appliquée après le bloom et avant la courbe de tons : une scène lumineuse à 2 se tasse donc vers le blanc au lieu d'être écrêtée, et une grotte et une plage peuvent partager les mêmes lumières. Animez-la pour une adaptation lente quand on passe de l'intérieur à la lumière du jour.\nDepuis: 3.00.",
|
|
args = "(stops)",
|
|
returns = "()",
|
|
},
|
|
sceneSetFog = {
|
|
type = "function",
|
|
description = "Un brouillard de distance : dégagé jusqu'à near unités de la caméra, entièrement de la couleur du brouillard à far et au-delà, sur les maillages (y compris ceux qui ne sont pas éclairés) comme sur les particules ; les particules additives s'estompent au lieu de virer au gris. Sans argument, ou avec un far qui n'est pas plus grand que near, il n'y a pas de brouillard. Le ciel n'est pas embrumé : choisissez donc une couleur proche de son horizon, ou du fond quand il n'y a pas de ciel. Tout autre nombre d'arguments met fin au script.\nDepuis: 3.00.",
|
|
args = "([r, g, b, near, far])",
|
|
returns = "()",
|
|
},
|
|
sceneSetShadowCascades = {
|
|
type = "function",
|
|
description = "En combien de cartes l'ombre d'une lumière directionnelle est découpée le long de la vue, de 1 à 4 (les valeurs hors plage sont ramenées dans la plage ; la valeur par défaut est 3). Chaque cascade couvre une tranche de la vue de la caméra jusqu'à sceneSetShadowDistance, la tranche la plus proche étant la plus petite, si bien que les ombres proches de la caméra sont nettes quelle que soit la taille du niveau. 1 ajuste une seule carte à toute la scène, ce qui convient aux petites scènes, et c'est toujours ce qui sert avec une caméra orthographique. Chaque cascade ajoute une passe d'ombre pour chaque lumière directionnelle qui projette des ombres ; 2 est un choix raisonnable sur un Raspberry Pi.\nDepuis: 3.00.",
|
|
args = "(count)",
|
|
returns = "()",
|
|
},
|
|
sceneSetShadowDistance = {
|
|
type = "function",
|
|
description = "Jusqu'où les ombres en cascades portent depuis la caméra, en unités du monde ; la valeur par défaut est 60 et les valeurs inférieures à 1 sont ramenées à 1. Au-delà, une lumière directionnelle ne projette aucune ombre. Des distances plus courtes rendent chaque cascade plus nette, puisque les mêmes cartes couvrent moins de terrain : réglez-la donc à peu près à la distance où le joueur peut encore distinguer une ombre. Elle ne compte qu'avec plus d'une cascade sous une caméra en perspective.\nDepuis: 3.00.",
|
|
args = "(distance)",
|
|
returns = "()",
|
|
},
|
|
sceneSetShadowSize = {
|
|
type = "function",
|
|
description = "Le nombre de texels par côté de chaque carte d'ombres, cascade et face de cube, de 256 à 4096 (les valeurs hors plage sont ramenées dans la plage ; la valeur par défaut est 1024). Plus c'est grand, plus c'est net et lent, en mémoire comme en temps, puisque chaque lumière qui projette des ombres a ses propres cartes à cette taille. 2048 convient à un ordinateur de bureau, 512 à un Raspberry Pi. Les cartes sont reconstruites à l'image suivante.\nDepuis: 3.00.",
|
|
args = "(size)",
|
|
returns = "()",
|
|
},
|
|
sceneSetSky = {
|
|
type = "function",
|
|
description = "sceneSetSky(file)\nsceneSetSky(nil)\nsceneSetSky()\nEnveloppe la scène dans un panorama équirectangulaire : un .hdr Radiance (tel que le fournissent les sites HDRI, en gardant sa plage), ou un PNG, un JPEG ou toute autre image que lit SDL_image, décodée depuis le sRGB. Le nom est relatif au jeu, comme pour spriteLoad. Le ciel est dessiné derrière tout le reste à la place de la couleur de fond (la vidéo ne transparaît donc plus) et éclaire la scène sauf avec sceneSetEnvironment(false). Son centre fait face à -Z et son haut est en haut. Il est rééchantillonné dans un cube d'au plus 1024 texels par face : une image de 2048 sur 1024 suffit donc largement, et les plus grandes prennent un moment à préparer sur un Raspberry Pi. Sans argument, ou avec nil, le ciel est retiré. Met fin au script quand le fichier ne peut pas être lu ou que la 3D n'est pas disponible.\nDepuis: 3.00.",
|
|
args = "(file)",
|
|
returns = "()",
|
|
},
|
|
sceneSetSkyIntensity = {
|
|
type = "function",
|
|
description = "La luminosité du ciel et de la lumière qu'il répand, 1 tel qu'il a été chargé ; les valeurs négatives sont ramenées à 0. Utile pour atténuer un ciel PNG trop lumineux, pour faire d'un ciel .hdr la lumière principale de la scène, ou pour faire apparaître et disparaître le ciel en fondu. Elle multiplie le ciel lui-même, contrairement à sceneSetExposure, qui met tout à l'échelle.\nDepuis: 3.00.",
|
|
args = "(scale)",
|
|
returns = "()",
|
|
},
|
|
sceneSetTonemap = {
|
|
type = "function",
|
|
description = "La courbe qui fait passer la lumière linéaire de la scène à l'écran, appliquée après l'exposition. TONEMAP_NEUTRAL (la valeur par défaut) garde des couleurs fidèles et ne tasse que la lumière la plus vive ; TONEMAP_ACES est la courbe cinématographique, avec plus de contraste et une transition plus chaude vers le blanc ; TONEMAP_NONE écrête au blanc. Les matériaux vidéo, les surfaces non éclairées et le ciel passent par la même courbe : un jeu dont le disque doit apparaître exactement tel qu'il a été filmé veut donc TONEMAP_NONE avec une exposition de 0. Toute autre valeur met fin au script.\nDepuis: 3.00.",
|
|
args = "(curve)",
|
|
returns = "()",
|
|
},
|
|
sceneUnproject = {
|
|
type = "function",
|
|
description = "Le point du monde situé à distance unités le long du rayon qui passe par un pixel de l'overlay, avec la caméra de la dernière image rendue. Deux distances donnent un rayon pour désigner un objet avec physicsRaycast ; une seule place un objet « là où le joueur a cliqué ». Avant que la première image ait été dessinée, elle renvoie l'origine.\nRenvoie: Trois nombres, le point du monde.\nDepuis: 3.00.",
|
|
args = "(sx, sy, distance)",
|
|
returns = "(x, y, z)",
|
|
},
|
|
scoreBegin = {
|
|
type = "function",
|
|
description = "Annonce qu'une partie commence. Facultatif, mais utile : voir plus bas.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "onlinescores",
|
|
},
|
|
scoreBezelClear = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Vide chaque afficheur du panneau des scores : les crédits, les deux scores et les deux nombres de vies n'affichent plus rien du tout, ne laissant que les chiffres atténués derrière eux. Les valeurs ne sont pas oubliées, mais le prochain scoreBezelCredits, scoreBezelScore ou scoreBezelLives rallume le panneau avec ce qu'il contient alors. Peut être appelé sans risque quand le panneau est éteint.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
scoreBezelCredits = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Règle l'afficheur des crédits, qui a deux chiffres. Rallume aussi un panneau que scoreBezelClear a vidé.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(credits: integer)",
|
|
returns = "()",
|
|
},
|
|
scoreBezelEnable = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Affiche ou masque le panneau des scores. Le premier true le construit à partir du scoreBezel.rml propre au jeu, à côté de son script, quand il y en a un, ou sinon à partir de Singe/scoreBezel.rml ; le masquer et l'afficher de nouveau ensuite ne coûte rien et conserve ses valeurs. Il démarre masqué, ce qui est aussi le cas d'Hypseus à sa livraison, si bien qu'un jeu qui n'appelle jamais ceci se comporte exactement comme avant -- et devrait interroger scoreBezelGetState avant de supposer qu'il en a un.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(enabled [, type: integer])",
|
|
returns = "()",
|
|
},
|
|
scoreBezelGetState = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Indique si le panneau des scores est affiché. Chaque jeu Hypseus pose cette question avant d'utiliser le panneau et dessine son propre afficheur de scores avec des sprites quand la réponse est false, ce qui est le bon repli et non un échec.\nRenvoie: booléen.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "()",
|
|
returns = "(boolean)",
|
|
},
|
|
scoreBezelLives = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Règle l'afficheur des vies d'un joueur, qui a un chiffre. player vaut 1 ou 2 ; tout autre nombre est ignoré, et 2 l'est aussi tant que scoreBezelTwinScoreOn(true) n'a pas mis les afficheurs du second joueur sur le panneau. Rallume aussi un panneau que scoreBezelClear a vidé.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(player, lives: integer)",
|
|
returns = "()",
|
|
},
|
|
scoreBezelScore = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Règle l'afficheur du score d'un joueur, qui a six chiffres. player vaut 1 ou 2, avec la même règle pour 2 que scoreBezelLives. Rallume aussi un panneau que scoreBezelClear a vidé.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(player, score: integer)",
|
|
returns = "()",
|
|
},
|
|
scoreBezelTwinScoreOn = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Met sur le panneau les afficheurs de score et de vies du second joueur, ou les retire et laisse la place aux deux autres. Les désactiver vide aussi le panneau, exactement comme dans Hypseus, alors faites suivre d'une valeur si les afficheurs du premier joueur doivent rester allumés. Tant qu'ils sont désactivés, scoreBezelScore(2, ...) et scoreBezelLives(2, ...) ne font rien. Un argument non booléen met fin au script.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(enabled)",
|
|
returns = "()",
|
|
},
|
|
scoreBoard = {
|
|
type = "function",
|
|
description = "Récupère le tableau. onDone(ok, result) avec result.top (une liste de {name, value}), result.standing (la value de ce joueur, son rank et le nombre de joueurs, players), et result.order, \"highest\" ou \"lowest\", le sens dans lequel le tableau classe. Une borne qui n'est pas connectée peut aussi le récupérer : voir plus bas.",
|
|
args = "(onDone [, board])",
|
|
returns = "()",
|
|
anchor = "onlinescores",
|
|
},
|
|
scoreGameId = {
|
|
type = "function",
|
|
description = "Le GAME_ID du jeu, tiré de son entrée games.dat, ou nil s'il n'en a pas. Un jeu qui n'en a pas peut être joué, mais pas classé.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "onlinescores",
|
|
},
|
|
scoreLowestWins = {
|
|
type = "function",
|
|
description = "Annonce qu'un tableau classe le score le plus bas en premier. Appelez-le avant le premier score du tableau.",
|
|
args = "([board])",
|
|
returns = "()",
|
|
anchor = "onlinescores",
|
|
},
|
|
scorePlayerName = {
|
|
type = "function",
|
|
description = "Le nom sous lequel cette borne envoie ses scores, ou nil si aucun n'a été choisi.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "onlinescores",
|
|
},
|
|
scoreSignedIn = {
|
|
type = "function",
|
|
description = "Indique si cette borne est connectée à un compte en ligne.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "onlinescores",
|
|
},
|
|
scoreSubmit = {
|
|
type = "function",
|
|
description = "Met un score en file d'attente. Renvoie false si la borne n'est pas connectée ou si le jeu n'a pas de GAME_ID.",
|
|
args = "(value [, board [, meta]])",
|
|
returns = "()",
|
|
anchor = "onlinescores",
|
|
},
|
|
scoreUpdate = {
|
|
type = "function",
|
|
description = "Une fois par image, depuis onOverlayUpdate. Rien n'avance sans lui.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "onlinescores",
|
|
},
|
|
scoreWaiting = {
|
|
type = "function",
|
|
description = "Combien de scores sont en file d'attente et pas encore envoyés.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "onlinescores",
|
|
},
|
|
scriptExecute = {
|
|
type = "function",
|
|
description = "Remplace le script en cours par celui que décrit la table. Le script en cours s'arrête à la fin de cette image et onShutdown s'exécute ; la main ne lui revient jamais, et quand le nouveau script quitte, le moteur passe à ce qui reste dans la file ou se ferme. Les clés chaînes que connaît le moteur sont SCRIPT, CONTAINER, VIDEO, STRETCH, NO_MOUSE, RESOLUTION_X, RESOLUTION_Y, SINDEN_GUN, AUDIO_TRACK, AUDIO_DELAY, LEGACY_SPRITE_ARGS, CANVAS_X et CANVAS_Y ; les autres clés sont ignorées et les clés qui ne sont pas des chaînes sont sautées. Une valeur SCRIPT, CONTAINER ou VIDEO qui n'est pas une chaîne met fin au script, de même qu'un argument qui n'est pas une table.\nDepuis: 2.00",
|
|
args = "(config)",
|
|
returns = "()",
|
|
},
|
|
scriptPush = {
|
|
type = "function",
|
|
description = "Démarre le script que décrit la table et met la configuration en cours dans la file derrière lui : quand le nouveau script quitte, le script en cours repart donc du début. Rien n'est conservé en place : le onShutdown du script en cours s'exécute maintenant, son état Lua est jeté, et l'exécution suivante repart de zéro, ce qui explique pourquoi Menu.singe sauvegarde sa sélection dans un fichier avant d'empiler. La table prend les mêmes clés que scriptExecute.\nDepuis: 2.00",
|
|
args = "(config)",
|
|
returns = "()",
|
|
},
|
|
setOverlayFullAlpha = {
|
|
type = "function",
|
|
description = "Extension Hypseus, acceptée et ignorée. Hypseus copie son overlay avec le canal alpha seuillé à 128, si bien qu'un pixel à moitié transparent est soit entièrement opaque, soit absent, et cet appel lui demande d'envoyer plutôt la surface telle qu'elle est et de la mélanger correctement. L'overlay de Singe a toujours été en RGBA complet avec un véritable alpha par pixel : ce que cet appel demande est donc déjà en vigueur.\nRenvoie: rien.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
setOverlayLinearScale = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Choisit comment l'overlay est filtré sur son chemin vers la fenêtre. Avec true, la valeur par défaut et celle que rétablit un rechargement, il est échantillonné linéairement, si bien qu'un overlay de basse résolution s'adoucit au lieu de faire apparaître des blocs ; avec false, c'est le pixel le plus proche qui est pris, ce qui garde nets le pixel art, les contours d'un pixel et le petit texte. Le linéaire est la valeur par défaut parce que c'est ainsi que toutes les versions de Singe ont dessiné l'overlay ; Hypseus prend par défaut le pixel le plus proche, si bien qu'un jeu venu d'Hypseus qui n'appelle jamais ceci paraîtra un peu plus doux jusqu'à ce qu'il le fasse. Rien ne change dans le dessin, seulement la mise à l'échelle finale de la résolution de l'overlay vers la fenêtre, si bien que tout ce qui se trouve sur l'overlay -- les primitives, les polices, les sprites et la couche 3D -- passe ensemble par ce seul filtre, et que l'image du disque, derrière, n'est pas touchée. Le réglage survit à overlaySetResolution, qui remplace l'overlay. Un argument non booléen met fin au script.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(enabled)",
|
|
returns = "()",
|
|
},
|
|
setOverlayOnTop = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Choisit si l'overlay et les GUI dessinées par-dessus l'image sont au-dessus ou en dessous des illustrations du bezel. Seules les illustrations dessinées devant l'image (--bezelflip) peuvent se trouver au-dessus d'elles ; avec les illustrations derrière -- ce qui est le cas par défaut -- cela ne change donc rien. false est le réglage avec lequel un jeu démarre, et la valeur par défaut d'Hypseus lui-même. Il est conservé jusqu'au rechargement du script.\nRenvoie: booléen, indiquant si des illustrations sont chargées, et leur identifiant sous forme de chaîne (\"0\" quand il n'y en a pas).\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(enabled: boolean)",
|
|
returns = "(loaded, id)",
|
|
},
|
|
setOverlayOpacity = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Le degré d'opacité de l'overlay entier, de 0 (invisible) à 255 (tel que le jeu l'a dessiné). Il multiplie l'alpha que portent déjà les pixels propres de l'overlay, si bien qu'un sprite à moitié transparent reste deux fois moins opaque que le reste ; il ne change pas le contenu de l'overlay, et rien n'a besoin d'être redessiné.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(alpha: number)",
|
|
returns = "()",
|
|
},
|
|
setOverlayResolution = {
|
|
type = "function",
|
|
description = "Un alias de overlaySetResolution. Hypseus enregistre une même fonction sous les deux noms.",
|
|
args = "(width, height)",
|
|
returns = "()",
|
|
anchor = "_hypseus_compatibility",
|
|
},
|
|
setOverlaySize = {
|
|
type = "function",
|
|
description = "overlaySetResolution avec une taille choisie : 1 est la taille de la vidéo du disque, 3 est 360x240, 4 est la taille donnée (ignorée quand elle manque, comme dans Hypseus) et toute autre valeur, 2 compris, est la moitié du disque sur les deux axes. Sans disque, discGetWidth et discGetHeight donnent la taille du canevas, qui est ce dans quoi dessine un jeu sans disque.",
|
|
args = "(preset [, width, height])",
|
|
returns = "()",
|
|
anchor = "_hypseus_compatibility",
|
|
},
|
|
singeCapabilities = {
|
|
type = "function",
|
|
description = "Ce que cette machine peut faire tourner. La table a une entrée par nom de capacité que peut utiliser une liste REQUIRES de games.dat (SCENE, GUI, SHADOWS, POST, SKIN, MORPH), chacune true ou false, plus tier : la classe de performances mesurée de la machine, de 0 (pas de 3D) à 3 (un GPU de bureau), ou nil avant que le menu l'ait mesurée. Un jeu pose la question pour pouvoir se passer de quelque chose plutôt que d'être refusé faute de l'avoir.\nRenvoie: une table.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(capabilities)",
|
|
},
|
|
singeDisablePauseKey = {
|
|
type = "function",
|
|
description = "Donne la touche pause au script, exactement comme le fait singeSetPauseKeyEnabled(false). C'est une fonction définie dans Framework.singe, conservée pour que les anciens jeux tournent sans modification.\nDepuis: 1.18 (RDG)",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
singeEnablePauseKey = {
|
|
type = "function",
|
|
description = "Rend la touche pause au moteur, exactement comme le fait singeSetPauseKeyEnabled(true). C'est une fonction définie dans Framework.singe, conservée pour que les anciens jeux tournent sans modification.\nDepuis: 1.18 (RDG)",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
singeGetAudioCalibration = {
|
|
type = "function",
|
|
description = "Renvoie le retard audio propre à la machine en vigueur, en millisecondes : la valeur que l'écran de calibrage du menu a sauvegardée dans machine.cfg à la racine des données, ou celle réglée depuis par singeSetAudioCalibration. Zéro quand la machine n'a jamais été calibrée. Il s'applique à chaque jeu de la machine, en plus du retard propre au jeu que donne singeGetAudioDelay.\nRenvoie: un entier, en millisecondes.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
singeGetAudioDelay = {
|
|
type = "function",
|
|
description = "Renvoie le retard audio propre au jeu en vigueur, en millisecondes, qu'il vienne de --audiodelay, de la clé AUDIO_DELAY de l'entrée du jeu dans games.dat ou de singeSetAudioDelay. Zéro quand aucun n'a été réglé. Il s'ajoute au calibrage de la machine et à la latence mesurée du périphérique quand le moteur décide quand montrer chaque image de la vidéo.\nRenvoie: un entier, en millisecondes.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
singeGetAudioLatency = {
|
|
type = "function",
|
|
description = "Renvoie la file du périphérique audio que le moteur a mesurée à l'ouverture du mélangeur, en millisecondes : le temps entre la remise des échantillons au mélangeur et leur arrivée au périphérique, avant tout calibrage ou retard propre au jeu. Le moteur la compense déjà ; un écran de calibrage en a besoin pour programmer son clic et son flash, et elle mérite d'être affichée dans une vue de diagnostic.\nRenvoie: un entier, en millisecondes.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
singeGetDataPath = {
|
|
type = "function",
|
|
description = "Renvoie le dossier dans lequel Singe écrit pour ce jeu, avec un séparateur de chemin final pour qu'un nom de fichier puisse y être ajouté directement. C'est un sous-dossier de la base --datadir qui porte le nom du jeu (pour un jeu empaqueté, le nom de la base de données puis le dossier du script à l'intérieur) ; sans --datadir, la base est data dans le dossier du jeu. Les captures d'écran, les index vidéo et trace.txt y vont, et les sauvegardes, les meilleurs scores et les réglages devraient y aller aussi ; Singe 2.x les écrivait à côté du jeu, qui peut être en lecture seule.\nRenvoie: chemin (chaîne) terminé par un séparateur.\nDepuis: 2.00",
|
|
args = "()",
|
|
returns = "(string)",
|
|
},
|
|
singeGetGameId = {
|
|
type = "function",
|
|
description = "Le GAME_ID de l'entrée de ce jeu dans games.dat, ou nil quand elle n'en a pas. C'est l'identifiant sous lequel le service en ligne connaît le jeu, et la clé sous laquelle est tenu un tableau des scores.\nRenvoie: chaîne, ou nil.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(string)",
|
|
},
|
|
singeGetHeight = {
|
|
type = "function",
|
|
description = "Renvoie la hauteur de la fenêtre de Singe en pixels d'écran, et non en unités de l'overlay, telle qu'est la fenêtre au moment de l'appel. Utilisez overlayGetHeight pour dessiner ; celle-ci sert à un écran de réglages qui décrit l'affichage, ou à décider combien de détails une scène peut se permettre.\nRenvoie: un entier, en pixels.\nDepuis: 1.x",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
singeGetPauseFlag = {
|
|
type = "function",
|
|
description = "Renvoie l'indicateur de pause du moteur : true tant que le jeu est mis en pause par la touche pause ou par singeSetPauseFlag. C'est indépendant du fait que le disque soit arrêté sur une image en pause (discGetState) ; lisez-le pour savoir si une pause a été demandée délibérément. Tant que la touche pause tient le jeu figé, aucun callback ne s'exécute : depuis un callback, l'indicateur ne peut donc être vu à true qu'après un singeSetPauseFlag(true) du script lui-même.\nRenvoie: booléen.\nDepuis: 1.x (RDG)",
|
|
args = "()",
|
|
returns = "(boolean)",
|
|
},
|
|
singeGetScriptPath = {
|
|
type = "function",
|
|
description = "Renvoie le chemin du fichier de script en cours tel que le moteur l'a résolu. Framework.singe tire de cette valeur la globale DIR, le dossier du script avec son séparateur final, et c'est de DIR que se servent la plupart des jeux pour construire les chemins de leurs ressources.\nRenvoie: chemin (chaîne).\nDepuis: 1.15 (RDG)",
|
|
args = "()",
|
|
returns = "(string)",
|
|
},
|
|
singeGetSystemInfo = {
|
|
type = "function",
|
|
description = "Tout ce que l'en-tête de la trace sait de cette machine et de cette exécution, dans une seule table. Elle est destinée à un écran de service et aux rapports de bogue : la réponse à « sur quoi est-ce que ça tournait » sans demander au joueur de trouver un journal.\nRenvoie: une table avec ces champs, tous des chaînes sauf les quatre tailles :\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(info)",
|
|
},
|
|
singeGetTicks = {
|
|
type = "function",
|
|
description = "Renvoie l'horloge, en millisecondes depuis le démarrage du moteur. C'est l'horloge des minuteries, des anti-rebonds et de l'animation, et elle continue de tourner tant que le jeu est figé par la touche pause : une minuterie qui ne doit pas compter le temps de pause doit donc lire singeGetPauseFlag ou mesurer à partir du moment du dégel. Le os.clock() de Lua mesure normalement le temps processeur, qui s'arrête pendant que le moteur est inactif ; Singe le remplace par les secondes d'horloge écoulées depuis le démarrage du moteur, si bien que les jeux existants qui s'en servaient comme d'une horloge continuent de fonctionner.\nRenvoie: un entier, en millisecondes.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
singeGetWidth = {
|
|
type = "function",
|
|
description = "Renvoie la largeur de la fenêtre de Singe en pixels d'écran, le pendant de singeGetHeight. Le dessin sur l'overlay utilise plutôt overlayGetWidth.\nRenvoie: un entier, en pixels.\nDepuis: 1.x",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
singeHasGpu = {
|
|
type = "function",
|
|
description = "Indique si le périphérique GPU a démarré. Tout ce qui est dessiné par lui est indisponible sans lui : la scène 3D, les particules 3D et chaque document de GUI. Les particules 2D sont dessinées avec l'overlay et n'ont besoin d'aucun périphérique. Posez cette question avant de demander l'un d'eux, car guiNew et les appels de scène mettent fin au script au lieu de répondre false -- il n'y a aucun moyen d'essayer puis de se rattraper.\nRenvoie: booléen, vrai quand un périphérique GPU est présent.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(boolean)",
|
|
},
|
|
singeIsRecording = {
|
|
type = "function",
|
|
description = "Indique si un enregistrement est en cours, ou s'il a été demandé et commence avec la prochaine image dessinée. Voir singeRecordStart.\nRenvoie: booléen.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "(boolean)",
|
|
},
|
|
singeMain = {
|
|
type = "function",
|
|
description = "Le point d'entrée du modèle à fil d'exécution. Quand un script la définit, Framework.singe l'enveloppe dans une coroutine et installe un onOverlayUpdate qui reprend la coroutine une fois par image, si bien que la fonction se déroule comme une ligne droite de logique de jeu qui appelle singeYield() (un alias de coroutine.yield) partout où elle veut laisser passer une image. Tout ce qui est dessiné avant de céder la main atterrit sur l'overlay de cette image. Revenir de singeMain appelle singeQuit ; une erreur à l'intérieur arrête le jeu avec une trace de la pile d'appels. Les callbacks d'entrée, de son, de physique et de navigation sont toujours déclenchés entre les reprises, si bien qu'un jeu à fil d'exécution peut les mélanger avec de l'interrogation.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
singePack = {
|
|
type = "function",
|
|
description = "Empaquette le jeu de directory dans la base de données en un seul fichier database, exactement comme le fait singe --pack en ligne de commande, et renvoie true quand cela a réussi. Le dossier doit être le dossier propre d'un jeu : un dossier qui ne contient ni dossier de support Singe/, ni lanceur, ni rien d'autre que l'empaqueteur refuse, et les raisons d'un refus sont affichées dans la console comme pour la ligne de commande. C'est ce qui permet à un outil de création de publier un jeu sans quitter le moteur.\nRenvoie: true en cas de réussite, false sinon.\nDepuis: 3.00",
|
|
args = "(directory, database)",
|
|
returns = "(result)",
|
|
},
|
|
singeQuit = {
|
|
type = "function",
|
|
description = "Met fin au script en cours à la fin de cette image : la boucle de jeu s'arrête, onShutdown s'exécute, et le moteur passe au script suivant dans la file ou se ferme quand il n'y en a pas. Un jeu lancé depuis le menu avec scriptPush revient donc au menu, qui redémarre du début. Dans le modèle à fil d'exécution, revenir de singeMain l'appelle pour vous. Le contact affecté à INPUT_QUIT dans controls.cfg et la fermeture de la fenêtre mettent fin au script de la même façon. Ne l'appelez pas depuis onShutdown, qui est déjà le chemin de sortie.\nDepuis: 1.x (RDG)",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
singeRecordStart = {
|
|
type = "function",
|
|
description = "Commence à enregistrer le jeu, image et son ensemble, dans un MP4 placé dans le dossier de données du jeu (voir singeGetDataPath), à partir de la prochaine image dessinée. Sans nom, les fichiers sont nommés à partir de singe000.mp4 en montant, comme les captures d'écran ; avec un nom, l'enregistrement va dans ce fichier, .mp4 étant ajouté quand le nom n'a pas d'extension, en remplaçant tout fichier de ce nom, et un nom qui contient un dossier met fin au script. Un appel pendant qu'un enregistrement est en cours est ignoré. Le contact affecté à INPUT_RECORD dans controls.cfg, F10 par défaut, démarre et arrête les mêmes enregistrements.\nRenvoie: rien.\nDepuis: 3.00",
|
|
args = "([name])",
|
|
returns = "()",
|
|
},
|
|
singeRecordStop = {
|
|
type = "function",
|
|
description = "Termine l'enregistrement à la prochaine image dessinée : ce qui attend encore est encodé et le fichier est fermé, si bien qu'il se lit du début à la fin. Ignoré quand rien n'est en cours d'enregistrement. Un enregistrement encore en cours quand le jeu se termine est terminé de la même façon.\nRenvoie: rien.\nDepuis: 3.00",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
singeRelaunch = {
|
|
type = "function",
|
|
description = "Arrête le moteur comme le fait singeQuit et, une fois que tout a été démonté, démarre l'exécutable situé à path à la place de celui-ci avec les mêmes arguments. C'est ainsi que l'outil Engine Update du menu fait passer une borne à un Singe plus récent qu'il a placé à côté de celui qui tourne : le nouveau fichier est rendu exécutable et démarré, et sous Windows, qui ne remplace pas un exécutable en cours d'exécution, il est démarré à côté de celui-ci sous son propre nom. Le fichier doit déjà exister ; quand ce n'est pas le cas, l'appel répond false sans rien faire. Rien n'est décompressé ni copié ici : le nouveau Singe décompresse ses propres fichiers de support à son premier lancement.\nRenvoie: true quand la relance a été préparée, false quand le fichier n'est pas là.\nDepuis: 3.00",
|
|
args = "(path)",
|
|
returns = "(result)",
|
|
},
|
|
singeReload = {
|
|
type = "function",
|
|
description = "Relance le jeu depuis son script à la fin de cette image, comme le font F5 et un fichier modifié sous --reload ; cet appel fonctionne sans l'option. Tous les sons s'arrêtent, l'état Lua est jeté sans appeler onShutdown, tout ce que le script a chargé est libéré, la scène, la physique (son dessin de débogage compris), les particules et la navigation sont réinitialisées, l'overlay revient à sa résolution par défaut, et le volume des effets sonores, le mode souris, la capture de la souris, le mode clavier, la touche pause, l'auditeur sonore et l'indicateur de pause reviennent à leurs valeurs par défaut. Les touches et boutons maintenus pendant le rechargement sont ignorés jusqu'à ce qu'ils soient relâchés, comme à un démarrage à neuf, et le disque est garé sur sa première image, en pause, avec la piste audio par défaut sélectionnée, comme au démarrage. Le moteur lui-même (la fenêtre, les manettes, les souris) reste tel quel. Il convient à l'entrée « redémarrer » d'un menu de débogage ou à un éditeur de niveaux qui recharge ce qu'il vient de sauvegarder.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
singeSaveGeometry = {
|
|
type = "function",
|
|
description = "Garde pour cette machine l'échelle, le décalage et la rotation actuels de l'image. Ils vont dans machine.cfg à la racine des données, à côté du retard audio, et le moteur les applique à chaque jeu qu'il démarre ensuite, depuis le menu ou depuis la ligne de commande, et à travers singeReload. Une option réellement tapée sur la ligne de commande l'emporte : --scalefactor remplace l'échelle sauvegardée, --shiftx ou --shifty le décalage sauvegardé, --rotate la rotation sauvegardée. Le fichier est écrit en entier : le retard audio est donc gardé tel qu'il est.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
singeSaveTier = {
|
|
type = "function",
|
|
description = "Garde la classe de performances de cette machine, de 0 à 3, dans machine.cfg à côté du retard audio et de la géométrie, où singeCapabilities la rapporte et où le menu la compare au TIER de chaque jeu. Le menu inclus mesure lui-même le niveau, d'après le temps que met son décor de fond 3D à se dessiner (sceneMeasure), et ne le sauvegarde que quand il change ; rien ne le demande au joueur.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "(tier)",
|
|
returns = "()",
|
|
},
|
|
singeScreenshot = {
|
|
type = "function",
|
|
description = "Demande une capture d'écran de la fenêtre entière, bandes noires comprises, prise après que la prochaine image a été dessinée et sauvegardée en PNG dans le dossier de données du jeu (voir singeGetDataPath). Sans nom, les fichiers sont nommés à partir de singe000.png en montant ; chaque exécution du script cherche depuis zéro le premier nom libre, et les captures suivantes continuent après la dernière sauvegardée. Avec un nom, la capture va dans ce fichier, .png étant ajouté quand le nom n'a pas d'extension, en remplaçant tout fichier de ce nom ; un nom qui contient un dossier met fin au script. Nommer la capture sert aux scripts qui produisent des images exprès, comme ceux qui illustrent les tutoriels d'un livre : une nouvelle exécution remplace alors l'image au lieu d'en ajouter une. L'appel force un redessin pour que la capture soit prise même quand l'affichage est au repos. Le contact affecté à INPUT_SCREENSHOT dans controls.cfg fait la même chose.\nDepuis: 1.x",
|
|
args = "([name])",
|
|
returns = "()",
|
|
},
|
|
singeSetAudioCalibration = {
|
|
type = "function",
|
|
description = "Règle le retard audio propre à la machine, l'applique aussitôt et l'écrit dans machine.cfg à la racine des données pour que chaque jeu de la machine le prenne en compte. L'écran de calibrage du menu l'appelle ; un jeu qui a son propre menu de service peut aussi le faire. La valeur est positive quand l'audio est entendu plus tard que ne l'indique le périphérique ; le moteur retarde d'autant la présentation de la vidéo. Les valeurs hors de -1000 à 1000 mettent fin au script. Si machine.cfg ne peut pas être écrit, la valeur s'applique quand même pour cette exécution et un message part sur la console.\nDepuis: 3.00",
|
|
args = "(milliseconds: integer)",
|
|
returns = "()",
|
|
},
|
|
singeSetAudioDelay = {
|
|
type = "function",
|
|
description = "Règle le retard audio propre au jeu pour cette exécution : de combien l'audio est entendu plus tard (positif) ou plus tôt (négatif) que ce que le moteur peut mesurer, pour que la présentation de la vidéo se décale en conséquence. Il s'applique au disque et à chaque vidéo que lit le script, en plus du calibrage de la machine. Rien n'est sauvegardé ; un jeu qui propose ce réglage dans un menu de service range la valeur avec ses autres réglages et rappelle cette fonction au démarrage. Les valeurs hors de -1000 à 1000 mettent fin au script.\nDepuis: 3.00",
|
|
args = "(milliseconds: integer)",
|
|
returns = "()",
|
|
},
|
|
singeSetGameName = {
|
|
type = "function",
|
|
description = "Règle le titre de la fenêtre de Singe. Appelez-la une fois au démarrage avec le nom d'affichage du jeu ; rien d'autre n'utilise cette valeur. L'argument doit être une chaîne ou un nombre.\nDepuis: 1.15 (RDG)",
|
|
args = "(title)",
|
|
returns = "()",
|
|
},
|
|
singeSetPauseFlag = {
|
|
type = "function",
|
|
description = "Règle l'indicateur de pause du moteur depuis le script. true met en pause le disque s'il est en lecture, chaque vidéo chargée et chaque canal d'effets sonores, en retenant lesquels tournaient ; false reprend exactement ceux-là. Contrairement à la touche pause, cela ne fige pas le script : les callbacks continuent d'être appelés pour que le script puisse dessiner son menu de pause et décider quand effacer l'indicateur. Les jeux qui gèrent leur propre pause devraient aussi prendre la touche pause avec singeSetPauseKeyEnabled(false), car la touche du moteur bascule le même indicateur et lutterait sinon contre le script. Un argument qui n'est pas un booléen met fin au script.\nDepuis: 1.x (RDG)",
|
|
args = "(paused)",
|
|
returns = "()",
|
|
},
|
|
singeSetPauseKeyEnabled = {
|
|
type = "function",
|
|
description = "Choisit à qui appartient la touche pause affectée à INPUT_PAUSE dans controls.cfg. Quand elle est activée (par défaut, et rétablie à chaque rechargement), elle appartient au moteur : appuyer sur la touche fige complètement le jeu (voir La pause), et en MODE_NORMAL le script ne reçoit jamais SWITCH_PAUSE. Quand elle est désactivée, le moteur ignore la touche et SWITCH_PAUSE arrive à onInputPressed et onInputReleased comme n'importe quel autre contact, si bien que le jeu peut gérer sa propre pause avec singeSetPauseFlag. Un argument qui n'est pas un booléen met fin au script.\nDepuis: 3.00",
|
|
args = "(enabled)",
|
|
returns = "()",
|
|
},
|
|
singeSetQuitKeyEnabled = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Choisit si le moteur quitte sur le contact affecté à INPUT_QUIT dans controls.cfg, depuis le clavier ou une manette. Quand c'est activé (par défaut, et rétabli à chaque rechargement), appuyer dessus termine le jeu. Quand c'est désactivé, le moteur l'ignore, si bien qu'un jeu peut d'abord demander confirmation ou sauvegarder ; le script reçoit SWITCH_QUIT par onInputPressed et onInputReleased dans les deux cas, et singeQuit termine toujours le jeu. Le bouton de fermeture de la fenêtre quitte toujours. Framework.singe définit keyboardCatchQuit(catch), le nom que donne Hypseus Singe au même réglage, avec le sens inverse. Un argument qui n'est pas un booléen met fin au script.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(enabled)",
|
|
returns = "()",
|
|
},
|
|
singeVersion = {
|
|
type = "function",
|
|
description = "Renvoie la version du moteur sous forme de nombre, le numéro majeur plus le mineur en fraction : 3.00 revient donc comme 3. Comparez-la avec < et >= pour refuser un moteur trop ancien ou pour contourner des fonctionnalités ; SINGE_VERSION_MAJOR, SINGE_VERSION_MINOR et SINGE_VERSION_STRING sont aussi définies comme globales pour les scripts qui veulent les parties ou le texte.\nRenvoie: nombre.\nDepuis: 1.x (RDG)",
|
|
args = "()",
|
|
returns = "(number)",
|
|
},
|
|
singeWantsCrosshairs = {
|
|
type = "function",
|
|
description = "Renvoie true sauf si Singe a été démarré avec --nocrosshair. Ne dessinez le réticule de visée logiciel que quand elle renvoie true ; les joueurs dont les pistolets optiques affichent leur propre réticule à l'écran désactivent le réticule logiciel avec cette option. La valeur ne change pas pendant une exécution : lisez-la donc une seule fois.\nRenvoie: booléen.\nDepuis: 2.00",
|
|
args = "()",
|
|
returns = "(boolean)",
|
|
},
|
|
softDelete = {
|
|
type = "function",
|
|
description = "Termine la simulation et libère son corps. Le nœud garde son maillage dans la forme où il a été écrit en dernier : un drap tombé reste drapé sur la caisse et une corde garde son tube ; la forme d'origine du maillage n'est pas rétablie. Un nœud sans corps mou met fin au script.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "()",
|
|
},
|
|
softNew = {
|
|
type = "function",
|
|
description = "softNew(node, SOFT_CLOTH)\nsoftNew(node, SOFT_BODY)\nsoftNew(node, SOFT_ROPE, x, y, z, segments, radius)\nPour SOFT_CLOTH et SOFT_BODY, le maillage du nœud, de trois sommets ou plus, devient les particules : les sommets à la même position (à 0.0001 unité près) sont soudés en un seul, placés là où la transformation du nœud les met dans le monde, et les triangles donnent les contraintes d'étirement, de cisaillement et de flexion. Un tissu entre en collision par ses deux faces et convient à une feuille ouverte ; un corps est un maillage fermé que softSetPressure peut gonfler. Pour SOFT_ROPE, le nœud n'a besoin d'aucun maillage : segments + 1 particules s'alignent de la position du nœud dans le monde jusqu'au point du monde donné, le nœud reçoit un nouveau maillage de tube à six pans de ce rayon autour d'elles (en gardant le matériau qu'il avait), et les particules entrent en collision comme des sphères de ce rayon, alors que les particules de tissu et de corps sont des sphères de rayon 0.03. Chaque type commence avec un étirement de 0.9, une flexion de 0.2, une masse de 1 kilogramme, un amortissement de 0.1 et une pression de 0. Un corps mou déjà présent sur le nœud est retiré avant que le nouveau soit créé : un appel qui échoue laisse donc le nœud sans aucun ; le maillage de tube d'une corde s'en va avec lui, ce qui explique pourquoi le nœud d'une corde ne peut pas devenir un tissu ou un corps (l'appel échoue faute de maillage). Met fin au script quand la physique n'est pas disponible, que le type est inconnu, que le nombre d'arguments ne correspond pas au type, que le maillage manque, qu'une corde n'a pas de segments ou pas de rayon, ou que 16 corps mous existent déjà.\nDepuis: 3.00.",
|
|
args = "(node, SOFT_CLOTH)",
|
|
returns = "()",
|
|
},
|
|
softPin = {
|
|
type = "function",
|
|
description = "Trouve la particule la plus proche du point du monde, où que se trouvent les particules à cet instant, et la fixe. Seule, la particule est maintenue là où elle est ; avec otherNode, elle est déplacée à la position de ce nœud dans le monde avant chaque pas, si bien qu'une corde pend d'une grue qui pivote et qu'une cape suit les épaules. Le point n'a pas besoin d'être sur le maillage, puisque c'est la particule la plus proche qui l'emporte, et épingler de nouveau la même particule ne change que ce qu'elle suit. Au-delà de 32 épingles, l'appel ne fait rien.\nDepuis: 3.00.",
|
|
args = "(node, x, y, z [, otherNode])",
|
|
returns = "()",
|
|
},
|
|
softSetDamping = {
|
|
type = "function",
|
|
description = "À quelle vitesse le mouvement des particules s'éteint, de 0 en montant ; 0.1 par défaut, et une valeur négative devient 0. Des valeurs plus élevées calment un drapeau qui n'arrête pas d'onduler ou une corde qui se balance sans fin. Le corps est refait autour de la forme actuelle et chaque particule s'arrête.\nDepuis: 3.00.",
|
|
args = "(node, damping)",
|
|
returns = "()",
|
|
},
|
|
softSetMass = {
|
|
type = "function",
|
|
description = "La masse du corps entier, répartie également entre ses particules ; 1 par défaut, maintenue à 0.001 ou plus. Les particules épinglées ne pèsent rien quoi qu'il en soit. Le corps est refait autour de la forme actuelle et chaque particule s'arrête : réglez-la donc dès le départ.\nDepuis: 3.00.",
|
|
args = "(node, kilograms)",
|
|
returns = "()",
|
|
},
|
|
softSetPressure = {
|
|
type = "function",
|
|
description = "Gonfle un SOFT_BODY : 0 (par défaut) donne un sac dégonflé, et quelques unités un ballon bien ferme ; une valeur négative devient 0. Elle modifie le corps en cours de simulation sans le refaire et le réveille, si bien qu'un ballon peut être gonflé ou dégonflé pendant qu'il rebondit. Les tissus et les cordes n'ont pas de volume à gonfler.\nDepuis: 3.00.",
|
|
args = "(node, pressure)",
|
|
returns = "()",
|
|
},
|
|
softSetStiffness = {
|
|
type = "function",
|
|
description = "À quel point le matériau résiste à l'étirement (et, pour un tissu, au cisaillement) et au pliage, de 0 à 1 ; les valeurs hors plage sont ramenées dans la plage. 1 est rigide, 0 le plus lâche que permet le solveur. Par défaut 0.9 et 0.2. Le corps est refait autour de la forme actuelle : les longueurs au repos deviennent les longueurs de cet instant, et chaque particule s'arrête ; réglez donc le matériau avant que le tissu commence à bouger. Une corde n'a que l'étirement.\nDepuis: 3.00.",
|
|
args = "(node, stretch, bend)",
|
|
returns = "()",
|
|
},
|
|
softUnpin = {
|
|
type = "function",
|
|
description = "Libère la particule épinglée la plus proche du point du monde. Rien ne se passe quand cette particule n'est pas épinglée. Le corps est refait autour de la forme actuelle, ce qui arrête aussi net chaque particule : un drapeau qu'on lâche commence donc à tomber depuis le repos.\nDepuis: 3.00.",
|
|
args = "(node, x, y, z)",
|
|
returns = "()",
|
|
},
|
|
soundFullStop = {
|
|
type = "function",
|
|
description = "Arrête d'un coup tous les canaux d'effets, y compris ceux en pause, et les libère pour qu'ils soient réutilisés. Aucun clip n'est déchargé ; les handles de soundLoad restent valides. Chaque canal qui jouait ou était en pause le signale par onSoundCompleted, exactement comme après soundStop. Appelez-la lors d'un changement de scène ou avant une cinématique plutôt que de suivre chaque canal que vous avez démarré.\nDepuis: 1.16",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
soundGetPosition = {
|
|
type = "function",
|
|
description = "Indique où se trouve un canal placé par rapport à l'auditeur, sous forme d'une direction de longueur unité dans le repère de l'auditeur (x positif vers la droite, y positif vers le haut, z positif derrière l'auditeur), et le facteur de volume que lui donne actuellement sa distance, de 0 à 1. Les valeurs sont rafraîchies une fois par image à partir de l'auditeur et du nœud ou du point du canal. Un canal qui n'a pas été placé dans la scène depuis son démarrage renvoie 0, 0, 0, 1. Destiné aux indicateurs façon radar et à la vérification d'un mixage depuis un script de test ; un canal hors de 0 à 15 met fin au script.\nRenvoie: trois nombres pour la direction et un pour le gain dû à la distance.\nDepuis: 3.00.",
|
|
args = "(channel)",
|
|
returns = "(x, y, z, gain)",
|
|
},
|
|
soundGetVolume = {
|
|
type = "function",
|
|
description = "Renvoie le volume général des effets, de 0 à 63. Au démarrage, il reflète le volume des effets donné en ligne de commande : un jeu qui affiche un réglage de volume doit donc le lire plutôt que de supposer le maximum.\nRenvoie: entier, de 0 à 63.\nDepuis: 1.16",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
soundIsPlaying = {
|
|
type = "function",
|
|
description = "Teste si un canal joue en ce moment. Un canal en pause répond false, tout comme un canal dont le clip est terminé. Un canal hors de 0 à 15 met fin au script ; un canal simplement devenu silencieux, non.\nRenvoie: booléen.\nDepuis: 1.16 (RDG)",
|
|
args = "(channel)",
|
|
returns = "(boolean)",
|
|
},
|
|
soundLoad = {
|
|
type = "function",
|
|
description = "Charge un clip audio en mémoire et renvoie son handle. Le chemin passe par le système de fichiers virtuel du jeu : il fonctionne donc de la même façon depuis un dossier ordinaire et depuis un jeu empaqueté. Chargez les clips une fois au démarrage, pas dans un callback appelé à chaque image. Un fichier qui ne peut pas être ouvert ou décodé met fin au script.\nRenvoie: handle de son entier. C'est un handle de données, pas un numéro de canal.\nDepuis: 1.x",
|
|
args = "(filename)",
|
|
returns = "(integer)",
|
|
},
|
|
soundLoadData = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Construit un son à partir d'octets contenus dans une chaîne Lua au lieu d'un fichier. Tous les formats que lit soundLoad sont lus ici, et le handle renvoyé s'utilise avec le reste de la famille sound exactement de la même façon.\nRenvoie: nombre, le handle du son.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(data: string)",
|
|
returns = "(number)",
|
|
},
|
|
soundPause = {
|
|
type = "function",
|
|
description = "Met un canal en pause sur place ; soundResume le reprend au même point. Un canal en pause compte toujours comme occupé : soundPlay ne le donnera donc pas à un autre clip, et soundIsPlaying répond false pour lui. Mettre en pause un canal qui ne joue pas ne fait rien. Un canal hors de 0 à 15 met fin au script.\nRenvoie: booléen, true quand le canal jouait au moment de l'appel.\nDepuis: 1.16 (RDG)",
|
|
args = "(channel)",
|
|
returns = "(boolean)",
|
|
},
|
|
soundPlay = {
|
|
type = "function",
|
|
description = "Démarre un clip chargé sur le premier canal libre et renvoie le numéro de ce canal. Un canal compte comme libre quand il ne joue pas et n'est pas en pause. Le nouveau canal démarre au volume général (ou à volume en dessous), centré, sans position dans la scène et avec la portée par défaut, quoi qu'ait réglé l'usage précédent du canal. Quand les seize canaux sont occupés, rien ne joue et c'est -1 (SOUND_ERROR_INVALID) qui revient ; un jeu qui déclenche beaucoup de sons qui se chevauchent doit le vérifier. Un handle qui n'est pas chargé met fin au script.\nRenvoie: numéro de canal entier, de 0 à 15, ou -1 quand aucun canal n'est libre.\nDepuis: 1.x ; volume depuis 3.00.",
|
|
args = "(id [, loops, volume])",
|
|
returns = "(integer)",
|
|
},
|
|
soundResume = {
|
|
type = "function",
|
|
description = "Reprend un canal que soundPause a arrêté, là où il s'était interrompu. Reprendre un canal qui n'est pas en pause ne fait rien. Un canal hors de 0 à 15 met fin au script.\nRenvoie: booléen, true quand le canal était en pause au moment de l'appel.\nDepuis: 1.16 (RDG)",
|
|
args = "(channel)",
|
|
returns = "(boolean)",
|
|
},
|
|
soundSetChannelVolume = {
|
|
type = "function",
|
|
description = "Règle le volume propre d'un canal, en plus du volume général de soundSetVolume : le canal joue au volume général multiplié par celui-ci, multiplié encore par son atténuation due à la distance quand il est dans la scène. Chaque canal démarre à plein quand soundPlay le prend, sauf si un volume a été donné à soundPlay : un pas discret et un coup de feu bruyant peuvent ainsi partager un même volume général. Les valeurs hors de 0 à 63 mettent fin au script, tout comme un canal hors de 0 à 15.\nDepuis: 3.00",
|
|
args = "(channel, volume: integer)",
|
|
returns = "()",
|
|
},
|
|
soundSetListener = {
|
|
type = "function",
|
|
description = "Choisit le nœud depuis lequel on entend les canaux placés, tourné dans le même sens que lui. Sans argument, ou avec nil, l'auditeur est la caméra de la scène, ce qui convient à un jeu à la première personne ou à caméra fixe ; un jeu à la troisième personne préfère généralement le nœud du joueur, pour que les sons se répartissent autour du personnage plutôt que de la caméra. Un nœud supprimé plus tard fait revenir l'auditeur à la caméra. Un handle de nœud qui n'existe pas met fin au script.\nDepuis: 3.00.",
|
|
args = "([node])",
|
|
returns = "()",
|
|
},
|
|
soundSetNode = {
|
|
type = "function",
|
|
description = "Attache un canal en cours de lecture à un nœud de la scène pour qu'on l'entende de l'endroit où se trouve le nœud à chaque image : le canal est réparti vers la direction du nœud vue depuis l'auditeur et atténué selon sa distance d'après soundSetRange. L'appeler sans nœud, ou avec nil, ressort le canal de la scène, au plein volume général. Un canal dont le nœud est supprimé revient de lui-même à une lecture ordinaire. L'attache dure jusqu'à ce que le canal soit arrêté ou réutilisé par soundPlay. Un canal hors de 0 à 15, ou un nœud qui n'existe pas, met fin au script.\nDepuis: 3.00.",
|
|
args = "(channel [, node])",
|
|
returns = "()",
|
|
},
|
|
soundSetPan = {
|
|
type = "function",
|
|
description = "Répartit un canal entre les deux voies stéréo, pour les jeux sans scène : -1 est tout à gauche, 1 tout à droite, 0 au centre, et les valeurs hors de cette plage sont ramenées dans la plage. S'éloigner du centre ne baisse que le haut-parleur opposé ; à pan = 0.5, le haut-parleur gauche joue à mi-gain et le droit à plein. L'appel ressort le canal de la scène si soundSetNode ou soundSetPosition l'y avait placé. Un canal hors de 0 à 15 met fin au script.\nDepuis: 3.00.",
|
|
args = "(channel, pan)",
|
|
returns = "()",
|
|
},
|
|
soundSetPosition = {
|
|
type = "function",
|
|
description = "Place un canal en cours de lecture en un point fixe de la scène, en unités du monde, en remplaçant tout nœud qu'il suivait. Il est ensuite réparti et atténué par rapport à l'auditeur comme un canal attaché à un nœud. Convient à un son qui ne bouge pas, comme une cascade ou un téléphone qui sonne ; une source en mouvement est plus simple avec soundSetNode. Un canal hors de 0 à 15 met fin au script.\nDepuis: 3.00.",
|
|
args = "(channel, x, y, z)",
|
|
returns = "()",
|
|
},
|
|
soundSetRange = {
|
|
type = "function",
|
|
description = "Règle la façon dont un canal placé s'atténue avec la distance à l'auditeur. En deçà de near, il joue à plein volume ; au-delà, son gain est near divisé par la distance ; sur le dernier cinquième de far, il s'atténue en plus de façon linéaire, jusqu'au silence à far. Les valeurs par défaut sont 1 et 30 unités du monde, rétablies chaque fois que soundPlay réutilise le canal. Un murmure veut un petit far, une cascade un grand.\nDepuis: 3.00.",
|
|
args = "(channel, near, far)",
|
|
returns = "()",
|
|
},
|
|
soundSetVolume = {
|
|
type = "function",
|
|
description = "Règle le volume général des effets et l'applique aussitôt à chaque canal, en lecture ou en pause. Le volume propre de chaque canal donné par soundSetChannelVolume et, pour les canaux placés, l'atténuation due à la distance continuent de s'y ajouter. Les valeurs hors de 0 à 63 mettent fin au script.\nDepuis: 1.16",
|
|
args = "(volume: integer)",
|
|
returns = "()",
|
|
},
|
|
soundStop = {
|
|
type = "function",
|
|
description = "Arrête immédiatement un canal, qu'il soit en lecture ou en pause, et le libère pour qu'il soit réutilisé. Le canal le signale par onSoundCompleted exactement comme quand le clip se termine de lui-même : un script qui enchaîne des sons depuis ce callback doit donc vérifier s'il a arrêté le canal lui-même. Le soundPlay suivant peut redonner le même numéro : oubliez donc ce numéro côté Lua. Un canal hors de 0 à 15 met fin au script.\nRenvoie: booléen, true quand le canal jouait au moment de l'appel. Un canal en pause renvoie false mais est bien arrêté.\nDepuis: 1.x (RDG)",
|
|
args = "(channel)",
|
|
returns = "(boolean)",
|
|
},
|
|
soundUnload = {
|
|
type = "function",
|
|
description = "Libère un clip chargé et invalide son handle. Le mélangeur garde les données du clip en vie jusqu'à ce que chaque canal qui le joue encore se soit arrêté : décharger ne coupe donc pas court un canal en lecture. Tout usage ultérieur du handle, y compris un autre soundUnload, met fin au script. Sa place habituelle est onShutdown.\nDepuis: 2.00",
|
|
args = "(id)",
|
|
returns = "()",
|
|
},
|
|
spriteAnimGetFrame = {
|
|
type = "function",
|
|
description = "Un alias de spriteGetFrame.",
|
|
args = "(spr)",
|
|
returns = "()",
|
|
anchor = "_hypseus_compatibility",
|
|
},
|
|
spriteAnimIsPlaying = {
|
|
type = "function",
|
|
description = "Un alias de spriteIsPlaying.",
|
|
args = "(spr)",
|
|
returns = "()",
|
|
anchor = "_hypseus_compatibility",
|
|
},
|
|
spriteAnimLoop = {
|
|
type = "function",
|
|
description = "Un alias de spriteLoop.",
|
|
args = "(loop, spr)",
|
|
returns = "()",
|
|
anchor = "_hypseus_compatibility",
|
|
},
|
|
spriteAnimPause = {
|
|
type = "function",
|
|
description = "Un alias de spritePause.",
|
|
args = "(spr)",
|
|
returns = "()",
|
|
anchor = "_hypseus_compatibility",
|
|
},
|
|
spriteAnimPlay = {
|
|
type = "function",
|
|
description = "Un alias de spritePlay.",
|
|
args = "(spr)",
|
|
returns = "()",
|
|
anchor = "_hypseus_compatibility",
|
|
},
|
|
spriteAnimSetFrame = {
|
|
type = "function",
|
|
description = "Un alias de spriteSetFrame.",
|
|
args = "(frame, spr)",
|
|
returns = "()",
|
|
anchor = "_hypseus_compatibility",
|
|
},
|
|
spriteBlend = {
|
|
type = "function",
|
|
description = "Extension Hypseus, acceptée et ignorée. C'est un contournement propre à ce moteur : Hypseus charge les sprites avec le mode de mélange de SDL désactivé, et cet appel le réactive pour un sprite. Singe dessine déjà chaque sprite avec son canal alpha, si bien que le mélange n'est jamais désactivé au départ. Le handle du sprite est tout de même vérifié, si bien qu'un mauvais handle reste une erreur. Pour ajouter plutôt la lumière d'un sprite, ou multiplier par lui, voir spriteSetBlend.\nRenvoie: rien.\nDepuis: 3.00",
|
|
args = "(boolean, sprite)",
|
|
returns = "()",
|
|
},
|
|
spriteDraw = {
|
|
type = "function",
|
|
description = "spriteDraw(id, x, y)\nspriteDraw(id, x, y, centered)\nspriteDraw(id, x, y, x2, y2)\nspriteDraw(id, x, y, x2, y2, centered)\nCopie le sprite sur l'overlay, avec sa rotation et son échelle actuelles. Appelez-la depuis onOverlayUpdate. Les deux premières formes dessinent à la taille que donnent spriteGetWidth et spriteGetHeight, avec (x, y) comme coin supérieur gauche ; les deux dernières étirent cette image dans le rectangle qui va de (x, y) à (x2, y2) inclus, toujours avec un échantillonnage au plus proche voisin, quoi que dise spriteQuality. Si le sprite est une animation en cours de lecture, le dessin la fait d'abord avancer du temps réel écoulé depuis le dessin précédent (ou depuis spritePlay), en passant autant d'images que ce temps en couvre, et montre chaque image au moins 10 ms, même quand le fichier en demande moins. Quand la dernière image est passée, la lecture revient à l'image 0 si spriteLoop est activé ; sinon elle reste sur la dernière image et s'arrête. Les parties qui sortent de l'overlay sont coupées.\nDepuis: 1.x. Formes centrée et étirée centrée ajoutées en 2.10.",
|
|
args = "(id, x, y)",
|
|
returns = "()",
|
|
},
|
|
spriteDrawFrame = {
|
|
type = "function",
|
|
description = "spriteDrawFrame(id, x, y, frame)\nspriteDrawFrame(id, x, y, frame, scale)\nspriteDrawFrame(id, x, y, frame, scaleX, scaleY)\nExtension Hypseus. Copie une image d'une planche de sprites (ou de toute animation) sur l'overlay avec (x, y) comme coin supérieur gauche, sans changer l'image sur laquelle le sprite est arrêté ni son état de lecture. Les images sont numérotées à partir de 1, comme Hypseus les compte ; une image hors de 1 au nombre d'images dessine l'image 1. Une image fixe se dessine elle-même et ignore frame. Un miroir réglé par spriteFlip s'applique. La rotation et l'échelle propres au sprite, venues de spriteRotate et de spriteScale, sont ignorées : la première forme dessine l'image à sa taille naturelle, les autres multiplient sa largeur par scaleX (ou scale) et sa hauteur par scaleY (ou scale), avec un échantillonnage au plus proche voisin. Appelez-la depuis onOverlayUpdate.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(id, x, y, frame)",
|
|
returns = "()",
|
|
},
|
|
spriteDrawGrid = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Dessine un rectangle pris dans un sprite, avec son coin supérieur gauche en x, y : à sa propre taille ou, si x2 et y2 sont donnés, étiré pour remplir la boîte jusqu'à ce coin, comme spriteDraw étire un sprite entier. C'est le seul appel qui prend un rectangle source : spriteDraw prend le sprite entier et spriteDrawFrame une image entière d'une planche, alors que celui-ci prend n'importe quel rectangle. C'est ainsi qu'un jeu découpe une tuile, un chiffre ou une lettre dans une seule image sans la charger maintes fois.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe ; la forme étirée est nouvelle en 3.00 et propre à Singe.",
|
|
args = "(id: number, x, y, sourceX, sourceY, width, height [, x2, y2])",
|
|
returns = "()",
|
|
},
|
|
spriteDrawRotatedFrame = {
|
|
type = "function",
|
|
description = "spriteDrawRotatedFrame(id, x, y)\nspriteDrawRotatedFrame(id, x, y, scale)\nspriteDrawRotatedFrame(id, x, y, scaleX, scaleY)\nExtension Hypseus. Dessine l'image que spriteRotateFrame a tournée en dernier, centrée sur x, y. C'est le pendant de cet appel et la raison d'être des deux : spriteDrawFrame ignore délibérément la rotation et l'échelle d'un sprite, si bien qu'un jeu qui veut tourner une image d'une planche se sert plutôt de ces deux-là.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(id: number, x, y)",
|
|
returns = "()",
|
|
},
|
|
spriteFlip = {
|
|
type = "function",
|
|
description = "Retourne le sprite en miroir de gauche à droite, de haut en bas, ou les deux, jusqu'à ce qu'il soit rappelé avec false, false. Le miroir s'applique à chaque dessin du sprite : spriteDraw, chaque image de spriteDrawFrame et l'image tournée de spriteDrawRotatedFrame. Il est appliqué après la rotation et l'échelle de spriteRotate et de spriteScale, si bien qu'un sprite tourné est retourné tel qu'il apparaît à l'écran, et qu'une image tournée est simplement retournée dans l'autre sens au lieu d'être tournée à nouveau. L'image retournée n'est reconstruite que lorsque les indicateurs changent ; une image dessinée par spriteDrawFrame est retournée une fois et gardée jusqu'à ce qu'une autre image soit demandée. spriteDrawGrid ignore le miroir, puisque son rectangle est découpé dans l'image non retournée.\nRenvoie: rien.\nDepuis: 3.00",
|
|
args = "(id, horizontal, vertical)",
|
|
returns = "()",
|
|
},
|
|
spriteFrameHeight = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Renvoie la hauteur d'une image du sprite avant toute mise à l'échelle ou rotation : la hauteur de la bande pour une planche de spriteLoadFrames, la hauteur d'une image pour une animation, et la hauteur de l'image pour une image fixe (Hypseus renvoie ici la surface dessinée). spriteGetHeight donne plutôt la taille telle qu'elle est dessinée.\nRenvoie: entier.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(id)",
|
|
returns = "(integer)",
|
|
},
|
|
spriteFrameWidth = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Renvoie la largeur d'une image du sprite avant toute mise à l'échelle ou rotation : la largeur de la bande divisée par le nombre d'images pour une planche de spriteLoadFrames, la largeur d'une image pour une animation, et la largeur de l'image pour une image fixe (Hypseus renvoie 0 dans ce cas). spriteGetWidth donne plutôt la taille telle qu'elle est dessinée.\nRenvoie: entier.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(id)",
|
|
returns = "(integer)",
|
|
},
|
|
spriteGetFrame = {
|
|
type = "function",
|
|
description = "Renvoie l'indice, compté à partir de zéro, de l'image que le sprite montre en ce moment. Les images fixes et les animations qui n'ont pas avancé renvoient 0. Les images n'avancent qu'à l'intérieur de spriteDraw, si bien que la valeur change d'un dessin à l'autre, et non entre deux appels quelconques. Servez-vous-en pour caler un son ou la logique du jeu sur une image particulière d'une animation.\nRenvoie: indice d'image entier, 0 pour une image fixe.\nDepuis: 2.10",
|
|
args = "(id)",
|
|
returns = "(integer)",
|
|
},
|
|
spriteGetFrames = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Le nombre d'images d'un sprite : le nombre d'images d'une planche chargée par spriteLoadFrames ou d'un GIF ou WEBP animé, et 0 pour une image fixe. C'est le nombre jusqu'auquel va le numéro d'image, compté à partir de zéro, de spriteSetFrame, et un de plus que le plus grand qu'il accepte.\nRenvoie: nombre ; 0 pour une image fixe.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(id: number)",
|
|
returns = "(number)",
|
|
},
|
|
spriteGetHeight = {
|
|
type = "function",
|
|
description = "Renvoie la hauteur du sprite tel qu'il serait dessiné à cet instant, en coordonnées de l'overlay. La mise à l'échelle et la rotation appliquées avec spriteScale, spriteRotate ou spriteRotateAndScale sont comprises, si bien qu'un sprite tourné renvoie la hauteur de sa boîte englobante tournée, et non celle de l'image source. Pour une animation, c'est l'image en cours qui est mesurée. Les formes étirées de spriteDraw n'influent pas sur la valeur.\nRenvoie: hauteur entière.\nDepuis: 2.00",
|
|
args = "(id)",
|
|
returns = "(integer)",
|
|
},
|
|
spriteGetWidth = {
|
|
type = "function",
|
|
description = "Renvoie la largeur du sprite tel qu'il serait dessiné à cet instant, en coordonnées de l'overlay, y compris toute mise à l'échelle et toute rotation appliquées en ce moment. Pour une animation, c'est l'image en cours qui est mesurée. Avec spriteGetHeight, c'est la façon habituelle de centrer un sprite dans une boîte ou de mesurer un texte rendu par fontToSprite.\nRenvoie: largeur entière.\nDepuis: 2.00",
|
|
args = "(id)",
|
|
returns = "(integer)",
|
|
},
|
|
spriteIsPlaying = {
|
|
type = "function",
|
|
description = "Indique si l'animation du sprite avance en ce moment. Un sprite tout juste chargé renvoie false ; spritePlay la met en marche, et spritePause ou la fin d'une animation sans boucle l'arrête. Interrogez-la pour savoir quand une animation jouée une seule fois est terminée.\nRenvoie: booléen, true tant que l'animation joue.\nDepuis: 2.10",
|
|
args = "(id)",
|
|
returns = "(boolean)",
|
|
},
|
|
spriteLoad = {
|
|
type = "function",
|
|
description = "Charge une image et renvoie un handle entier pour les autres appels sprite*. Le nom passe par le système de fichiers virtuel du moteur, si bien que le fichier peut se trouver tel quel sur le disque ou dans un jeu empaqueté ; il est résolu par rapport au dossier dans lequel Singe a été lancé : ajoutez donc DIR devant pour les fichiers livrés avec votre jeu. Tous les formats de Formats vidéo, audio et de conteneur sont lus. Un GIF ou un WEBP animé de deux images ou plus se charge comme une animation, arrêtée sur l'image 0, sans lecture ni boucle ; tout autre fichier, y compris un GIF d'une seule image, se charge comme une image fixe. Une image de plus de 8 bits par canal, ou à pixels en virgule flottante, est convertie en RGBA 8 bits au chargement et traitée comme telle ensuite. Les pixels dont la valeur brute est 0 dans le format de pixel propre au fichier deviennent transparents. Le chargement est synchrone, et un fichier qui ne peut être ni ouvert ni décodé met fin au script avec le message d'erreur du chargeur au lieu de renvoyer nil.\nRenvoie: handle de sprite entier.\nDepuis: 1.x. Prise en charge des GIF/WEBP animés ajoutée en 2.10 ; la taille vectorielle en 3.00.",
|
|
args = "(filename: string [, width: number, height: number])",
|
|
returns = "(integer)",
|
|
},
|
|
spriteLoadData = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Construit un sprite à partir d'une image contenue dans une chaîne Lua au lieu d'un fichier. Tous les formats que lit spriteLoad sont lus ici, GIF et WEBP animés compris, et une animation chargée ainsi se comporte exactement comme une animation chargée depuis un fichier.\nRenvoie: nombre, le handle du sprite.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(data: string)",
|
|
returns = "(number)",
|
|
},
|
|
spriteLoadFrames = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Charge un fichier image qui contient count images de même taille sur une seule rangée et renvoie un handle de sprite. La largeur d'une image est la largeur du fichier divisée par count (division entière ; les colonnes restantes à droite sont abandonnées) et sa hauteur est celle du fichier. La planche devient une animation ordinaire arrêtée sur l'image 0, sans lecture ni boucle, si bien que spriteDraw montre l'image en cours plutôt que toute la bande (comme Hypseus la dessine), et que spriteDrawFrame choisit directement n'importe quelle image. Le nom passe par le système de fichiers virtuel, comme pour spriteLoad, et les pixels de valeur brute 0 deviennent transparents dans chaque image. Un nombre hors de 2 à 512, un fichier image de moins de count pixels de large ou un fichier illisible met fin au script avec une erreur.\nRenvoie: handle de sprite entier.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(count: number, filename)",
|
|
returns = "(integer)",
|
|
},
|
|
spriteLoop = {
|
|
type = "function",
|
|
description = "Indique si l'animation reprend à l'image 0 après sa dernière image ou s'y arrête. Les nouveaux sprites ne bouclent pas. Le réglage est consulté chaque fois que spriteDraw dépasse la dernière image, si bien qu'on peut le changer pendant que l'animation joue. Le régler sur un sprite déjà arrêté ne relance pas la lecture ; appelez spritePlay pour cela. L'argument doit être un booléen Lua.\nDepuis: 2.10",
|
|
args = "(id, loop)",
|
|
returns = "()",
|
|
},
|
|
spriteNew = {
|
|
type = "function",
|
|
description = "Crée un sprite vierge, chaque pixel transparent, que spriteSetPixels remplira : une image que le script fabrique lui-même au lieu de la charger. Chaque côté fait de 1 à 4096 pixels ; toute autre valeur met fin au script. Le sprite est une image fixe et fait tout ce que fait n'importe quelle autre image fixe : il se dessine, tourne, change d'échelle, s'étire et se teinte, et il peut servir de texture à un matériau.\nRenvoie: nombre, le handle du sprite.\nDepuis: 3.00",
|
|
args = "(width, height)",
|
|
returns = "(number)",
|
|
},
|
|
spritePause = {
|
|
type = "function",
|
|
description = "Arrête l'animation sur son image en cours. L'image continue d'être dessinée par spriteDraw, et le temps passé en pause n'est pas compté quand spritePlay reprend, si bien que l'image ne saute pas en avant. Mettre en pause un sprite qui ne joue pas ne change rien.\nDepuis: 2.10",
|
|
args = "(id)",
|
|
returns = "()",
|
|
},
|
|
spritePlay = {
|
|
type = "function",
|
|
description = "Démarre ou reprend l'animation à partir de son image en cours, en comptant le premier pas à partir du moment de l'appel. Un sprite qui joue déjà est laissé tel quel, si bien que le minuteur d'image n'est pas remis à zéro. Un nouveau sprite doit être démarré avec cet appel ; le chargement seul ne l'anime pas.\nDepuis: 2.10",
|
|
args = "(id)",
|
|
returns = "()",
|
|
},
|
|
spriteQuality = {
|
|
type = "function",
|
|
description = "Choisit l'échantillonnage employé quand le sprite est reconstruit pour une rotation ou une mise à l'échelle. RENDER_PIXELATED garde des bords de pixels nets, RENDER_SMOOTH interpole. Les nouveaux sprites sont pixelisés. Le réglage ne compte que tant qu'une rotation ou une échelle autre que 1.0 est en vigueur ; un sprite non transformé est dessiné directement depuis son image source, et les formes étirées de spriteDraw emploient toujours l'échantillonnage au plus proche voisin. Changer de mode reconstruit aussitôt l'image transformée : réglez-le donc une fois après le chargement plutôt qu'à chaque image.\nDepuis: 2.10",
|
|
args = "(id, mode)",
|
|
returns = "()",
|
|
},
|
|
spriteResetColorKey = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Acceptée pour la compatibilité, elle ne fait rien. Dans Hypseus, l'indicateur réapplique la couleur transparente aux copies que produisent spriteRotate et spriteScale, qui dessineraient sinon leur fond opaque ; les copies transformées de Singe portent la transparence dans leur canal alpha, si bien qu'il n'y a rien à réappliquer. Un mauvais handle ou un argument non booléen met fin au script, comme pour tout autre appel de sprite.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(id, enabled: boolean)",
|
|
returns = "()",
|
|
},
|
|
spriteRotate = {
|
|
type = "function",
|
|
description = "Fait tourner le sprite dans le sens des aiguilles d'une montre autour de son centre. L'angle est ramené modulo 360 et peut être fractionnaire ou négatif. L'échelle actuelle est conservée. L'image tournée n'est reconstruite que lorsque l'angle change vraiment : répéter le même angle à chaque image ne coûte rien, alors qu'un nouvel angle à chaque image reconstruit à chaque image. La rotation agrandit la boîte englobante, si bien que spriteGetWidth et spriteGetHeight changent et que la forme centrée de spriteDraw est celle à employer.\nDepuis: 2.10",
|
|
args = "(id, degrees)",
|
|
returns = "()",
|
|
},
|
|
spriteRotateAndScale = {
|
|
type = "function",
|
|
description = "spriteRotateAndScale(id, degrees, scale)\nspriteRotateAndScale(id, degrees, scaleX, scaleY)\nRègle ensemble la rotation et l'échelle. Le résultat est le même que spriteRotate suivi de spriteScale, mais l'image transformée est reconstruite une fois au lieu de deux, et pas du tout quand rien n'a changé. Les facteurs d'échelle devraient être supérieurs à 0 ; un facteur négatif est pris sans son signe, et un facteur qui ne laisserait aucun pixel, zéro compris, en laisse un à la place.\nDepuis: 2.10",
|
|
args = "(id, degrees, scale)",
|
|
returns = "()",
|
|
},
|
|
spriteRotateFrame = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Prend une image dans une planche de sprites, la fait tourner de degrees dans le sens des aiguilles d'une montre, la met à l'échelle du spriteScale propre au sprite, et garde le résultat pour spriteDrawRotatedFrame. La surface dessinée propre au sprite n'est pas touchée, si bien que spriteDraw et spriteDrawFrame continuent de montrer ce qu'ils montraient.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(id: number, degrees: number, frame: number)",
|
|
returns = "()",
|
|
},
|
|
spriteScale = {
|
|
type = "function",
|
|
description = "spriteScale(id, scale)\nspriteScale(id, scaleX, scaleY)\nMet le sprite à l'échelle autour de son centre, uniformément ou par axe, en gardant la rotation actuelle. Les facteurs doivent être supérieurs à 0 ; 1.0 est la taille naturelle, et un facteur d'exactement 1.0 sur les deux axes sans rotation dessine directement l'image source. L'image mise à l'échelle n'est reconstruite que lorsqu'un facteur change, avec l'échantillonnage choisi par spriteQuality. Préférez la forme étirée de spriteDraw quand la taille cible change à chaque image, puisqu'elle ne reconstruit rien.\nDepuis: 2.10",
|
|
args = "(id, scale)",
|
|
returns = "()",
|
|
},
|
|
spriteSetAlpha = {
|
|
type = "function",
|
|
description = "Multiplie l'alpha de chaque pixel par alpha / 255 à chaque dessin du sprite, sous toutes ses formes : spriteDraw, spriteDrawFrame, spriteDrawGrid et spriteDrawRotatedFrame, tourné ou non. 255, la valeur par défaut, le dessine tel quel et 0 pas du tout, si bien qu'un logo apparaît et disparaît en fondu sans seconde image. Les valeurs hors limites sont ramenées dans la plage.\nRenvoie: rien.\nDepuis: 3.00",
|
|
args = "(id: number, alpha: number)",
|
|
returns = "()",
|
|
},
|
|
spriteSetBlend = {
|
|
type = "function",
|
|
description = "La façon dont chaque dessin du sprite le pose sur ce qui est déjà sur l'overlay. SPRITE_ALPHA, la valeur par défaut, le dessine par-dessus selon son alpha. SPRITE_ADD ajoute sa couleur, pondérée par son alpha, à ce qui s'y trouve, si bien qu'il ne peut qu'éclaircir : halos, lumière, étincelles, et les shadebobs des vieilles démos, où une boule dessinée sur elle-même encore et encore finit par brûler jusqu'au blanc. SPRITE_MULTIPLY assombrit ce qui s'y trouve par sa couleur, pour les ombres et le verre teinté.\nRenvoie: rien.\nDepuis: 3.00",
|
|
args = "(id: number, SPRITE_ALPHA | SPRITE_ADD | SPRITE_MULTIPLY)",
|
|
returns = "()",
|
|
},
|
|
spriteSetFrame = {
|
|
type = "function",
|
|
description = "Fait sauter une animation à l'image donnée et relance le minuteur de délai de cette image, si bien que l'image est montrée pendant toute sa durée avant la suivante. L'état de lecture ne change pas : un sprite en pause reste en pause sur la nouvelle image et un sprite qui joue continue à partir d'elle. L'appel est ignoré pour les images fixes, pour les images hors de 0 à la dernière image, et quand le sprite montre déjà cette image.\nDepuis: 2.10",
|
|
args = "(id, frame)",
|
|
returns = "()",
|
|
},
|
|
spriteSetPixels = {
|
|
type = "function",
|
|
description = "Remplace chaque pixel d'un sprite fixe à partir d'une chaîne, une rangée à la fois depuis le haut. Sans palette, la chaîne compte quatre octets par pixel : rouge, vert, bleu et alpha. Avec une palette, c'est un octet par pixel, chacun le numéro d'une couleur de la palette, qui compte 256 couleurs de trois octets (rouge, vert et bleu, toutes opaques) ou de quatre (avec l'alpha). Une chaîne de mauvaise longueur, une palette de mauvaise longueur ou un sprite animé met fin au script.\nRenvoie: rien.\nDepuis: 3.00",
|
|
args = "(id: number, pixels: string [, palette: string])",
|
|
returns = "()",
|
|
},
|
|
spriteSetTint = {
|
|
type = "function",
|
|
description = "Multiplie la couleur de chaque pixel par r, g, b / 255 à chaque dessin du sprite, sous toutes ses formes. Un sprite blanc se dessine dans n'importe quelle couleur, et tout sprite peut être assombri ou tiré vers une couleur, sans seconde image : une seule boule blanche devient tout un arc-en-ciel de boules, et un sprite blanc d'un pixel étiré avec spriteDraw devient un rectangle plein de n'importe quelle couleur. 255, 255, 255, la valeur par défaut, le dessine tel quel. Les valeurs hors limites sont ramenées dans la plage.\nRenvoie: rien.\nDepuis: 3.00",
|
|
args = "(id: number, r, g, b)",
|
|
returns = "()",
|
|
},
|
|
spriteUnload = {
|
|
type = "function",
|
|
description = "Libère le sprite : l'image source, la copie transformée s'il y en a une, et toutes les images de l'animation. Le handle n'est plus valide ensuite et tout nouvel usage met fin au script avec une erreur. Les sprites créés par fontToSprite se libèrent de la même façon. Les sprites encore chargés à la fin du jeu sont libérés par le moteur, mais les jeux qui créent des sprites en cours de partie (du texte rendu à nouveau quand les scores changent, par exemple) doivent décharger les anciens, sans quoi la mémoire croît sans limite.\nDepuis: 2.00",
|
|
args = "(id)",
|
|
returns = "()",
|
|
},
|
|
srtClear = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Retire aussitôt ce qui est à l'écran -- un sous-titre ou un bandeau -- et laisse tels quels les sous-titres chargés et l'état d'activation. Le sous-titre qui était affiché reste masqué jusqu'à ce que le disque atteigne le suivant ; il n'y a rien à recharger ni rien à réactiver.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
srtEnable = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Indique si les sous-titres chargés s'affichent pendant la lecture du disque. Désactiver l'affichage retire avec lui le sous-titre affiché ; le réactiver affiche le sous-titre qui couvre l'image où se trouve le disque. Un script commence avec les sous-titres désactivés : un jeu qui les charge doit donc les activer.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(enabled)",
|
|
returns = "()",
|
|
},
|
|
srtLoad = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Lit un fichier SubRip par le système de fichiers virtuel et convertit ses horodatages en images du disque, à la fréquence d'images propre au disque. Le chargement remplace ce qui était chargé avant ; srtEnable l'affiche ensuite.\nRenvoie: booléen, qui indique si au moins un sous-titre a été chargé.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(filename: string)",
|
|
returns = "(boolean)",
|
|
},
|
|
srtLoadTrack = {
|
|
type = "function",
|
|
description = "Comme srtLoad, sauf que les sous-titres viennent de l'intérieur du conteneur même du disque plutôt que d'un fichier .srt placé à côté. Tout ce qui suit le chargement est identique : les sous-titres deviennent des numéros d'image du disque à la fréquence d'images du disque, si bien qu'ils sont retrouvés après n'importe quel saut, et srtEnable, srtPosition et srtClear fonctionnent de même.\nRenvoie: true quand au moins un sous-titre a été lu.\nDepuis: 3.00.",
|
|
args = "(track: number)",
|
|
returns = "(loaded)",
|
|
},
|
|
srtPosition = {
|
|
type = "function",
|
|
description = "Extension Hypseus. La position d'un sous-titre, en pourcentage de la hauteur de l'image à partir du haut, de 1 à 95. La valeur par défaut est 80. Un nombre hors de cette plage est ignoré, comme Hypseus l'ignore, au lieu d'être ramené dans la plage ou refusé.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(percent: number)",
|
|
returns = "()",
|
|
},
|
|
statsEnable = {
|
|
type = "function",
|
|
description = "Affiche ou masque l'overlay. Tant qu'il est affiché, l'écran est redessiné à chaque image, si bien que les nombres continuent de bouger même quand rien d'autre ne bouge à l'écran.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "(enabled)",
|
|
returns = "()",
|
|
},
|
|
statsIsEnabled = {
|
|
type = "function",
|
|
description = "Indique si l'overlay est affiché.\nRenvoie: true ou false.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(shown)",
|
|
},
|
|
takeScreenshot = {
|
|
type = "function",
|
|
description = "Un alias de singeScreenshot. Hypseus refuse une deuxième capture d'écran dans les cinq secondes ; Singe n'a pas une telle limite.",
|
|
args = "()",
|
|
returns = "()",
|
|
anchor = "_hypseus_compatibility",
|
|
},
|
|
terrainGetHeight = {
|
|
type = "function",
|
|
description = "La hauteur, dans le monde, du maillage de carte de hauteurs porté par node au point x, z du monde, interpolée entre les quatre échantillons les plus proches, ou nil au-delà de ses bords ou quand le maillage du nœud n'est pas une carte de hauteurs. La position et l'échelle du nœud dans le monde comptent ; sa rotation est ignorée, puisque les terrains sont à plat. Servez-vous-en pour placer des arbres, faire apparaître des choses sur le sol, ou pour une caméra qui suit la surface, sans le coût d'un lancer de rayon. Met fin au script pour un handle de nœud non valide.\nRenvoie: Un nombre, ou nil hors du terrain.\nDepuis: 3.00.",
|
|
args = "(node, x, z)",
|
|
returns = "(height)",
|
|
},
|
|
timerAfter = {
|
|
type = "function",
|
|
description = "Appelle la fonction une fois, plus tard. La fonction reçoit l'identifiant du minuteur, si bien qu'une même fonction peut servir à plusieurs minuteurs.\nRenvoie: un nombre ; l'identifiant du minuteur.\nDepuis: 3.00.",
|
|
args = "(milliseconds: number, function)",
|
|
returns = "(id)",
|
|
},
|
|
timerCancel = {
|
|
type = "function",
|
|
description = "Arrête un minuteur. Annuler un minuteur qui s'est déjà déclenché n'est pas une erreur, si bien que rien n'a besoin de vérifier avant.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "(id: number)",
|
|
returns = "()",
|
|
},
|
|
timerEvery = {
|
|
type = "function",
|
|
description = "Appelle la fonction encore et encore jusqu'à son annulation.\nRenvoie: un nombre ; l'identifiant du minuteur.\nDepuis: 3.00.",
|
|
args = "(milliseconds: number, function)",
|
|
returns = "(id)",
|
|
},
|
|
timerIsActive = {
|
|
type = "function",
|
|
description = "Indique si le minuteur se déclenchera encore : true pour un minuteur répétitif jusqu'à son annulation, false pour un minuteur à un coup qui s'est déjà déclenché.\nRenvoie: true ou false.\nDepuis: 3.00.",
|
|
args = "(id)",
|
|
returns = "(running)",
|
|
},
|
|
tweenCancel = {
|
|
type = "function",
|
|
description = "Arrête un tween là où il en est. Aucune des deux fonctions n'est plus appelée, et la valeur reste là où elle était arrivée.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "(id: number)",
|
|
returns = "()",
|
|
},
|
|
tweenIsActive = {
|
|
type = "function",
|
|
description = "Indique si le tween est encore en cours.\nRenvoie: true ou false.\nDepuis: 3.00.",
|
|
args = "(id)",
|
|
returns = "(running)",
|
|
},
|
|
tweenValue = {
|
|
type = "function",
|
|
description = "Fait passer un nombre de from à to en milliseconds, en appelant onUpdate(value, progress) à chaque image -- progress va de 0 à 1 et ignore la courbe -- et onDone() une fois à la fin. Le dernier onUpdate tombe toujours exactement sur to, si bien que rien ne s'arrête un pixel trop tôt.\nRenvoie: un nombre ; l'identifiant du tween.\nDepuis: 3.00.",
|
|
args = "(from, to, milliseconds: number, easing, onUpdate [, onDone])",
|
|
returns = "(id)",
|
|
},
|
|
utilDeepCopy = {
|
|
type = "function",
|
|
description = "Une copie de value jusqu'au bout : une table est copiée clé par clé, ses clés, ses valeurs et sa métatable copiées à leur tour ; tout le reste revient tel quel.",
|
|
args = "(value)",
|
|
returns = "()",
|
|
anchor = "frameworkhelpers",
|
|
},
|
|
utilDump = {
|
|
type = "function",
|
|
description = "value sous forme de texte à afficher. Une table devient { [\"key\"] = value,}, les tables imbriquées entre leurs propres accolades ; tout le reste passe par tostring. Pour une table qui mérite d'être lue, require(\"inspect\") fait mieux.",
|
|
args = "(value)",
|
|
returns = "()",
|
|
anchor = "frameworkhelpers",
|
|
},
|
|
utilGetTableSize = {
|
|
type = "function",
|
|
description = "Combien de clés contient t, toutes, pas seulement la séquence que mesure #t.",
|
|
args = "(t)",
|
|
returns = "()",
|
|
anchor = "frameworkhelpers",
|
|
},
|
|
utilOffsetTable = {
|
|
type = "function",
|
|
description = "Une copie profonde d'une table de la forme de SCANCODE, { NAME = { name = NAME, value = N } }, avec offset ajouté à chaque value.",
|
|
args = "(source, offset)",
|
|
returns = "()",
|
|
anchor = "frameworkhelpers",
|
|
},
|
|
utilSha256 = {
|
|
type = "function",
|
|
description = "Le SHA-256 d'une chaîne, sous forme de 64 caractères hexadécimaux en minuscules. Sûr pour le binaire : il fonctionne donc aussi bien sur les octets d'un fichier que sur du texte.\nRenvoie: chaîne, 64 caractères hexadécimaux en minuscules.\nDepuis: 3.00.",
|
|
args = "(data)",
|
|
returns = "(string)",
|
|
},
|
|
utilTrim = {
|
|
type = "function",
|
|
description = "s sans les blancs à ses deux extrémités.",
|
|
args = "(s)",
|
|
returns = "()",
|
|
anchor = "frameworkhelpers",
|
|
},
|
|
vehicleAddWheel = {
|
|
type = "function",
|
|
description = "Ajoute au véhicule une roue placée là où se trouve wheelNode par rapport au châssis lors de la prochaine construction du véhicule. Sans charge, la suspension tient la roue suspension unités sous ce point, et elle se comprime jusqu'à la moitié de cette longueur. Dès lors, le moteur de jeu écrit la transformation du nœud de la roue dans le monde après chaque pas, avec X comme essieu et Y vers le haut, si bien que le pneu visible a sa place sur un nœud enfant : un meshCylinder tourné de 90 degrés autour de Z. Les roues situées devant la position moyenne des roues, le long de l'axe avant, comptent comme roues avant : elles braquent par défaut et n'ont pas de frein à main. Un char répartit ses roues sur la chenille gauche ou droite selon le côté du châssis où elles se trouvent, et il lui en faut au moins une de chaque côté. Les valeurs inférieures à 0.001 sont relevées à cette valeur. Met fin au script à la 17e roue.\nRenvoie: L'indice de la roue, à partir de 0, pour vehicleSetWheel, vehicleIsWheelOnGround et vehicleGetWheelSlip.\nDepuis: 3.00.",
|
|
args = "(node, wheelNode, radius, width, suspension)",
|
|
returns = "(index)",
|
|
},
|
|
vehicleDelete = {
|
|
type = "function",
|
|
description = "Retire le véhicule de son châssis : la contrainte des roues, les commandes du conducteur et tous les réglages. Le corps reste un corps dynamique ordinaire, si bien qu'une épave continue de glisser et de culbuter, et les nœuds des roues restent là où le dernier pas les a posés ; plus rien ne les déplace, sauf si le script le fait. Un nœud sans véhicule met fin au script.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "()",
|
|
},
|
|
vehicleDrive = {
|
|
type = "function",
|
|
description = "Règle les commandes du conducteur, qui restent valables jusqu'à l'appel suivant : appelez-la donc à chaque image depuis onOverlayUpdate. L'accélérateur et la direction vont de -1 à 1, le frein et le frein à main de 0 à 1 ; les valeurs hors limites sont ramenées dans la plage, et les commandes omises valent 0. Une voiture ou une moto reçoit les quatre comme commandes de conducteur de Jolt, un accélérateur négatif faisant reculer par la marche arrière. Un char prend forward comme accélérateur, et right ralentit la chenille intérieure ; sans accélérateur, les chenilles tournent en sens inverse l'une de l'autre, si bien que la coque pivote sur place, et le frein à main est ignoré. Un bateau prend forward comme accélérateur de l'hélice, right comme gouvernail et brake comme une traînée contre la vitesse de la coque, ignore le frein à main, et ne fait rien du tout tant que l'hélice est hors de l'eau. Toute commande non nulle réveille un châssis qui s'est mis en sommeil.\nDepuis: 3.00.",
|
|
args = "(node, forward, right [, brake, handBrake])",
|
|
returns = "()",
|
|
},
|
|
vehicleGetGear = {
|
|
type = "function",
|
|
description = "Le rapport que la boîte a engagé : 0 au point mort, -1 en marche arrière, 1 et plus pour les rapports de marche avant, dans l'ordre où vehicleSetGears les a donnés. 0 pour un bateau et pour un véhicule qui n'a pas encore été construit.\nRenvoie: Un entier.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(gear)",
|
|
},
|
|
vehicleGetRpm = {
|
|
type = "function",
|
|
description = "Le régime du moteur en tours par minute, entre le ralenti et le régime maximal de vehicleSetEngine, pour un compte-tours ou la hauteur d'une boucle sonore de moteur. 0 pour un bateau, qui n'a pas de moteur, et pour un véhicule qui n'a pas encore été construit faute de roues.\nRenvoie: Un nombre.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(rpm)",
|
|
},
|
|
vehicleGetSpeed = {
|
|
type = "function",
|
|
description = "La vitesse du corps du châssis le long de son axe avant, en unités du monde par seconde, négative quand il recule ; le mouvement latéral d'une dérive ne compte pas. Fonctionne pour tous les types, bateaux compris, dès l'appel à vehicleNew.\nRenvoie: Un nombre.\nDepuis: 3.00.",
|
|
args = "(node)",
|
|
returns = "(speed)",
|
|
},
|
|
vehicleGetWheelSlip = {
|
|
type = "function",
|
|
description = "Combien la roue patine ou glisse dans son sens de roulement, de 0 (adhérence) à 1 (patinage ou blocage), pour le crissement des pneus, la fumée et les traces de dérapage. Toujours 0 pour les roues d'un char, pour un indice auquel ne correspond aucune roue du véhicule, et pour un véhicule qui n'a pas encore été construit.\nRenvoie: Un nombre.\nDepuis: 3.00.",
|
|
args = "(node, index)",
|
|
returns = "(slip)",
|
|
},
|
|
vehicleIsWheelOnGround = {
|
|
type = "function",
|
|
description = "Indique si le lancer de la suspension de cette roue a trouvé quelque chose contre quoi appuyer pendant ce pas. false pour un indice auquel ne correspond aucune roue du véhicule et pour un véhicule qui n'a pas encore été construit ; aucune erreur n'est levée dans un cas comme dans l'autre.\nRenvoie: Vrai ou faux.\nDepuis: 3.00.",
|
|
args = "(node, index)",
|
|
returns = "(touching)",
|
|
},
|
|
vehicleNew = {
|
|
type = "function",
|
|
description = "Fait du corps dynamique de node le châssis d'un véhicule. Une voiture, une moto ou un char a besoin d'au moins deux roues ajoutées par vehicleAddWheel avant que le pas de physique suivant le construise ; un bateau n'a pas de roues et il est poussé par une hélice qui ne fonctionne que sous une surface créée avec bodySetWater. Le nouveau véhicule part des valeurs par défaut : un moteur de 500 Nm qui culmine à 6000 tr/min et tourne au ralenti à 1000, la boîte automatique à cinq rapports de Jolt, 35 degrés de braquage, des freins de 1500 Nm et un frein à main de 4000 Nm, une suspension de 1,5 Hz avec un amortissement de 0,5, et aucune barre antiroulis. L'appeler de nouveau sur le même nœud supprime d'abord l'ancien véhicule et ses roues. Met fin au script pour un type inconnu, un nœud dont le corps n'est pas dynamique, un type à roues dans un monde 2D, ou quand 16 véhicules existent déjà.\nDepuis: 3.00.",
|
|
args = "(node, kind)",
|
|
returns = "()",
|
|
},
|
|
vehicleSetAntiRoll = {
|
|
type = "function",
|
|
description = "Ajoute une barre antiroulis sur chaque essieu, en newtons par mètre ; 0 (par défaut) n'en monte aucune, et une valeur négative devient 0. Une barre relie les deux roues motrices d'un essieu, si bien qu'un essieu dont les roues ne sont pas motrices n'a pas de barre, et qu'une moto n'en a aucune. Quelques centaines gardent une voiture à plat dans les virages ; trop soulève les roues intérieures. Un char ignore l'appel. Prend effet à la reconstruction du pas suivant.\nDepuis: 3.00.",
|
|
args = "(node, stiffness)",
|
|
returns = "()",
|
|
},
|
|
vehicleSetBrakes = {
|
|
type = "function",
|
|
description = "Règle le couple de freinage que chaque roue peut appliquer pédale au plancher, 1500 newtons-mètres par défaut, et le couple du frein à main sur les roues arrière, 4000 par défaut ; les roues avant, celles qui sont devant la position moyenne des roues, n'ont pas de frein à main. Les valeurs négatives deviennent 0. Un char freine ses chenilles avec les valeurs par défaut des chenilles de Jolt et ignore l'appel, et un bateau freine par une traînée contre sa propre vitesse, si bien qu'il ignore aussi l'appel. Prend effet à la reconstruction du pas suivant.\nDepuis: 3.00.",
|
|
args = "(node, brakeTorque, handBrakeTorque)",
|
|
returns = "()",
|
|
},
|
|
vehicleSetEngine = {
|
|
type = "function",
|
|
description = "Règle le moteur : le couple maximal en newtons-mètres, le régime maximal et le régime de ralenti en tours par minute. Les valeurs par défaut sont 500, 6000 et 1000, et le ralenti revient à 1000 quand il est omis. Le couple est maintenu à 1 ou plus, le régime maximal à 100 ou plus, et le ralenti entre 1 et le régime maximal. Un bateau n'a pas de moteur et ignore l'appel. Prend effet à la reconstruction du pas suivant.\nDepuis: 3.00.",
|
|
args = "(node, maxTorque, maxRpm [, minRpm])",
|
|
returns = "()",
|
|
},
|
|
vehicleSetGears = {
|
|
type = "function",
|
|
description = "Règle la boîte de vitesses : d'un à huit rapports de marche avant, le premier en premier, le rapport de marche arrière (2.9 par défaut, donné comme un nombre positif) et si la boîte passe les rapports d'elle-même (true par défaut). Un véhicule qui ne reçoit jamais cet appel utilise la boîte à cinq rapports de Jolt, 2.66, 1.78, 1.3, 1.0 et 0.74, avec la même marche arrière. Quand automatic est faux, la boîte ne passe plus les rapports d'elle-même, et aucun appel ne permet de les passer depuis le script. Un bateau n'a pas de boîte de vitesses et ignore l'appel. Prend effet à la reconstruction du pas suivant. Met fin au script quand la table est vide ou contient plus de huit rapports.\nDepuis: 3.00.",
|
|
args = "(node, { ratio, ... } [, reverseRatio, automatic])",
|
|
returns = "()",
|
|
},
|
|
vehicleSetRudder = {
|
|
type = "function",
|
|
description = "Règle le gouvernail d'un bateau : le couple autour de l'axe vertical de la coque quand la direction est à fond, 800 newtons-mètres par défaut. Le gouvernail mord avec la vitesse, un cinquième du couple à l'arrêt et la totalité à partir de 3 unités du monde par seconde, et il tourne dans l'autre sens quand le bateau recule. Il n'agit que tant que le point de l'hélice est sous l'eau. Un couple négatif devient 0 ; les types à roues ignorent l'appel.\nDepuis: 3.00.",
|
|
args = "(node, maxTorque)",
|
|
returns = "()",
|
|
},
|
|
vehicleSetSteering = {
|
|
type = "function",
|
|
description = "Règle de combien les roues directrices tournent au braquage maximal, en degrés ; 35 par défaut, ramené entre 0 et 89. Une commande de direction de -1 ou 1 venue de vehicleDrive atteint cet angle, et des commandes plus petites une part proportionnelle de celui-ci. Prend effet à la reconstruction du pas suivant. Un char tourne par ses chenilles et un bateau par son gouvernail, si bien que tous deux ignorent l'appel.\nDepuis: 3.00.",
|
|
args = "(node, maxDegrees)",
|
|
returns = "()",
|
|
},
|
|
vehicleSetSuspension = {
|
|
type = "function",
|
|
description = "Règle le ressort de chaque roue : sa fréquence propre en hertz (1.5 par défaut, maintenue à 0.1 ou plus ; plus elle est haute, plus le ressort est raide) et son taux d'amortissement (0.5 par défaut ; 0 rebondit, 1 se stabilise sans dépassement). Prend effet à la reconstruction du pas suivant, sur toutes les roues à la fois ; il n'y a pas de ressort par roue. Un bateau n'a pas de suspension et ignore l'appel.\nDepuis: 3.00.",
|
|
args = "(node, frequency, damping)",
|
|
returns = "()",
|
|
},
|
|
vehicleSetThrust = {
|
|
type = "function",
|
|
description = "Règle l'hélice d'un bateau : la force avec laquelle elle pousse à plein gaz, 2000 newtons par défaut, et le point du repère de la coque où elle pousse, 0, -0.2, 1 par défaut, juste sous le pont à la poupe. La poussée suit l'axe avant de la coque et n'a lieu que tant que ce point est sous une surface d'eau ; le même point décide si le gouvernail et le frein agissent. Une force négative devient 0. Les types à roues gardent les valeurs et les ignorent.\nDepuis: 3.00.",
|
|
args = "(node, maxForce, x, y, z)",
|
|
returns = "()",
|
|
},
|
|
vehicleSetWheel = {
|
|
type = "function",
|
|
description = "Indique si une roue tourne avec la direction et si le moteur l'entraîne, en remplaçant les valeurs par défaut pour cette roue : les roues avant braquent, et toutes les roues sont motrices sauf la roue avant d'une moto. Les roues motrices s'apparient d'un côté à l'autre du châssis en différentiels, un par essieu, et le couple du moteur est partagé à parts égales entre les essieux ; une roue motrice sans partenaire forme un essieu à elle seule. Un char ignore les deux indicateurs, puisque ses chenilles entraînent toutes les roues et font tourner la coque. Prend effet à la reconstruction du pas suivant. Met fin au script pour un indice auquel ne correspond aucune roue du véhicule.\nDepuis: 3.00.",
|
|
args = "(node, index, steered, driven)",
|
|
returns = "()",
|
|
},
|
|
videoDraw = {
|
|
type = "function",
|
|
description = "videoDraw(id, x, y, x2, y2)\nvideoDraw(id, x, y, centered)\nFait avancer une vidéo jusqu'à l'image que demande son horloge et dessine cette image sur l'overlay. L'horloge suit l'audio de la vidéo quand elle en a, et le temps de l'horloge sinon, si bien qu'un appel peut avancer de zéro, une ou plusieurs images ; une vidéo qui atteint sa fin reboucle sur l'image 0. La forme à cinq arguments étire l'image dans le rectangle allant de (x, y) à (x2, y2) inclus, toujours avec un échantillonnage au plus proche voisin et sans tenir compte de videoScale, videoRotate et videoQuality. La forme à quatre arguments dessine l'image à sa taille native transformée par videoScale et videoRotate, ancrée par son coin supérieur gauche ou, quand centered vaut true, par son centre ; l'image transformée n'est reconstruite que lorsque l'image ou la transformation change, et les coins laissés par la rotation sont transparents. Si le décodeur n'a pas encore produit d'image, rien n'est dessiné.\nDepuis: 2.00. La forme mise à l'échelle et tournée, avec l'indicateur centered, a été ajoutée en 2.10.",
|
|
args = "(id, x, y, x2, y2)",
|
|
returns = "()",
|
|
},
|
|
videoGetAudioTrack = {
|
|
type = "function",
|
|
description = "Renvoie l'indice, à partir de zéro, de la piste audio que joue une vidéo chargée. videoLoad choisit la piste désignée par --audio ou par l'entrée AUDIO_TRACK de games.dat (par défaut 0) quand le fichier a autant de pistes ; une vidéo sans aucun audio renvoie -1.\nRenvoie: indice de piste entier.\nDepuis: 2.10",
|
|
args = "(id)",
|
|
returns = "(integer)",
|
|
},
|
|
videoGetAudioTracks = {
|
|
type = "function",
|
|
description = "Renvoie le nombre de flux audio que contient une vidéo chargée. Un clip muet renvoie 0 ; protégez-en les boucles et l'arithmétique modulo.\nRenvoie: nombre entier, 0 ou plus.\nDepuis: 2.10",
|
|
args = "(id)",
|
|
returns = "(integer)",
|
|
},
|
|
videoGetFrame = {
|
|
type = "function",
|
|
description = "Renvoie l'image sur laquelle une vidéo chargée est positionnée, à partir de zéro. La position ne change que pendant que la vidéo joue et est dessinée, et elle revient à 0 quand le clip boucle. Comparez-la à vos propres repères de début et de fin pour faire boucler une section, ou à videoGetFrameCount pour détecter la fin d'un clip joué une seule fois.\nRenvoie: numéro d'image entier.\nDepuis: 2.00",
|
|
args = "(id)",
|
|
returns = "(integer)",
|
|
},
|
|
videoGetFrameCount = {
|
|
type = "function",
|
|
description = "Renvoie le nombre total d'images d'une vidéo chargée, tel que compté dans la table des images du fichier lors de son indexation. Les images vont de 0 à count - 1. Servez-vous-en pour des barres de progression, pour reboucler, ou pour détecter qu'un clip joué une seule fois est presque fini.\nRenvoie: nombre d'images entier.\nDepuis: 2.00",
|
|
args = "(id)",
|
|
returns = "(integer)",
|
|
},
|
|
videoGetHeight = {
|
|
type = "function",
|
|
description = "Renvoie la hauteur des images d'une vidéo chargée en pixels : la taille native du fichier, et non la taille à laquelle elle est dessinée. Combinez-la avec videoScale pour faire tenir un clip dans un cadre en gardant son format d'image.\nRenvoie: hauteur entière en pixels.\nDepuis: 2.00",
|
|
args = "(id)",
|
|
returns = "(integer)",
|
|
},
|
|
videoGetLanguage = {
|
|
type = "function",
|
|
description = "Renvoie l'étiquette de langue stockée dans le fichier pour une piste audio d'une vidéo chargée. L'étiquette est un code ISO 639 de trois lettres comme \"eng\" ou \"jpn\" ; une piste sans étiquette de trois lettres renvoie \"unk\". Une piste hors de 0 à videoGetAudioTracks(id) - 1 met fin au script.\nRenvoie: code de langue, une chaîne.\nDepuis: 2.10",
|
|
args = "(id, track)",
|
|
returns = "(string)",
|
|
},
|
|
videoGetLanguageDescription = {
|
|
type = "function",
|
|
description = "Cherche le nom anglais d'un code de langue. Contrairement aux autres fonctions video*, elle ne prend pas de handle ; c'est une simple consultation de table qui accepte les codes ISO 639-1 à deux lettres et les codes ISO 639-2 à trois lettres (les formes T comme B), comparés sans tenir compte de la casse. Les codes inconnus, y compris le \"unk\" renvoyé pour les pistes sans étiquette, donnent \"Unknown\". Framework.singe lui donne l'alias discGetLanguageDescription, par symétrie avec l'API du disque.\nRenvoie: nom de la langue, une chaîne, ou \"Unknown\".\nDepuis: 2.10",
|
|
args = "(code)",
|
|
returns = "(string)",
|
|
},
|
|
videoGetVolume = {
|
|
type = "function",
|
|
description = "Renvoie le volume stéréo d'une vidéo chargée sous forme de deux pourcentages. Une vidéo qui vient d'être chargée est au niveau de --volume_nonvldp sur les deux canaux (par défaut 100). Notez que deux valeurs sont renvoyées, la gauche d'abord.\nRenvoie: deux entiers, gauche et droite, chacun de 0 à 100 ; ou, sans argument, un seul entier, de 0 à 64.\nDepuis: 2.00 ; la forme sans argument, pour le disque, 3.00",
|
|
args = "([id])",
|
|
returns = "(left, right)",
|
|
},
|
|
videoGetWidth = {
|
|
type = "function",
|
|
description = "Renvoie la largeur des images d'une vidéo chargée en pixels : la taille native du fichier, et non la taille à laquelle elle est dessinée.\nRenvoie: largeur entière en pixels.\nDepuis: 2.00",
|
|
args = "(id)",
|
|
returns = "(integer)",
|
|
},
|
|
videoIsPlaying = {
|
|
type = "function",
|
|
description = "Indique si une vidéo chargée est à l'état de lecture, c'est-à-dire si videoPlay a été appelé depuis le dernier videoPause. Une vidéo en lecture n'avance toujours que pendant qu'elle est dessinée. Les vidéos démarrent en pause après videoLoad.\nRenvoie: booléen.\nDepuis: 2.00",
|
|
args = "(id)",
|
|
returns = "(boolean)",
|
|
},
|
|
videoLoad = {
|
|
type = "function",
|
|
description = "Ouvre un fichier vidéo et renvoie son handle. Tout conteneur et tout codec que le FFmpeg fourni sait décoder est accepté. Le moteur construit ou lit un index des images dans un dossier de données nommé d'après l'emplacement de la vidéo sous la racine des données de Singe, si bien que le premier chargement d'un gros fichier peut prendre un moment ; ne pas réussir à créer ce dossier met fin au script. La vidéo démarre en pause sur l'image 0, avec sa piste audio choisie d'après --audio ou l'entrée AUDIO_TRACK de games.dat (par défaut 0) quand le fichier a autant de pistes, et les deux canaux au niveau de --volume_nonvldp. Les images sont décodées en RVB pour pouvoir être dessinées sur l'overlay.\nRenvoie: handle de vidéo entier.\nDepuis: 2.00",
|
|
args = "(filename)",
|
|
returns = "(integer)",
|
|
},
|
|
videoPause = {
|
|
type = "function",
|
|
description = "Met en pause une vidéo chargée. Son horloge s'arrête, sa piste audio se met en pause et videoDraw continue de dessiner l'image sur laquelle elle s'est arrêtée. Mettre en pause une vidéo déjà en pause est sans danger.\nDepuis: 2.00",
|
|
args = "(id)",
|
|
returns = "()",
|
|
},
|
|
videoPlay = {
|
|
type = "function",
|
|
description = "Démarre ou reprend une vidéo chargée à partir de son image actuelle. L'horloge repart de cette image, si bien qu'une vidéo reprise après une longue pause continue là où elle s'était arrêtée au lieu de sauter en avant, et la piste audio reprend avec elle. La vidéo n'avance que pendant qu'elle est dessinée avec videoDraw ou utilisée comme matériau.\nDepuis: 2.00",
|
|
args = "(id)",
|
|
returns = "()",
|
|
},
|
|
videoQuality = {
|
|
type = "function",
|
|
description = "Choisit le filtrage utilisé quand la forme à quatre arguments de videoDraw met la vidéo à l'échelle ou la fait tourner. Toute valeur non nulle choisit RENDER_SMOOTH (bilinéaire), zéro choisit RENDER_PIXELATED (au plus proche voisin), la valeur par défaut. Un changement marque l'image transformée pour qu'elle soit reconstruite au prochain dessin. Il n'a aucun effet sur la forme étirée à cinq arguments, qui utilise toujours le plus proche voisin, ni sur une vidéo non transformée.\nDepuis: 2.10",
|
|
args = "(id, smooth)",
|
|
returns = "()",
|
|
},
|
|
videoRotate = {
|
|
type = "function",
|
|
description = "Règle la rotation qu'applique la forme à quatre arguments de videoDraw, en degrés dans le sens horaire, selon la même convention que spriteRotate. L'angle est réduit modulo 360 et garde son signe : 450 et 90 sont donc identiques et -90 fait tourner d'un quart de tour dans le sens antihoraire. L'échelle réglée par videoScale est conservée. La rotation se fait autour du centre de l'image : dessinez donc les vidéos tournées avec centered à true. Un angle modifié marque l'image transformée pour qu'elle soit reconstruite au prochain dessin.\nDepuis: 2.10",
|
|
args = "(id, degrees)",
|
|
returns = "()",
|
|
},
|
|
videoRotateAndScale = {
|
|
type = "function",
|
|
description = "videoRotateAndScale(id, degrees, scale)\nvideoRotateAndScale(id, degrees, scaleX, scaleY)\nRègle la rotation et l'échelle en un seul appel, avec les mêmes règles que videoRotate et videoScale : des degrés dans le sens horaire réduits modulo 360, et des facteurs d'échelle qui doivent être supérieurs à 0. Utilisez-la quand les deux changent à chaque image, pour que l'image transformée soit reconstruite une fois plutôt que deux.\nDepuis: 2.10",
|
|
args = "(id, degrees, scale)",
|
|
returns = "()",
|
|
},
|
|
videoScale = {
|
|
type = "function",
|
|
description = "videoScale(id, scale)\nvideoScale(id, scaleX, scaleY)\nRègle l'échelle qu'applique la forme à quatre arguments de videoDraw, comme facteur de la taille native ; 1.0 laisse la taille inchangée. La rotation réglée par videoRotate est conservée. Une échelle modifiée marque l'image transformée pour qu'elle soit reconstruite au prochain dessin. Des facteurs de 0 ou moins ne peuvent pas être rendus et interrompent le moteur au prochain videoDraw : maintenez donc les échelles animées au-dessus de zéro. La forme étirée à cinq arguments de videoDraw ignore ce réglage.\nDepuis: 2.10",
|
|
args = "(id, scale)",
|
|
returns = "()",
|
|
},
|
|
videoSeek = {
|
|
type = "function",
|
|
description = "Place une vidéo chargée sur frame et y fait repartir son horloge. L'état de lecture ou de pause ne change pas : une vidéo en lecture continue à partir de la nouvelle image à son prochain dessin, une vidéo en pause l'affiche. Le numéro d'image est ramené modulo le nombre d'images : -1 est donc la dernière image, et une valeur au-delà de la fin retombe dans le clip.\nDepuis: 2.00",
|
|
args = "(id, frame)",
|
|
returns = "()",
|
|
},
|
|
videoSetAudioTrack = {
|
|
type = "function",
|
|
description = "Fait passer une vidéo chargée sur une autre de ses pistes audio. L'audio en attente de l'ancienne piste est abandonné et la lecture se réaligne, si bien que le changement s'entend presque aussitôt. Choisir la piste déjà utilisée ne fait rien. Une piste hors de 0 à videoGetAudioTracks(id) - 1 met fin au script, ce qui, pour un clip muet, veut dire n'importe quelle valeur.\nDepuis: 2.10",
|
|
args = "(id, track)",
|
|
returns = "()",
|
|
},
|
|
videoSetVolume = {
|
|
type = "function",
|
|
description = "videoSetVolume(id, left, right)\nvideoSetVolume(volume)\nRègle le volume stéréo d'une vidéo chargée en pourcentages. Les valeurs sont ramenées entre 0 et 100 sans protester. Le réglage est mémorisé même pour un clip muet, et videoGetVolume le renvoie.\nDepuis: 2.00",
|
|
args = "(id, left, right)",
|
|
returns = "()",
|
|
},
|
|
videoUnload = {
|
|
type = "function",
|
|
description = "Arrête le décodeur et libère tout ce que détient une vidéo chargée : décodeur, piste audio, images en cache et surface transformée. Le handle n'est plus valide ensuite, et le passer à une fonction video* met fin au script : effacez donc la variable qui le contenait. Les vidéos encore chargées quand le script se termine sont libérées par le moteur.\nDepuis: 2.00",
|
|
args = "(id)",
|
|
returns = "()",
|
|
},
|
|
viewDelete = {
|
|
type = "function",
|
|
description = "Libère la vue et ses textures, et arrête la passe de rendu supplémentaire qu'elle coûtait. Les matériaux qui l'affichaient reviennent à leur propre texture. Le handle n'est plus valide ensuite et met fin au script s'il est réutilisé ; comme il ne peut exister que quatre vues à la fois, supprimez celles dont un niveau n'a plus besoin.\nDepuis: 3.00.",
|
|
args = "(view)",
|
|
returns = "()",
|
|
},
|
|
viewNew = {
|
|
type = "function",
|
|
description = "Crée une caméra rendue à chaque image dans une texture de width sur height (chacune ramenée entre 1 et 4096), depuis la vue par défaut jusqu'à ce que viewSetCamera désigne un nœud, et renvoie le handle de la vue pour materialSetView. La vue utilise la projection de cameraSetPerspective ou de cameraSetOrthographic à son propre format d'image. La scène est rendue une fois de plus par vue : 512 sur 384 suffit donc largement pour un écran, et un Raspberry Pi demande plus petit. Met fin au script quand la 3D n'est pas disponible ou que quatre vues sont déjà utilisées.\nRenvoie: Le handle de la vue, un entier.\nDepuis: 3.00.",
|
|
args = "(width, height)",
|
|
returns = "(view)",
|
|
},
|
|
viewSetCamera = {
|
|
type = "function",
|
|
description = "viewSetCamera(view, node)\nviewSetCamera(view, nil)\nviewSetCamera(view)\nLe nœud depuis lequel regarde la vue, le long de son propre -Z comme la caméra principale, si bien que le mouvement de ses parents compte. Avec nil ou sans second argument, la vue revient à la vue par défaut, depuis (0, 0, 5) en regardant l'origine. Donnez au nœud une voiture pour parent pour un rétroviseur, ou reflétez la position de la caméra principale par rapport à un mur pour un miroir dans ce mur. Met fin au script pour un handle de nœud non valide.\nDepuis: 3.00.",
|
|
args = "(view, node)",
|
|
returns = "()",
|
|
},
|
|
vldpFlash = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Met une image blanche sur le disque, comme le flash d'un vrai lecteur de laserdisc pendant une recherche. Elle apparaît aussitôt et la mise à jour suivante du disque la retire, si bien qu'elle dure une image dessinée, que le disque soit en lecture, en pause ou arrêté.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
vldpFocusArea = {
|
|
type = "function",
|
|
description = "Extension Hypseus. N'affiche qu'un rectangle de l'image du disque, donné en pixels du disque, étiré dans l'espace qu'occupe normalement l'image entière, avec la mise à l'échelle lissée habituelle du moteur de rendu ; les proportions suivent ce que donnent width et height. Le rectangle est maintenu à l'intérieur de l'image, et un rectangle entièrement hors de celle-ci met fin au script. Sans arguments, l'image entière est de nouveau affichée (Hypseus ignore cet appel et utilise vldpResetFocus ; Singe accepte les deux). Le recadrage n'est qu'un effet d'affichage : vldpGetPixel, vldpGetYUVPixel, la projection de la souris et le disque sur un matériau 3D gardent tous les coordonnées non recadrées, si bien que la détection des impacts sur une image agrandie doit être mise à l'échelle par l'appelant. Sans disque, l'appel ne fait rien. Remis à zéro quand le script se recharge.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "([x, y, width, height])",
|
|
returns = "()",
|
|
},
|
|
vldpGetHeight = {
|
|
type = "function",
|
|
description = "Renvoie la hauteur de la vidéo du disque en pixels, ou la hauteur du canevas sans disque. C'est la même liaison que discGetHeight, enregistrée sous son nom d'avant 2.00.\nRenvoie: hauteur entière en pixels.\nDepuis: 1.x",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
vldpGetPixel = {
|
|
type = "function",
|
|
description = "Lit la couleur d'un pixel de l'image du disque actuellement à l'écran. Les coordonnées sont des coordonnées de l'overlay : le moteur les divise par le rapport d'échelle entre l'overlay et la vidéo et les tronque, si bien que vous passez les mêmes nombres que ceux avec lesquels vous dessinez. Renvoie 0, 0, 0 quand il n'y a pas de disque, quand aucune image n'a encore été décodée, ou quand les coordonnées mises à l'échelle tombent hors de la vidéo. Les jeux qui s'en servent marquent en général les cibles dans la vidéo source d'une couleur distinctive et testent le pixel sous le réticule quand on appuie sur la gâchette, au lieu de créer des boîtes de collision pour chaque image.\nRenvoie: trois entiers, rouge, vert et bleu, chacun de 0 à 255.\nDepuis: 1.x",
|
|
args = "(x, y)",
|
|
returns = "(r, g, b)",
|
|
},
|
|
vldpGetRotate = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Renvoie la rotation de la présentation en degrés dans le sens horaire : l'option --rotate, ou ce que vldpSetRotate a réglé en dernier, et 0 quand ni l'une ni l'autre ne l'a fait. Seuls 0, 90, 180 et 270 peuvent être renvoyés, car ce sont les seuls angles selon lesquels Singe tourne.\nRenvoie: entier, 0, 90, 180 ou 270.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
vldpGetScale = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Renvoie le facteur d'échelle de l'affichage en pourcentage : l'option --scalefactor, ou ce que vldpSetScale a appliqué en dernier, et 100 quand rien n'a été donné. Les jeux Hypseus divisent 100 par cette valeur pour adapter la géométrie de leur overlay à l'image réduite. Elle n'a rien à voir avec vldpFocusArea ni avec la résolution de l'overlay.\nRenvoie: entier, de 25 à 100.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
vldpGetShift = {
|
|
type = "function",
|
|
description = "Le décalage de l'image dans la fenêtre, en pourcentages : les options --shiftx et --shifty, ou ce que vldpSetShift a appliqué en dernier, et 0, 0 quand rien n'a été donné. À l'extrême, un décalage remplit exactement la place qu'a laissée --scalefactor, si bien que 100 avec l'échelle à 100 ne déplace rien.\nRenvoie: deux entiers, chacun de -100 à 100.\nDepuis: 3.00.",
|
|
args = "()",
|
|
returns = "(x, y)",
|
|
},
|
|
vldpGetWidth = {
|
|
type = "function",
|
|
description = "Renvoie la largeur de la vidéo du disque en pixels, ou la largeur du canevas sans disque. C'est la même liaison que discGetWidth, enregistrée sous son nom d'avant 2.00.\nRenvoie: largeur entière en pixels.\nDepuis: 1.x",
|
|
args = "()",
|
|
returns = "(integer)",
|
|
},
|
|
vldpGetYUVPixel = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Lit les échantillons bruts d'un pixel de l'image du disque actuellement affichée, avant toute conversion de couleur : la luminance et les deux échantillons de chrominance, chacun de 0 à 255, la chrominance étant à la résolution 4:2:0 de l'image décodée (le neutre est 128). Les coordonnées sont des coordonnées de l'overlay, mises à l'échelle et tronquées exactement comme le fait vldpGetPixel. Renvoie -1, -1, -1 quand il n'y a pas de disque, quand aucune image n'a encore été décodée, ou quand les coordonnées mises à l'échelle tombent hors de la vidéo. Insensible à vldpFocusArea et à vldpSetMonochrome. Moins coûteux que vldpGetPixel quand seule la luminosité compte.\nRenvoie: trois entiers, Y, U et V, chacun de 0 à 255, ou -1, -1, -1.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(x, y)",
|
|
returns = "(y, u, v)",
|
|
},
|
|
vldpResetFocus = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Affiche de nouveau l'image entière du disque après vldpFocusArea, exactement comme le fait vldpFocusArea() sans arguments. C'est le nom qu'Hypseus donne lui-même à cette remise à zéro, conservé pour que ses jeux tournent sans modification.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "()",
|
|
returns = "()",
|
|
},
|
|
vldpSetBlend = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Lisse l'image du disque verticalement : chaque échantillon de luminance devient la moyenne de lui-même et des échantillons situés juste au-dessus et juste au-dessous. C'est le filtre de mélange à trois coefficients propre à Hypseus, et il existe pour adoucir les bords durs d'un transfert entrelacé sans adoucir l'image horizontalement.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(enabled)",
|
|
returns = "()",
|
|
},
|
|
vldpSetLuma = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Éclaircit ou assombrit l'image du disque. level va de 0 à 8, et 4, la valeur par défaut, ne change rien : l'écart à 4 est ajouté à chaque échantillon de luminance en huitièmes, si bien que 0 divise la luminosité par deux, que 8 l'augmente de moitié, et que les crans intermédiaires sont réguliers. Un niveau hors de 0 à 8 met fin au script.\nRenvoie: rien.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(enabled [, level])",
|
|
returns = "()",
|
|
},
|
|
vldpSetMonochrome = {
|
|
type = "function",
|
|
description = "Extension Hypseus. N'affiche le disque qu'en luminance : les plans de chrominance sont remplacés par des échantillons neutres au moment où chaque image est transférée, si bien qu'un disque en pause change aussitôt. Avec un framefile, le réglage suit la lecture d'un segment à l'autre. vldpGetPixel et vldpGetYUVPixel continuent de renvoyer les échantillons de couleur, et les vidéos supplémentaires dessinées avec videoDraw ne sont pas touchées. Associez-le à overlaySetMonochrome pour un mode noir et blanc. Sans disque, l'appel ne fait rien ; remis à zéro quand le script se recharge. Un argument non booléen met fin au script.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(enabled)",
|
|
returns = "()",
|
|
},
|
|
vldpSetRotate = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Fait tourner toute la présentation dans le sens horaire : le disque, l'overlay, les GUI, la scène 3D et les particules tournent ensemble, et les positions de la souris et des pistolets optiques sont tournées en sens inverse pour qu'un clic tombe toujours là où il est dessiné. Un quart de tour échange la forme de la zone présentée, si bien qu'une fenêtre en portrait est remplie au lieu de recevoir une bande cernée de noir.\nRenvoie: booléen, vrai quand la rotation a été appliquée.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(degrees: integer)",
|
|
returns = "(boolean)",
|
|
},
|
|
vldpSetScale = {
|
|
type = "function",
|
|
description = "Extension Hypseus. Réduit l'image autour de son centre à percent de la fenêtre, l'équivalent en cours de jeu de --scalefactor, et reconstruit le rectangle vidéo pour que le disque, l'overlay, les GUI, la scène 3D, les particules, l'éventuelle bordure Sinden et la projection de la souris le suivent tous. Les valeurs hors de 25 à 100 répondent false et ne changent rien, au lieu de mettre fin au script.\nRenvoie: booléen, vrai quand l'échelle a été appliquée.\nDepuis: 3.00, comme extension d'Hypseus Singe.",
|
|
args = "(percent: integer)",
|
|
returns = "(boolean)",
|
|
},
|
|
vldpSetShift = {
|
|
type = "function",
|
|
description = "Déplace l'image dans la fenêtre, l'équivalent en cours de jeu de --shiftx et --shifty, et reconstruit le rectangle vidéo pour que le disque, l'overlay, les GUI, la scène 3D, les particules, l'éventuelle bordure Sinden et la projection de la souris le suivent tous. Les valeurs sont des pourcentages de la place qu'a laissée --scalefactor, si bien qu'avec l'échelle à 100 il n'y a nulle part où aller. Une valeur hors de -100 à 100 met fin au script, contrairement à vldpSetScale, qui répond false.\nRenvoie: rien.\nDepuis: 3.00.",
|
|
args = "(x: integer, y: integer)",
|
|
returns = "()",
|
|
},
|
|
vldpSetVerbose = {
|
|
type = "function",
|
|
description = "Ne fait rien. Elle activait autrefois la journalisation dans le lecteur vidéo d'origine ; l'appel accepte n'importe quels arguments, écrit une ligne de trace et rend la main. La trace du moteur et celle du script sont désormais des options de ligne de commande (--program et --trace).\nDepuis: 1.x",
|
|
args = "(...)",
|
|
returns = "()",
|
|
},
|
|
voiceFree = {
|
|
type = "function",
|
|
description = "Libère un encodeur ou un décodeur Opus, un processeur de voix ou un tampon de gigue.\nDepuis: 3.00.",
|
|
args = "(handle)",
|
|
returns = "()",
|
|
},
|
|
voiceProcess = {
|
|
type = "function",
|
|
description = "Une trame du microphone, nettoyée : l'écho de ce que jouaient les haut-parleurs retiré, le bruit de fond atténué, et le niveau égalisé.\nRenvoie: la trame nettoyée, et true quand elle ressemble à une voix -- le moyen de ne rien envoyer tant que personne ne parle.\nDepuis: 3.00.",
|
|
args = "(processor, mic [, speaker])",
|
|
returns = "(cleaned, voiced)",
|
|
},
|
|
voiceProcessorNew = {
|
|
type = "function",
|
|
description = "Renvoie: le handle du processeur.\nDepuis: 3.00.",
|
|
args = "([frame [, rate [, tailMs]]])",
|
|
returns = "(processor)",
|
|
},
|
|
}
|