diff options
Diffstat (limited to 'doc/gdscript.lyx')
-rw-r--r-- | doc/gdscript.lyx | 2531 |
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 |