summaryrefslogtreecommitdiff
path: root/doc/gdscript.lyx
diff options
context:
space:
mode:
Diffstat (limited to 'doc/gdscript.lyx')
-rw-r--r--doc/gdscript.lyx2531
1 files changed, 0 insertions, 2531 deletions
diff --git a/doc/gdscript.lyx b/doc/gdscript.lyx
deleted file mode 100644
index a4b2230121..0000000000
--- a/doc/gdscript.lyx
+++ /dev/null
@@ -1,2531 +0,0 @@
-#LyX 2.0 created this file. For more info see http://www.lyx.org/
-\lyxformat 413
-\begin_document
-\begin_header
-\textclass article
-\use_default_options true
-\maintain_unincluded_children false
-\language english
-\language_package default
-\inputencoding auto
-\fontencoding global
-\font_roman default
-\font_sans default
-\font_typewriter default
-\font_default_family default
-\use_non_tex_fonts false
-\font_sc false
-\font_osf false
-\font_sf_scale 100
-\font_tt_scale 100
-
-\graphics default
-\default_output_format default
-\output_sync 0
-\bibtex_command default
-\index_command default
-\paperfontsize default
-\use_hyperref false
-\papersize default
-\use_geometry false
-\use_amsmath 1
-\use_esint 1
-\use_mhchem 1
-\use_mathdots 1
-\cite_engine basic
-\use_bibtopic false
-\use_indices false
-\paperorientation portrait
-\suppress_date false
-\use_refstyle 0
-\index Index
-\shortcut idx
-\color #008000
-\end_index
-\secnumdepth 3
-\tocdepth 3
-\paragraph_separation indent
-\paragraph_indentation default
-\quotes_language english
-\papercolumns 1
-\papersides 1
-\paperpagestyle default
-\tracking_changes false
-\output_changes false
-\html_math_output 0
-\html_css_as_file 0
-\html_be_strict false
-\end_header
-
-\begin_body
-
-\begin_layout Title
-GD Scripting Language (GDScript)
-\end_layout
-
-\begin_layout Section
-Introduction
-\end_layout
-
-\begin_layout Standard
-GDScript is a high level, dynamically typed programming language used to
- create content.
- It uses a syntax that is very similar to the Python language (blocks are
- indent-based) and it's goal is to be very optimal and tigthly integrated
- with the engine, allowing great flexibility for content creation and integratio
-n.
-
-\end_layout
-
-\begin_layout Section
-Example
-\end_layout
-
-\begin_layout Standard
-Some people can learn better by just taking a look at the syntax, so here's
- a simple example of how it looks.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-#a file is a class!
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#inheritance
-\end_layout
-
-\begin_layout Plain Layout
-
-extends BaseClass
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#member variables
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-var a=5
-\end_layout
-
-\begin_layout Plain Layout
-
-var s="Hello"
-\end_layout
-
-\begin_layout Plain Layout
-
-var arr=[1,2,3]
-\end_layout
-
-\begin_layout Plain Layout
-
-var dict={"key":"value", 2:3}
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#constants
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-const answer=42
-\end_layout
-
-\begin_layout Plain Layout
-
-const thename="Charly"
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#built-in vector types
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-var v2 = Vector2(1,2)
-\end_layout
-
-\begin_layout Plain Layout
-
-var v3 = Vector3(1,2,3)
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#function
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-func some_function(param1,param2):
-\end_layout
-
-\begin_layout Plain Layout
-
- var local_var=5
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
- if param1 < local_var:
-\end_layout
-
-\begin_layout Plain Layout
-
- print(param1)
-\end_layout
-
-\begin_layout Plain Layout
-
- elif param2 > 5:
-\end_layout
-
-\begin_layout Plain Layout
-
- print(param2)
-\end_layout
-
-\begin_layout Plain Layout
-
- else:
-\end_layout
-
-\begin_layout Plain Layout
-
- print("fail!")
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
- for i in range(20):
-\end_layout
-
-\begin_layout Plain Layout
-
- print(i)
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
- while(param2!=0):
-\end_layout
-
-\begin_layout Plain Layout
-
- param2-=1
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
- var local_var2 = param1+3
-\end_layout
-
-\begin_layout Plain Layout
-
- return local_var2
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#subclass
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-class Something:
-\end_layout
-
-\begin_layout Plain Layout
-
- var a=10
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#constructor
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-func _init():
-\end_layout
-
-\begin_layout Plain Layout
-
- print("constructed!")
-\end_layout
-
-\begin_layout Plain Layout
-
- var lv = Something.new()
-\end_layout
-
-\begin_layout Plain Layout
-
- print(lv.a)
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Language
-\end_layout
-
-\begin_layout Subsection
-Identifiers
-\end_layout
-
-\begin_layout Standard
-Any string that restricts itself to alphabetic characters ('a' to 'z' and
- 'A' to 'Z'), digits ('0' to '9') and '_' qualifies as an identifier.
- As an extra restriction, identifiers must not begin with a digit.
- Identifiers are case-sensitive ('foo' is different to 'FOO').
-\end_layout
-
-\begin_layout Subsection
-Keywords
-\end_layout
-
-\begin_layout Standard
-The following is the list of keywords supported by the language.
- Since keywords are reserved words (tokens), they can't be used as identifiers.
-\end_layout
-
-\begin_layout Subsection
-Operators
-\end_layout
-
-\begin_layout Standard
-The following is the list of supported operators and their precedence (TODO,
- change since this was made to reflect python operators)
-\end_layout
-
-\begin_layout Standard
-\begin_inset Tabular
-<lyxtabular version="3" rows="18" columns="2">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="top" width="0">
-<column alignment="center" valignment="top" width="0">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Operator
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Note
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-x[index]
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Subscription, Highest Priority
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-x.attribute
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Attribute Reference
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-extends
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Instance Type Checker
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-~
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Bitwise NOT
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
--x
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Negative
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-* / %
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Mult / Div / Remainder
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-+ -
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Addition / Substraction
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-<< >>
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Bit Shifting
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-&
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Bitwise AND
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-^
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Bitwise XOR
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-|
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Bitwise OR
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-< > == != >= <=
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Comparisons
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-in
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Content Test
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-! not
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Boolean NOT
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-and &&
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Boolean AND
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-or ||
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Boolean OR
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-= += -= *= /= ^= &= |=
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Assignment, Lowest Priority
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Literals
-\end_layout
-
-\begin_layout Standard
-\begin_inset Tabular
-<lyxtabular version="3" rows="6" columns="2">
-<features tabularvalignment="middle">
-<column alignment="center" valignment="top" width="0">
-<column alignment="center" valignment="top" width="0">
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Literal
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Name
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-45
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Base 10 Integer
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-0x8F51
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Base 16 (hex) Integer
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-3.14, 58.1e-10
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Floating Point Number (real)
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-'Hello',
-\begin_inset Quotes eld
-\end_inset
-
-Hi
-\begin_inset Quotes erd
-\end_inset
-
-
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Strings
-\end_layout
-
-\end_inset
-</cell>
-</row>
-<row>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-@'Hello', @'Hi'
-\end_layout
-
-\end_inset
-</cell>
-<cell alignment="center" valignment="top" topline="true" bottomline="true" leftline="true" rightline="true" usebox="none">
-\begin_inset Text
-
-\begin_layout Plain Layout
-Internationalized Strings
-\end_layout
-
-\end_inset
-</cell>
-</row>
-</lyxtabular>
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Comments
-\end_layout
-
-\begin_layout Standard
-Anything from a '#' to the end of the line is ignored and is considered
- a comment.
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-lstparams "language=Python"
-inline false
-status open
-
-\begin_layout Plain Layout
-
-# This is a comment
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Built-in Types
-\end_layout
-
-\begin_layout Subsection
-Basic Bult-In Types
-\end_layout
-
-\begin_layout Standard
-A variable in GDScript can be assigned many of several built-in types.
-
-\end_layout
-
-\begin_layout Subsubsection
-null
-\end_layout
-
-\begin_layout Standard
-'null' is a data type that contains no information, nothing assigned, and
- it's just empy.
- It can only be set to one value: 'null'.
-\end_layout
-
-\begin_layout Subsubsection
-bool
-\end_layout
-
-\begin_layout Standard
-Boolean data type, can only contain 'true' or 'false'.
-\end_layout
-
-\begin_layout Subsubsection
-int
-\end_layout
-
-\begin_layout Standard
-Integer data type, can only contain integer numbers, negative and positive.
-\end_layout
-
-\begin_layout Subsubsection
-float
-\end_layout
-
-\begin_layout Standard
-contains a floating point value (real).
-\end_layout
-
-\begin_layout Subsubsection
-String
-\end_layout
-
-\begin_layout Standard
-Sequence of characters in unicode format.
- Strings can contain the standard C escape sequences.
-\end_layout
-
-\begin_layout Subsection
-Vector Built-In Types
-\end_layout
-
-\begin_layout Subsubsection
-Vector2/Size2
-\end_layout
-
-\begin_layout Standard
-2D vector type, containing x and y fields.
- Can alternatively access fields as width and height for readability.
- Can also be accessed as array.
-\end_layout
-
-\begin_layout Subsubsection
-Rect2
-\end_layout
-
-\begin_layout Standard
-2D Rectangle type.
- Contains 2 vectors fields,
-\begin_inset Quotes eld
-\end_inset
-
-pos
-\begin_inset Quotes erd
-\end_inset
-
- and size
-\begin_inset Quotes erd
-\end_inset
-
-.
- Alternatively contains an
-\begin_inset Quotes eld
-\end_inset
-
-end
-\begin_inset Quotes erd
-\end_inset
-
- field which is
-\begin_inset Quotes eld
-\end_inset
-
-pos+size
-\begin_inset Quotes erd
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Subsubsection
-Vector3
-\end_layout
-
-\begin_layout Standard
-3D vector type.
- Contains x, y and z fields.
- Can also be accessed as array.
-\end_layout
-
-\begin_layout Subsubsection
-Matrix32
-\end_layout
-
-\begin_layout Standard
-3x2 matrix used for 2D transforms.
-\end_layout
-
-\begin_layout Subsubsection
-Plane
-\end_layout
-
-\begin_layout Standard
-3D Plane type in normalized form.
- Contains a
-\begin_inset Quotes eld
-\end_inset
-
-normal
-\begin_inset Quotes erd
-\end_inset
-
- vector field and a
-\begin_inset Quotes eld
-\end_inset
-
-d
-\begin_inset Quotes erd
-\end_inset
-
- scalar distance.
-\end_layout
-
-\begin_layout Subsubsection
-Quat
-\end_layout
-
-\begin_layout Standard
-Quaternion, datatype used for representing a 3D rotation.
- It's useful for interpolating rotations.
-\end_layout
-
-\begin_layout Subsubsection
-AABB/Box3
-\end_layout
-
-\begin_layout Standard
-Axis Aligned bounding box (or alternatively, 3D box).
- Contains 2 vectors fields,
-\begin_inset Quotes eld
-\end_inset
-
-pos
-\begin_inset Quotes erd
-\end_inset
-
- and size
-\begin_inset Quotes erd
-\end_inset
-
-.
- Alternatively contains an
-\begin_inset Quotes eld
-\end_inset
-
-end
-\begin_inset Quotes erd
-\end_inset
-
- field which is
-\begin_inset Quotes eld
-\end_inset
-
-pos+size
-\begin_inset Quotes erd
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Subsubsection
-Matrix3
-\end_layout
-
-\begin_layout Standard
-3x3 matrix used for 3D rotation and scale.
- Contains 3 vector fields x,y and z.
- Can also be accessed as array of 3D vectors.
-\end_layout
-
-\begin_layout Subsubsection
-Transform
-\end_layout
-
-\begin_layout Standard
-3D Transform, contains a Matrix3 field
-\begin_inset Quotes eld
-\end_inset
-
-basis
-\begin_inset Quotes erd
-\end_inset
-
- and a Vector3 field
-\begin_inset Quotes eld
-\end_inset
-
-origin
-\begin_inset Quotes erd
-\end_inset
-
-.
-\end_layout
-
-\begin_layout Subsection
-Engine Built-In Types
-\end_layout
-
-\begin_layout Subsubsection
-Color
-\end_layout
-
-\begin_layout Standard
-Color datatype, contains r,g,b,a fields.
- Can also be accessed as h,s,v for hue/saturation/value.
-\end_layout
-
-\begin_layout Subsubsection
-Image
-\end_layout
-
-\begin_layout Standard
-Contains a 2D Image of custom format and allows direct access to the pixels.
-\end_layout
-
-\begin_layout Subsubsection
-NodePath
-\end_layout
-
-\begin_layout Standard
-Compiled path to a node, used mainly in the scene system.
- Can be easily asigned from/to a String.
-\end_layout
-
-\begin_layout Subsubsection
-RID
-\end_layout
-
-\begin_layout Standard
-Resource ID (RID).
- Servers use generic RIDs to reference opaque data.
-\end_layout
-
-\begin_layout Subsubsection
-Object
-\end_layout
-
-\begin_layout Standard
-Base class for anything not a built-in type.
-
-\end_layout
-
-\begin_layout Subsubsection
-InputEvent
-\end_layout
-
-\begin_layout Standard
-Events from input devices are contained in very compact form in InputEvent
- objects.
- Due to fact they can be received in high amounts from frame to frame, they
- are optimized in their own datatype.
-
-\end_layout
-
-\begin_layout Subsection
-Container Built-In Types
-\end_layout
-
-\begin_layout Subsubsection
-Array
-\end_layout
-
-\begin_layout Standard
-Generic sequence of objects.
- It's size can be changed to anything and starts from index 0.
-
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-var arr=[]
-\end_layout
-
-\begin_layout Plain Layout
-
-arr=[1,2,3]
-\end_layout
-
-\begin_layout Plain Layout
-
-arr[0]="Hi!"
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-Arrays are allocated linearly in memory, so they are fast, but very large
- arrays (more than tens of thousands of elements) may cause fragmentation.
- There are specialized arrays for some built-in datatypes which do not suffer
- from this and use much less memory.
-\end_layout
-
-\begin_layout Subsubsection
-Dictionary
-\end_layout
-
-\begin_layout Standard
-Associative container which contains values referenced by unique keys.
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-var dict={4:5, "a key":"a value", 28:[1,2,3]}
-\end_layout
-
-\begin_layout Plain Layout
-
-dict["Hi!"]=0
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsubsection
-ByteArray
-\end_layout
-
-\begin_layout Standard
-Array of bytes.
- Can only contains bytes (integers from 0 to 255).
- Optimized for memory usage, can't fragment the memory.
-\end_layout
-
-\begin_layout Subsubsection
-IntArray
-\end_layout
-
-\begin_layout Standard
-Array of integers.
- Can only contain integers.
- Optimized for memory usage, can't fragment the memory.
-\end_layout
-
-\begin_layout Subsubsection
-FloatArray
-\end_layout
-
-\begin_layout Standard
-Array of floats, can only contain floats.
- Optimized for memory usage, can't fragment the memory.
-\end_layout
-
-\begin_layout Subsubsection
-StringArray
-\end_layout
-
-\begin_layout Standard
-Array of strings, can only contain strings.
- Optimized for memory usage, can't fragment the memory.
-\end_layout
-
-\begin_layout Subsubsection
-Vector2Array
-\end_layout
-
-\begin_layout Standard
-Array of Vector2, can only contain 2D Vectors.
- Optimized for memory usage, can't fragment the memory.
-\end_layout
-
-\begin_layout Subsubsection
-Vector3Array
-\end_layout
-
-\begin_layout Standard
-Array of Vector3, can only contain 3D Vectors.
- Optimized for memory usage, can't fragment the memory.
-\end_layout
-
-\begin_layout Subsubsection
-ColorArray
-\end_layout
-
-\begin_layout Standard
-Array of Color, can only contains colors.
- Optimized for memory usage, can't fragment the memory.
-\end_layout
-
-\begin_layout Section
-Data
-\end_layout
-
-\begin_layout Subsection
-Variables
-\end_layout
-
-\begin_layout Standard
-Variables can exist as class members or local to functions.
- They are created with the
-\begin_inset Quotes eld
-\end_inset
-
-var
-\begin_inset Quotes erd
-\end_inset
-
- keyword and may be, optionally, be assigned a value upon initialization.
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-var a # datatype is null by default
-\end_layout
-
-\begin_layout Plain Layout
-
-var b = 5
-\end_layout
-
-\begin_layout Plain Layout
-
-var c = 3.8
-\end_layout
-
-\begin_layout Plain Layout
-
-var d = b+c # variables are always initialized in order
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Constants
-\end_layout
-
-\begin_layout Standard
-Constants are similar to variables, but must be constants or constant expression
-s and must be assigned on initialization.
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-const a = 5
-\end_layout
-
-\begin_layout Plain Layout
-
-const b = Vector2(20,20)
-\end_layout
-
-\begin_layout Plain Layout
-
-const c = 10+20 # constant expression
-\end_layout
-
-\begin_layout Plain Layout
-
-const d = Vector2(20,30).x # constant expression: 20
-\end_layout
-
-\begin_layout Plain Layout
-
-const e = [1,2,3,4][0] # constant expression: 1
-\end_layout
-
-\begin_layout Plain Layout
-
-const f = sin(20) # sin() can be used in constant expression
-\end_layout
-
-\begin_layout Plain Layout
-
-const g = x+20 # invalid, not a constant expression!
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Functions
-\end_layout
-
-\begin_layout Standard
-Functions always belong to a class.
- The scope priority for variable look-up is: local -> class member -> global.
-
-\begin_inset Quotes eld
-\end_inset
-
-self
-\begin_inset Quotes erd
-\end_inset
-
- is provided as an option for accessing class members but is not required
- always (and must
-\emph on
-not
-\emph default
- be defined as first parameter, like in Python).
- For performance reasons, functions are not considered class members, so
- they can't be referenced directly.
- A function can return at any point.
- The default return value is null.
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-func myfunction(a,b):
-\end_layout
-
-\begin_layout Plain Layout
-
- print(a)
-\end_layout
-
-\begin_layout Plain Layout
-
- print(b)
-\end_layout
-
-\begin_layout Plain Layout
-
- return a+b # return is optional, otherwise null is returned
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsubsection
-Statements and Control Flow
-\end_layout
-
-\begin_layout Standard
-Statements are standard, and can be assignments, function calls, control
- flow structures, etc (see below).
-
-\begin_inset Quotes eld
-\end_inset
-
-;
-\begin_inset Quotes erd
-\end_inset
-
- as separator is entirely optional.
-\end_layout
-
-\begin_layout Subsubsection
-if/else/elif
-\end_layout
-
-\begin_layout Standard
-Simple conditions are created by using the
-\emph on
-if/else/elif
-\emph default
- syntax.
- Parenthesis around statements is allowed but not requiered.
- Given the nature of the tab-based indentation, elif can be used instead
- of else:/if: to mantain a level of indentation.
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-if [expression]:
-\end_layout
-
-\begin_layout Plain Layout
-
- statement(s)
-\end_layout
-
-\begin_layout Plain Layout
-
-elif [expression]:
-\end_layout
-
-\begin_layout Plain Layout
-
- statement(s)
-\end_layout
-
-\begin_layout Plain Layout
-
-else:
-\end_layout
-
-\begin_layout Plain Layout
-
- statement(s)
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsubsection
-while
-\end_layout
-
-\begin_layout Standard
-Simple loops are created by using
-\emph on
-while
-\emph default
- syntax.
- Loops can be broken using
-\emph on
-break
-\emph default
-, or continued using
-\emph on
-continue
-\emph default
-:
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-while [expression]:
-\end_layout
-
-\begin_layout Plain Layout
-
- statement(s)
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsubsection
-for
-\end_layout
-
-\begin_layout Standard
-To iterate a range, array or table a
-\emph on
-for
-\emph default
- loop is used.
- For loops store the index in the loop variable on each iteration.
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-for i in [0,1,2]:
-\end_layout
-
-\begin_layout Plain Layout
-
- statement # loop iterates 3 times, i being 0,1 and 2
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-var dict = {"a":0, "b":1, "c": 2}
-\end_layout
-
-\begin_layout Plain Layout
-
-for i in dict:
-\end_layout
-
-\begin_layout Plain Layout
-
- print(dict[i]) # loop iterates the keys, i being "a","b" and c".
- It prints 0, 1 and 2.
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-for i in range(3):
-\end_layout
-
-\begin_layout Plain Layout
-
- statement # similar to [0,1,2] but does not allocate an array
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-for i in range(1,3):
-\end_layout
-
-\begin_layout Plain Layout
-
- statement # similar to [1,2] but does not allocate an array
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-for i in range(2,8,2):
-\end_layout
-
-\begin_layout Plain Layout
-
- statement # similar to [2,4,6] but does not allocate an array
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Section
-Classes
-\end_layout
-
-\begin_layout Standard
-By default, the body of a script file is an unnamed class, and it can only
- be referenced externally as a resource or file.
- Class syntax is meant to be very compact and can only contain member variables
- or functions.
- Static functions are allowed, but not static members (in the spirit of
- thread safety, since scripts can be initialized in separate threads without
- the user knowing).
- In the same way, member variables (including arrays and dictionaries) are
- initialized every time an instance is created.
-
-\end_layout
-
-\begin_layout Subsection
-Class File Example
-\end_layout
-
-\begin_layout Standard
-Example of a class file, imagine it being stored in a file like myclass.gd.
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-var a=5
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-function print_value_of_a():
-\end_layout
-
-\begin_layout Plain Layout
-
- print(a)
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Inheritance
-\end_layout
-
-\begin_layout Standard
-A class-file can inherit from a global class, another file or a subclass
- inside another file.
- Multiple inheritance is not allowed.
- The
-\begin_inset Quotes eld
-\end_inset
-
-extends
-\begin_inset Quotes erd
-\end_inset
-
- syntax is used:
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-# extend from some class (global)
-\end_layout
-
-\begin_layout Plain Layout
-
-extends SomeClass
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-# optionally, extend from another file
-\end_layout
-
-\begin_layout Plain Layout
-
-extends "somefile.gd"
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-# extend from a subclass in another file
-\end_layout
-
-\begin_layout Plain Layout
-
-extends "somefile.gd".Subclass
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Inheritance Testing
-\end_layout
-
-\begin_layout Standard
-It is possible to check if an instance inherits from a given class.
- For this the
-\begin_inset Quotes eld
-\end_inset
-
-extends
-\begin_inset Quotes erd
-\end_inset
-
- keyword can be used as an operator instead:
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-static var enemy_class = preload("enemy.gd") # cache the enemy class
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-[..]
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-if ( entity extends enemy_class ):
-\end_layout
-
-\begin_layout Plain Layout
-
- entity.apply_damage()
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Constructor
-\end_layout
-
-\begin_layout Standard
-A class can have an optional constructor, a function named
-\begin_inset Quotes eld
-\end_inset
-
-_init
-\begin_inset Quotes erd
-\end_inset
-
- that is called when the class is instanced.
-\end_layout
-
-\begin_layout Subsection
-Sub Classes
-\end_layout
-
-\begin_layout Standard
-A class file can have subclasses.
- Syntax should be straightforward:
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-class SomeSubClass:
-\end_layout
-
-\begin_layout Plain Layout
-
- var a=5
-\end_layout
-
-\begin_layout Plain Layout
-
- function print_value_of_a():
-\end_layout
-
-\begin_layout Plain Layout
-
- print(a)
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-function _init():
-\end_layout
-
-\begin_layout Plain Layout
-
- var sc = SomeSubClass.new() #instance by calling built-in new
-\end_layout
-
-\begin_layout Plain Layout
-
- sc.print_value_of_a()
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Classes as Objects
-\end_layout
-
-\begin_layout Standard
-It may be desired at some point to load a class from a file and then instance
- it.
- Since the global scope does not exist, classes must be loaded as a resource.
- Instancing is done by calling the
-\begin_inset Quotes eld
-\end_inset
-
-new
-\begin_inset Quotes erd
-\end_inset
-
- function in a class object:
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-#load the class (loaded every time the script is instanced)
-\end_layout
-
-\begin_layout Plain Layout
-
-var MyClass = load("myclass.gd")
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#alternatively, using the preload() function preloads the class at compile
- time
-\end_layout
-
-\begin_layout Plain Layout
-
-var MyClass2 = preload("myclass.gd")
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-function _init():
-\end_layout
-
-\begin_layout Plain Layout
-
- var a = MyClass.new()
-\end_layout
-
-\begin_layout Plain Layout
-
- a.somefunction()
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Exports
-\end_layout
-
-\begin_layout Standard
-Class members can be exported.
- This means their value gets saved along with a scene.
- If class members have initializers to constant expressions, they will be
- available for editing in the property editor.
- Exporting is done by using the export keyword:
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-extends Button
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-export var data # value will be saved
-\end_layout
-
-\begin_layout Plain Layout
-
-export var number=5 # also available to the property editor
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-One of the fundamental benefits of exporting member variables is to have
- them visible in the property editor.
- This way artists and game designers can modify values that later influence
- how the program runs.
- For this, a special export syntax is provided for more detail in the exported
- variables:
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-#if the exported value assigns a constant or constant expression, the type
- will be infered and used in the editor
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-export var number=5
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#export can take a basic datatype as argument, which will be used in the
- editor
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-export(int) var number
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#export can also take a resource type as hint
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-export(Texture) var character_face
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#integers and strings hint enumerated values
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-export(int,"Warrior","Magician","Thief") var character_class # (editor will
- set them as 0,1 and 2)
-\end_layout
-
-\begin_layout Plain Layout
-
-export(String,"Rebecca","Mary","Leah") var character_name
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#strings as paths
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-export(String,FILE) var f # string is a path to a file
-\end_layout
-
-\begin_layout Plain Layout
-
-export(String,DIR) var f # string is a path to a directory
-\end_layout
-
-\begin_layout Plain Layout
-
-export(String,FILE,"*.txt") var f # string is a path to a file, custom filter
- provided as hint
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#integers and floats hint ranges
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-export(int,20) var i # 0 to 20 allowed
-\end_layout
-
-\begin_layout Plain Layout
-
-export(int,-10,20) var j # -10 to 20 allowed
-\end_layout
-
-\begin_layout Plain Layout
-
-export(float,-10,20,0.2) var k # -10 to 20 allowed, with stepping of 0.2
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-#color can hint availability of alpha
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-export(Color,RGB) var col # Color is RGB
-\end_layout
-
-\begin_layout Plain Layout
-
-export(Color,RGBA) var col # Color is RGBA
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Standard
-It must be noted that even if the script is not being run while at the editor,
- the exported properties are still editable (see below for
-\begin_inset Quotes eld
-\end_inset
-
-tool
-\begin_inset Quotes erd
-\end_inset
-
-).
-\end_layout
-
-\begin_layout Subsection
-Static Functions
-\end_layout
-
-\begin_layout Standard
-A function can be declared static.
- When static, it has no access to the instance member variables or
-\begin_inset Quotes eld
-\end_inset
-
-self
-\begin_inset Quotes erd
-\end_inset
-
-.
- This is mainly useful to make libraries of helper functions:
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-static func sum2(a,b):
-\end_layout
-
-\begin_layout Plain Layout
-
- return a+b
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Asserting
-\end_layout
-
-\begin_layout Standard
-It is possible to assert a condition, which will cause a debugger break
- if false.
- Just use the built-in 'assert' function.
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-assert(a==2)
-\end_layout
-
-\begin_layout Plain Layout
-
-# if a is not 2, it will generate a debugger break
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Tool Mode
-\end_layout
-
-\begin_layout Standard
-Scripts by default don't run inside the editor, and only the exported properties
- can be changed.
- In some cases it is desired that they do (as long as they don't execute
- game code or manually avoid doing so).
- For this, the
-\begin_inset Quotes eld
-\end_inset
-
-tool
-\begin_inset Quotes erd
-\end_inset
-
- keyword exists, and must be placed at the top of the file:
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-tool
-\end_layout
-
-\begin_layout Plain Layout
-
-extends Button
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-func _init():
-\end_layout
-
-\begin_layout Plain Layout
-
- print("Hello")
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\begin_layout Subsection
-Memory Management
-\end_layout
-
-\begin_layout Standard
-If a class inherits from
-\emph on
-Reference
-\emph default
-, then instances will be freed when no longer in use.
- No garbage collector exists, just simple reference counting.
- By default, all classes that don't define inheritance extend
-\emph on
-Reference
-\emph default
-.
- If this is not desired, then a class must inherit
-\emph on
-Object
-\emph default
- manually and must call instance.free().
- To avoid reference cycles that can't be freed, a weakref() function is
- provided for creating weak references.
-
-\end_layout
-
-\begin_layout Subsection
-Function References
-\end_layout
-
-\begin_layout Standard
-Functions can't be referenced because they are not treated as class members.
- There are two alternatives to this, though.
- The
-\begin_inset Quotes eld
-\end_inset
-
-call
-\begin_inset Quotes erd
-\end_inset
-
- function or the funcref() helper.
-\end_layout
-
-\begin_layout Standard
-\begin_inset listings
-inline false
-status open
-
-\begin_layout Plain Layout
-
-instance.call("funcname",args) # call a function by bane
-\end_layout
-
-\begin_layout Plain Layout
-
-\end_layout
-
-\begin_layout Plain Layout
-
-var fr = funcref(instance,"funcname") #create a function ref
-\end_layout
-
-\begin_layout Plain Layout
-
-fr.exec(args)
-\end_layout
-
-\end_inset
-
-
-\end_layout
-
-\end_body
-\end_document