12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531 |
- #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
|