
blocklyThis is a 3D game programmed by using bitbybit's new interactive code blocks. The game can be used as a reference to check how things can be organised in your own scripts to create various interactive experiences with 3D mesh picking, mouse clicks, keyboard events, score counts and more. I used openly accessible babylonjs engine assets to give a game good looks. Game development is now possible!
This script is large, so only its beginning is shown here. Open it in the editor to see all of it.
<xml xmlns="https://developers.google.com/blockly/xml">
<variables>
<variable id="w;,D/nP)6x_3N,Xh+4CA">meshesToTrack</variable>
<variable id="wdP2]qeqQ+RjpD3B;*h1">shouldStartTheGame</variable>
<variable id=".zx|JB2gL|-5(=S3G2F|">shouldReplay</variable>
<variable id="X,7}=g8X@8FQ7lkUEQ7J">cleanMeshOnStart</variable>
<variable id="ozkOPC,(k5MXzTZLW??7">target1</variable>
<variable id="/EEv2rdkFR(kTY!]$GXF">target2</variable>
<variable id="HeR{U3@Of3E#?.N|WiIE">emptyListToFill1</variable>
<variable id="2^RCzk}@44pn$4oKU!h8">emptyListToFill2</variable>
<variable id="x,o(L}:en7~l`]VkNwJj">targetList</variable>
<variable id=",NW+u:QXvv0ko/N8gwBk">restoreHit</variable>
<variable id="$XN?nkp3eG*qvi`6ebC+">meshesToMove</variable>
<variable id=")OGJ%%9UXX/|XR6_1]h`">plane</variable>
<variable id="N55VA*wQ=JZ7)ZzC![e2">gameStarted</variable>
<variable id="~d$PfCHmL3-(B`$Yx1-F">timerPaused</variable>
<variable id="Ne13PA8xbZ|x~eAa9i6h">o</variable>
<variable id="w]F3AtioA-ce0PoUY`(,">i</variable>
<variable id="Sl/Sh}i.V2l`]!ci5At@">k</variable>
<variable id="8Ksy1pExe?vRrMC0aiPt">widthMin</variable>
<variable id="$/mds]S[E2a%g6Yc,BVE">secondsGiven</variable>
<variable id="W{L4]JR8wmj_O^DxvM+7">resultingTextMesh</variable>
<variable id=")FB(QiJelx*$9Er+`uG3">obstacleColMeshes</variable>
<variable id="QJFOWq0t.:dzCgiYPM*?">handlerTimer</variable>
<variable id="E;.tH+kiH]AKdVRt|L(X">gamePaused</variable>
<variable id=".=vhFsvO;q,.9b)-Qz3l">widthMax</variable>
<variable id="XV`eXIBD(bu,LazqRwTT">widthStep</variable>
<variable id="~MwI1K$/`cUlVri|vBBF">j</variable>
<variable id="l;zV{Uv*k.k)m:5$l!+A">ray</variable>
<variable id="Qcdx,zyv.,|5{Pv,efhl">hitCount</variable>
<variable id="x1}?6sE~+;43`Nb.]z]P">hitCountPrevious</variable>
<variable id="q=-Wo9Xf3alN@)LF_7A?">n</variable>
<variable id="yzLz+vt0vD]TZq3U[UfX">lengthMin</variable>
<variable id="2B%.f-FHZS.vmE}c/W@O">lengthMax</variable>
<variable id="vjkw9@`MjdDpte=:F*?k">lengthStep</variable>
<variable id="/|EITw%4+pw$GiW+E:=E">targetCopy1</variable>
<variable id="$=~^tUkWXeKr,;u)TkB}">bubbleScale</variable>
<variable id="Q`UnZN[AiZpg%1(P%F[7">xRotation</variable>
<variable id="eCi)`F3cKkux=_YqV^mb">mousePickingResult</variable>
<variable id="F)w_7v5!Tavx+!ln:d[L">planeMesh</variable>
<variable id="V8pA:KMfYFm%Mi-Cn;%3">drawnTextMeshes</variable>
<variable id="vP8%K(.OV@=lS=`/Ep,e">matNotCollidedColor</variable>
<variable id="GP;-F80W/DNm(uw8bX/E">matNotCollidedMetallic</variable>
<variable id="R1GIHkyHWaMrR=#F^[m6">matNotCollidedRoughness</variable>
<variable id="G0C?%a7j@H?e`8Aa77lE">matNotCollidedAlpha</variable>
<variable id="{OXHIJ`_y(5[)T%xK}[f">resultTextMeshes</variable>
<variable id="Ow^XX8)-OWW5Cwa=r!ck">targetCopy2</variable>
<variable id="QQtWB.!bf|/Xj9,jPJ#+">speed</variable>
<variable id="^0%.LXEQTuQf9^a1X[@7">position</variable>
<variable id="Gn+k:ablb+I@(!A@r~[u">rotationSpeed</variable>
<variable id="p5g0UQPeQRKZ=C6QX$!f">isPointerDown</variable>
<variable id=",x|OVhpyoy8+r1.*WRTj">timeText</variable>
<variable id="$SRhVP8-8gc/6!PDkc{P">topText</variable>
<variable id="TX@@oa.EcQQv=/a/ylAv">zCoord</variable>
<variable id="w-`jw_]`h4sSN7j6v%FG">zRotation</variable>
<variable id="C$:Ym:z7US6]SXWDn22:">bottomText</variable>
<variable id="i;cm5J?.TgpvRVfg!E6*">timeElapsedFromPreviousFrame</variable>
<variable id="9yYuO^L^=eDN@I{PX._i">size</variable>
<variable id="e[h3;!Y]$kwKjO8#sF(_">height</variable>
<variable id="u8pzRT~Yq+ci$Pa(n{b1">materialHovered</variable>
<variable id="L}.s3i)Ek7.f$`sMC`=I">materialNotSelected</variable>
<variable id="tMWvaMdc|h|+z62Kp).3">startGameHitHppened</variable>
<variable id="MZF66Jit8v(%L_G4Ppmo">materialSelected</variable>
<variable id="M!3Bv!gbzYfWb$DnG;UC">xRand</variable>
<variable id="J1-=DM*Lw~If0:K6AP#H">collisionCount</variable>
<variable id=";5h%^BJh)`CAnK}F:xTC">obstacleInstances</variable>
<variable id="Y1LKza4Qbw=?;i{Zju$7">yRand</variable>
<variable id="w6!3dz$x.{owirB$Ucl_">zRand</variable>
<variable id="i`?upbOhaXrYcEaiH^tC">r</variable>
<variable id="42j0uXu*zxT#gWpBf|mU">collisionFound</variable>
<variable id="?SfntWNDROXq7|uFzc=u">matCollidedColor</variable>
<variable id="30#%0]L$:t6Ou}288YJ,">rayToCheck</variable>
<variable id="^Fg{S%]^-Su#,dJ*jQ^~">matCollidedAlpha</variable>
<variable id="@+:8_}NyQKSt3ZqRj)}z">pickResult</variable>
<variable id="Z^6N%Qz;I1*UFFI1d]5M">rayStart</variable>
<variable id="-Z2ex1M1~fOr(z`/x`!G">rayEnd</variable>
<variable id=";63j/=~]1TvH[G7Z#h|+">loadingMesh</variable>
<variable id=".UBM#mP(,U}f;{jf]Q5l">hitMesh</variable>
<variable id="W,]`|.USpL!Gl7lG}w8$">material</variable>
<variable id="cC?8ei#a5-1t_d*d#vk#">result</variable>
<variable id=";S-l1atJ-^j6Dmyv9i2|">obstacle</variable>
<variable id="FY|^#Zz#k.B4[{A_DFp]">checkPickMesh</variable>
<variable id="wD(AH16(3Ob]=i+t(Evc">m</variable>
<variable id="ETt77.7%q,y#[-0d?b]Y">countTimeMS</variable>
<variable id="qkHe%-0P-88[y=XZ4Yiw">startTheGameMesh</variable>
</variables>
<block type="procedures_defnoreturn" id="fu(TG,/b~x/{LBw%(|]{" x="-1078" y="1272">
<field name="NAME">environmentSetup</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="bitbybit.babylon.scene.enableSkybox" id="vaG7fw3}l#*`oOG@!WyG">
<value name="Skybox">
<block type="bitbybit.babylon.enums.skyboxEnum" id="Dr_uO^iV]y+P-eQ=QGDW">
<field name="bitbybit.babylon.enums.skyboxEnum">'city'</field>
</block>
</value>
<value name="Size">
<block type="math_number" id="RpH=D=Sba%I0$qnYn.U=">
<field name="NUM">2000</field>
</block>
</value>
<value name="Blur">
<block type="math_number" id=",z+Vr?~gC97`iaD4wSch">
<field name="NUM">0.3</field>
</block>
</value>
<value name="EnvironmentIntensity">
<block type="math_number" id="SpiR)!/MW7Gq{tQU|%n=">
<field name="NUM">0.8</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.scene.fog" id="@~ugiPD-U0+w*EcPag,N">
<value name="Mode">
<block type="bitbybit.babylon.enums.fogModeEnum" id="Y(,.Nj1dcG4NHs]aBTNN">
<field name="bitbybit.babylon.enums.fogModeEnum">'linear'</field>
</block>
</value>
<value name="Color">
<block type="colour_picker" id="2k~F.ZHpY5ypjNC}EAHB">
<field name="COLOUR">#ffffff</field>
</block>
</value>
<value name="Density">
<block type="math_number" id="oL]veD|OuRBh6$.o/+`E">
<field name="NUM">1</field>
</block>
</value>
<value name="Start">
<block type="math_number" id="_`?u`_)!P9^60hr=[tYZ">
<field name="NUM">20</field>
</block>
</value>
<value name="End">
<block type="math_number" id="LG[4:nA)cZ*7B}5w.^Yh">
<field name="NUM">6000</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.scene.drawDirectionalLightNoReturn" id="wI:JX0A{/.CBl|OQxh7%">
<value name="Direction">
<block type="bitbybit.point.pointXYZ" id="+SuQH6a`e~E,iqO(DekG">
<value name="X">
<block type="math_number" id="-Sfe6laM@UxF}T1$:RoT">
<field name="NUM">-100</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="KA_|A.GZg2QH]_*Az,;7">
<field name="NUM">-100</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="*#O3!egPIo4-G!|UkCt`">
<field name="NUM">-100</field>
</block>
</value>
</block>
</value>
<value name="Intensity">
<block type="math_number" id="b=qYglli1*T*E5%)Gm0k">
<field name="NUM">1</field>
</block>
</value>
<value name="Diffuse">
<block type="colour_picker" id="Cr|)BzY`g~;!60tvd%H/">
<field name="COLOUR">#ffffff</field>
</block>
</value>
<value name="Specular">
<block type="colour_picker" id="nbLs6PTqlaeZ7;*9);zs">
<field name="COLOUR">#ffffff</field>
</block>
</value>
<value name="ShadowGeneratorMapSize">
<block type="math_number" id="E7R%ACDH^#G,TDYqaDnX">
<field name="NUM">1024</field>
</block>
</value>
<value name="EnableShadows">
<block type="logic_boolean" id="NnF+t#wt+U:AEkbNx~em">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="ShadowDarkness">
<block type="math_number" id="7}4HAcpx]gQzvA9[l~R3">
<field name="NUM">0</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.scene.activateCamera" id="ae#=g=%/[N52uB!A6Q:9">
<value name="Camera">
<block type="bitbybit.babylon.camera.target.create" id="FaK_MYpf!9ffBh:~K(gf">
<value name="Position">
<block type="bitbybit.point.pointXYZ" id="P^Ivipvi_[y,aFK^+O}v">
<value name="X">
<block type="math_number" id="qKSm[i6hZugCMC5q;8Z[">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="dXo%yPVfBd|hV4y(/p]X">
<field name="NUM">37</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="XAk(uVO~`^9}@`^|lS?p">
<field name="NUM">-70</field>
</block>
</value>
</block>
</value>
<value name="Target">
<block type="bitbybit.point.pointXYZ" id="8hgc*#ZgK;q]P6_NcOAN">
<value name="X">
<block type="math_number" id="u8}XaTJ/0kV4s77rCHsO">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="0G;]O{oX,e%T`|;G3C!5">
<field name="NUM">30</field>
</block>
</value>
<value name="Z">
<block type="math_number" id=")roLz{8^[3~ZWKYoTaTh">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_callnoreturn" id="_QiG0*83-%gl!g^b5z,u" x="-311" y="1274">
<mutation name="environmentSetup">
</mutation>
<next>
<block type="variables_set" id="gYbWlKL,CX%sVsAFEB=6">
<field name="VAR" id="N55VA*wQ=JZ7)ZzC![e2">gameStarted</field>
<value name="VALUE">
<block type="logic_boolean" id="aAHw6M)jsChK57X2WBS]">
<field name="BOOL">FALSE</field>
</block>
</value>
<next>
<block type="variables_set" id="MnePNY#jeTCneJx}WH#[">
<field name="VAR" id="8Ksy1pExe?vRrMC0aiPt">widthMin</field>
<value name="VALUE">
<block type="math_number" id="a+~[*(C.??arYzq,[g4P">
<field name="NUM">-300</field>
</block>
</value>
<next>
<block type="variables_set" id="Y]M~djDGE?%i2st,R{oI">
<field name="VAR" id=".=vhFsvO;q,.9b)-Qz3l">widthMax</field>
<value name="VALUE">
<block type="math_number" id="x_A~a5i;PoONQ!pH.L!L">
<field name="NUM">300</field>
</block>
</value>
<next>
<block type="variables_set" id="J2iN6|Z%tBX%Y`l,](k`">
<field name="VAR" id="XV`eXIBD(bu,LazqRwTT">widthStep</field>
<value name="VALUE">
<block type="math_number" id="b1?Z!D/MaVs7xYr!UHiR">
<field name="NUM">70</field>
</block>
</value>
<next>
<block type="variables_set" id=";R3ixFFjfQEAstT.rIn`">
<field name="VAR" id="yzLz+vt0vD]TZq3U[UfX">lengthMin</field>
<value name="VALUE">
<block type="math_number" id="q70}T-2i?(T~N@Y=TJ#x">
<field name="NUM">-300</field>
</block>
</value>
<next>
<block type="variables_set" id="_0iWM1%{L/dKlQ;6UOPP">
<field name="VAR" id="2B%.f-FHZS.vmE}c/W@O">lengthMax</field>
<value name="VALUE">
<block type="math_number" id="CHcu_uep^?mA]#D=TggE">
<field name="NUM">300</field>
</block>
</value>
<next>
<block type="variables_set" id="V]T}}cx#gag%:+Kh?36!">
<field name="VAR" id="vjkw9@`MjdDpte=:F*?k">lengthStep</field>
<value name="VALUE">
<block type="math_number" id="K];C1gwhGfgza7GU}YvF">
<field name="NUM">50</field>
</block>
</value>
<next>
<block type="variables_set" id="PC8@j$/Lbv9cO+q$[^,x">
<field name="VAR" id="e[h3;!Y]$kwKjO8#sF(_">height</field>
<value name="VALUE">
<block type="math_number" id="HP15jDjaa1.SN=MBlFKJ">
<field name="NUM">200</field>
</block>
</value>
<next>
<block type="variables_set" id="PbltNp,}V8+sJqbXLc{f">
<field name="VAR" id="QQtWB.!bf|/Xj9,jPJ#+">speed</field>
<value name="VALUE">
<block type="math_number" id="~_i@p7@dbl~tzvIew6pZ">
<field name="NUM">0.4</field>
</block>
</value>
<next>
<block type="variables_set" id="Mu1Z`;wmld|epg@DWZO(">
<field name="VAR" id="Gn+k:ablb+I@(!A@r~[u">rotationSpeed</field>
<value name="VALUE">
<block type="math_number" id="M.x0l}?bHxqTSe%;_nT-">
<field name="NUM">2</field>
</block>
</value>
<next>
<block type="variables_set" id="4/QtFiaOF;XTpPxC#bOL">
<field name="VAR" id="J1-=DM*Lw~If0:K6AP#H">collisionCount</field>
<value name="VALUE">
<block type="math_number" id="mCwKg[X[R`IHR}PV`rt[">
<field name="NUM">0</field>
</block>
</value>
<next>
<block type="variables_set" id="}r*C}9ijh/I|:|7=;[f6">
<field name="VAR" id="vP8%K(.OV@=lS=`/Ep,e">matNotCollidedColor</field>
<value name="VALUE">
<block type="colour_picker" id="rPj9c*$yud5;i3N}TcdO">
<field name="COLOUR">#0000ff</field>
</block>
</value>
<next>
<block type="variables_set" id="6gS}##V7(-tx0WHSo2D{">
<field name="VAR" id="GP;-F80W/DNm(uw8bX/E">matNotCollidedMetallic</field>
<value name="VALUE">
<block type="math_number" id="s`v!A!ch,M,|C2Nm*MbL">
<field name="NUM">0.6</field>
</block>
</value>
<next>
<block type="variables_set" id="65Fh$*B_EpYrkZWZP%XM">
<field name="VAR" id="R1GIHkyHWaMrR=#F^[m6">matNotCollidedRoughness</field>
<value name="VALUE">
<block type="math_number" id="tRxpR^eqv.Mj6ynb{EG;">
<field name="NUM">0.6</field>
</block>
</value>
<next>
<block type="variables_set" id="!!jTRFx2x6+R1|9#C20:">
<field name="VAR" id="G0C?%a7j@H?e`8Aa77lE">matNotCollidedAlpha</field>
<value name="VALUE">
<block type="math_number" id="^ko-n(Xw3XMM{5lTiXbn">
<field name="NUM">0.3</field>
</block>
</value>
<next>
<block type="variables_set" id="$.|;5jn0odf0zcOTlz9c">
<field name="VAR" id="?SfntWNDROXq7|uFzc=u">matCollidedColor</field>
<value name="VALUE">
<block type="colour_picker" id="GHEr=@qx_]/9LMSELo2(">
<field name="COLOUR">#6600cc</field>
</block>
</value>
<next>
<block type="variables_set" id="#aSK%DsFRn):1TVV57.q">
<field name="VAR" id="^Fg{S%]^-Su#,dJ*jQ^~">matCollidedAlpha</field>
<value name="VALUE">
<block type="math_number" id="iu0Rd({DywFZ+}IK.;m.">
<field name="NUM">0.6</field>
</block>
</value>
<next>
<block type="variables_set" id="F!nMdMn1P:e=}e*yJngZ">
<field name="VAR" id="Qcdx,zyv.,|5{Pv,efhl">hitCount</field>
<value name="VALUE">
<block type="math_number" id="U{HNk0sG)4{Yz^+NTo@f">
<field name="NUM">0</field>
</block>
</value>
<next>
<block type="variables_set" id="FEi}2S/7[`:1!GXNBC^$">
<field name="VAR" id="x1}?6sE~+;43`Nb.]z]P">hitCountPrevious</field>
<value name="VALUE">
<block type="math_number" id="DDhs7]$9+@XAFOEB-$,[">
<field name="NUM">0</field>
</block>
</value>
<next>
<block type="variables_set" id="U^H~tqqaL0Z;psq.C{9#">
<field name="VAR" id="E;.tH+kiH]AKdVRt|L(X">gamePaused</field>
<value name="VALUE">
<block type="logic_boolean" id="%C5BXxI3/h}[$fu/o]ao">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="base_time_then" id="Va=Z#{_169yI5_m5-q;-">
<field name="Result" id=";63j/=~]1TvH[G7Z#h|+">loadingMesh</field>
<value name="Promise">
<block type="bitbybit.draw.drawAnyAsync" id="RROqR|6QW4,v*5kHt?^g">
<value name="Entity">
<block type="bitbybit.jscad.text.sphericalText" id="LM2m5$92][FcO3n|^dUc">
<value name="Text">
<block type="text" id="_=sJKE$QkcVp)%AX~)X8">
<field name="TEXT">Loading...</field>
</block>
</value>
<value name="Radius">
<block type="math_number" id="6qVp51c`(Ee~]cy:#6mR">
<field name="NUM">1</field>
</block>
</value>
<value name="Segments">
<block type="math_number" id="p3*H7rTT1_YKY)OWD;9J">
<field name="NUM">10</field>
</block>
</value>
<value name="XOffset">
<block type="math_number" id="iR#Fx]V7)jL=/r!l{ya8">
<field name="NUM">0</field>
</block>
</value>
<value name="YOffset">
<block type="math_number" id="eYA.OuoLsYSLM!Ngx*uq">
<field name="NUM">0</field>
</block>
</value>
<value name="Height">
<block type="math_number" id="|ooO+h;IayDQVb~mibQ$">
<field name="NUM">4</field>
</block>
</value>
<value name="LineSpacing">
<block type="math_number" id="!0E!7z:2g~DuC.h-}@|#">
<field name="NUM">1.4</field>
</block>
</value>
<value name="LetterSpacing">
<block type="math_number" id="P%39?Lb9O*(B2*8:^-QG">
<field name="NUM">1</field>
</block>
</value>
<value name="Align">
<block type="bitbybit.jscad.enums.jscadTextAlignEnum" id="}5bn{`.#80Fh.U*#E4c:">
<field name="bitbybit.jscad.enums.jscadTextAlignEnum">'left'</field>
</block>
</value>
<value name="ExtrudeOffset">
<block type="math_number" id="e^=,ep6q{p$2]FKy{;A8">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Options">
<block type="bitbybit.draw.optionsSimple" id="X(ZHs0AB:?6,=XL^b0hv">
<value name="Colours">
<block type="colour_picker" id="AKh$:~yNf%RIfs[j1ck{">
<field name="COLOUR">#ffcc00</field>
</block>
</value>
<value name="Size">
<block type="math_number" id="lBJEd2%m;G%C%pFux6;[">
<field name="NUM">3</field>
</block>
</value>
<value name="Opacity">
<block type="math_number" id="=vne?,/Qh=i_=]|m#L/z">
<field name="NUM">1</field>
</block>
</value>
<value name="Updatable">
<block type="logic_boolean" id="X5p6!GT`6$|jTgAKIC+B">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
</block>
</value>
<statement name="Then">
<block type="bitbybit.babylon.mesh.moveUp" id=":SOp6roXfl)CEgDF51N^">
<value name="BabylonMesh">
<block type="variables_get" id="Wl^ia^.CtZ1W?PY^qdng">
<field name="VAR" id=";63j/=~]1TvH[G7Z#h|+">loadingMesh</field>
</block>
</value>
<value name="Distance">
<block type="math_number" id="U/j!g,Sx=7/_8J@@iB(g">
<field name="NUM">30</field>
</block>
</value>
<next>
<block type="base_time_then" id="OftV`:;k_wU;spZB$)^^">
<field name="Result" id="cC?8ei#a5-1t_d*d#vk#">result</field>
<value name="Promise">
<block type="lists_create_with" id="g2jf8*Ahcrc78x?Ig|Zo">
<mutation items="4">
</mutation>
<value name="ADD0">
<block type="bitbybit.babylon.io.loadAssetIntoSceneFromRootUrl" id="^$h_SnwBM(b;-y@Rltkl">
<value name="AssetFile">
<block type="text" id="R]Yl}I2Bauk!u!~*^Jww">
<field name="TEXT">aerobatic_plane.glb</field>
</block>
</value>
<value name="RootUrl">
<block type="text" id="p0`eAo(q})VduhqDp$JF">
<field name="TEXT">https://models.babylonjs.com/</field>
</block>
</value>
</block>
</value>
<value name="ADD1">
<block type="bitbybit.babylon.io.loadAssetIntoSceneFromRootUrl" id="Os7uHh[Ow|(c5IUZ6jTs">
<value name="AssetFile">
<block type="text" id="3!-s3^DD:NBq4{JF9Ea!">
<field name="TEXT">BabylonShaderBall_Simple.gltf</field>
</block>
</value>
<value name="RootUrl">
<block type="text" id="tLYQFq(P6i?cA9)T=ET2">
<field name="TEXT">https://models.babylonjs.com/shaderBall/</field>
</block>
</value>
</block>
</value>
<value name="ADD2">
<block type="bitbybit.draw.drawAnyAsync" id="}LR6q{j[b7J4B786qI0q">
<value name="Entity">
<block type="bitbybit.jscad.shapes.sphere" id="?`/3ridTk.Q.L}0[-3vc">
<value name="Center">
<block type="bitbybit.point.pointXYZ" id="/@]io@!nX(=zh[cK_3Z7">
<value name="X">
<block type="math_number" id="a,YlM5AgL4g8JMz-!%MG">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="|T;%W%v.Hu4P@.n^MnFR">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="B}R84NnL7BwQUgWWAw^^">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Radius">
<block type="math_number" id="o*JNu%z6YrZ.?G)T=BUn">
<field name="NUM">2</field>
</block>
</value>
<value name="Segments">
<block type="math_number" id="oi7}6)Bs6_P=t*E,wAvB">
<field name="NUM">32</field>
</block>
</value>
</block>
</value>
<value name="Options">
<block type="bitbybit.draw.optionsSimple" id="P(l4N6[V|d*h,%27tFk3">
<value name="Colours">
<block type="colour_picker" id=":Fa|q#!Gmr0i{RA%g:M$">
<field name="COLOUR">#0000ff</field>
</block>
</value>
<value name="Size">
<block type="math_number" id="}$$~*pj`Y^t$gs$q7C^H">
<field name="NUM">3</field>
</block>
</value>
<value name="Opacity">
<block type="math_number" id="F}Q8_8W(NEqwnB/84^}6">
<field name="NUM">1</field>
</block>
</value>
<value name="Updatable">
<block type="logic_boolean" id="}9O`jwd.X3U7d.;4^h]o">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="Hidden">
<block type="logic_boolean" id="H??OO2IsCx+z;]mv]pLB">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="ADD3">
<block type="bitbybit.draw.drawAnyAsync" id="[1tiiE:,~0`M.8P31rM6">
<value name="Entity">
<block type="bitbybit.jscad.shapes.cuboid" id="^B3|1t20p(?Fu1jfvXen">
<value name="Center">
<block type="bitbybit.point.pointXYZ" id=",)v#:ECpqj=CPjd7rj)`">
<value name="X">
<block type="math_number" id="w!,UKg9KQb_2c?,+360#">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="n?16?+QEN1gsOL`g#A@5">
<field name="NUM">15</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="NgS,z00wc76Kn=I+{rnp">
<field name="NUM">150</field>
</block>
</value>
</block>
</value>
<value name="Width">
<block type="math_number" id="za=3t_xnooGIF}D8Gi1R">
<field name="NUM">0.1</field>
</block>
</value>
<value name="Length">
<block type="math_number" id="!s{,//S;vKdB[)Od7Kn/">
<field name="NUM">200</field>
</block>
</value>
<value name="Height">
<block type="math_number" id="!V3~YwVQ,30xU%[)|OhS">
<field name="NUM">0.1</field>
</block>
</value>
</block>
</value>
<value name="Options">
<block type="bitbybit.draw.optionsSimple" id="Hco}4T~}~HrzRl%Rl/${">
<value name="Colours">
<block type="colour_picker" id="^~E2HnL`{q-mSKl%[ji/">
<field name="COLOUR">#ff6600</field>
</block>
</value>
<value name="Size">
<block type="math_number" id="UTl4kW*19Zxb4v!v@hRO">
<field name="NUM">3</field>
</block>
</value>
<value name="Opacity">
<block type="math_number" id="-l|2nY+EV-i-._;VkVH%">
<field name="NUM">1</field>
</block>
</value>
<value name="Updatable">
<block type="logic_boolean" id="{*M}AHxp$Y*R^ib^{n+a">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="Hidden">
<block type="logic_boolean" id="py_x8j7@;#%Qvu-[VhbF">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
</block>
</value>
</block>
</value>
<statement name="Then">
<block type="variables_set" id="BUYoBjso,h=u9*Ja-3av">
<field name="VAR" id="F)w_7v5!Tavx+!ln:d[L">planeMesh</field>
<value name="VALUE">
<block type="lists_getIndex" id="]iy_P,PmUW.7iA^KsDC[">
<mutation statement="false" at="false">
</mutation>
<field name="MODE">GET</field>
<field name="WHERE">FIRST</field>
<value name="VALUE">
<block type="variables_get" id="|j-tJFe#.Rx1NhZzltem">
<field name="VAR" id="cC?8ei#a5-1t_d*d#vk#">result</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="X3#lCuUj/)58$4/?-QSh">
<field name="VAR" id=";S-l1atJ-^j6Dmyv9i2|">obstacle</field>
<value name="VALUE">
<block type="lists_getIndex" id="q5le?U2#|)ww/J$S^o6J">
<mutation statement="false" at="true">
</mutation>
<field name="MODE">GET</field>
<field name="WHERE">FROM_START</field>
<value name="VALUE">
<block type="variables_get" id="SYo4:DtVhwNDsn~kLDAB">
<field name="VAR" id="cC?8ei#a5-1t_d*d#vk#">result</field>
</block>
</value>
<value name="AT">
<block type="math_number" id="zYT9hYiS+Shlap3WEgg-">
<field name="NUM">2</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="y.]oD*p/BfpLV)wX#q.1">
<field name="VAR" id="FY|^#Zz#k.B4[{A_DFp]">checkPickMesh</field>
<value name="VALUE">
<block type="lists_getIndex" id="@Wn?!ln-PWcl[yB;#G*c">
<mutation statement="false" at="true">
</mutation>
<field name="MODE">GET</field>
<field name="WHERE">FROM_START</field>
<value name="VALUE">
<block type="variables_get" id="P!AZ$+v+Z4yVWw-eIQ:c">
<field name="VAR" id="cC?8ei#a5-1t_d*d#vk#">result</field>
</block>
</value>
<value name="AT">
<block type="math_number" id="88L4RW`YW3cWjkE7S|Z7">
<field name="NUM">3</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="].joN.6D!@#vf%9%.9YN">
<field name="VAR" id="l;zV{Uv*k.k)m:5$l!+A">ray</field>
<value name="VALUE">
<block type="lists_getIndex" id=".:n#s:9X.jAL/]AN.g}[">
<mutation statement="false" at="false">
</mutation>
<field name="MODE">GET</field>
<field name="WHERE">LAST</field>
<value name="VALUE">
<block type="variables_get" id="J@HJE2*`!ctuy0pu{X[I">
<field name="VAR" id="cC?8ei#a5-1t_d*d#vk#">result</field>
</block>
</value>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.hide" id="!tq1.yQUt~TRR,38WqSG">
<value name="BabylonMesh">
<block type="variables_get" id="r.YnF*+tA!m%1--`4M:H">
<field name="VAR" id="l;zV{Uv*k.k)m:5$l!+A">ray</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="PBJMOfLzyk??|GBf`Vs)">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.hide" id="R+`x|xHkqtx~80B$WxaQ">
<value name="BabylonMesh">
<block type="variables_get" id="T6Tvn#))aXiABODD,[^r">
<field name="VAR" id="FY|^#Zz#k.B4[{A_DFp]">checkPickMesh</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="xSGjH*%#AlA4Yt/2,BWs">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="variables_set" id="Wb9;!sSr?c#!P7v_MmvM">
<field name="VAR" id="Z^6N%Qz;I1*UFFI1d]5M">rayStart</field>
<value name="VALUE">
<block type="bitbybit.draw.drawAny" id="xCj:u;Cw^z!dTVlFf#O+">
<value name="Entity">
<block type="bitbybit.point.pointXYZ" id=")GKh=Q)4hCD0=^l;xNVF">
<value name="X">
<block type="math_number" id=",6fU#7o~}[75iMJ8JRlZ">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="mVLpM28WJc6rU@h6yUGt">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="x8`WuYUH[C?BRr9|]@nN">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Options">
<block type="bitbybit.draw.optionsSimple" id="PvZ*q/Z2kL_j71x0k)d4">
<value name="Colours">
<block type="colour_picker" id="S*dTx0f~ww7u~`[rQp@s">
<field name="COLOUR">#ff6600</field>
</block>
</value>
<value name="Size">
<block type="math_number" id="l,urQU,zic9]jEi!~9yb">
<field name="NUM">3</field>
</block>
</value>
<value name="Opacity">
<block type="math_number" id="kuJ^b*1W8Sch+BR8UJ;n">
<field name="NUM">0</field>
</block>
</value>
<value name="Updatable">
<block type="logic_boolean" id="]{5M-7I!;Us5Y/rE6h_Q">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="Hidden">
<block type="logic_boolean" id="Cb%MfT0iD$TxsY/irb=0">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setPosition" id="5R~aoxX}w5HQ5pX8koDH">
<value name="BabylonMesh">
<block type="variables_get" id="A3UN*rO?h=7U$thKg3V%">
<field name="VAR" id="Z^6N%Qz;I1*UFFI1d]5M">rayStart</field>
</block>
</value>
<value name="Position">
<block type="bitbybit.point.pointXYZ" id="0ZE{;|-}p-cro~:)*:/@">
<value name="X">
<block type="math_number" id="$sxo$Owq[RIZW6yN6DkF">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="n.7$26Jtk#!Iv1(RM;V2">
<field name="NUM">15</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="dba9Sf17e7WGn8~oNZs9">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setParent" id="=p6X_52vAp5nZfs.$ryk">
<value name="BabylonMesh">
<block type="variables_get" id="_o%4-X+OT#=CiFy;(r`G">
<field name="VAR" id="Z^6N%Qz;I1*UFFI1d]5M">rayStart</field>
</block>
</value>
<value name="ParentMesh">
<block type="variables_get" id="^4D;-TCg2FILdy;Ek`0~">
<field name="VAR" id="F)w_7v5!Tavx+!ln:d[L">planeMesh</field>
</block>
</value>
<next>
<block type="variables_set" id="IK;O2B5)jO|.gMj|fOR}">
<field name="VAR" id="-Z2ex1M1~fOr(z`/x`!G">rayEnd</field>
<value name="VALUE">
<block type="bitbybit.draw.drawAny" id="vF8*QOWtC]t[_BmO84KT">
<value name="Entity">
<block type="bitbybit.point.pointXYZ" id="tlJmNQ=nUqj*1or[h{{/">
<value name="X">
<block type="math_number" id="OAt;X([6$TvdGQZY0s|z">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="h%c/8-CVHV5eO,l5[NK7">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="%$FLm*PbJmc}iJ0#f-KT">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<value name="Options">
<block type="bitbybit.draw.optionsSimple" id="02#cz*ehdQ6m;{yPa.tw">
<value name="Colours">
<block type="colour_picker" id="Z5OP#r]A.H~ZQ2YduGOa">
<field name="COLOUR">#ff6600</field>
</block>
</value>
<value name="Size">
<block type="math_number" id="1ra0FkL3y3)qE4Rtfs_1">
<field name="NUM">3</field>
</block>
</value>
<value name="Opacity">
<block type="math_number" id="j#@Tec]hQg^LN8vqMflb">
<field name="NUM">1</field>
</block>
</value>
<value name="Updatable">
<block type="logic_boolean" id="J{DGa.!|OV1lMuF1T(P7">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="Hidden">
<block type="logic_boolean" id="_Q0(=@dt^)R21+P6(7-p">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setPosition" id="54;eM:)H_$T7%:]Qj-_H">
<value name="BabylonMesh">
<block type="variables_get" id="eO-us]n6]yj(.|[p_$gP">
<field name="VAR" id="-Z2ex1M1~fOr(z`/x`!G">rayEnd</field>
</block>
</value>
<value name="Position">
<block type="bitbybit.point.pointXYZ" id="^gRs@C+=Qawy$aW1F[t`">
<value name="X">
<block type="math_number" id="LHbXg8zAI$,Ius6p1ul2">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="{X.~Q;@.4Xib39BsGTs(">
<field name="NUM">15</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="~$L|g{KHabu=q@GpPzP/">
<field name="NUM">350</field>
</block>
</value>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setParent" id="]8{hRsiF09RDP|O#@%bi">
<value name="BabylonMesh">
<block type="variables_get" id="jQQ{uc6^dp)KM4=~xM.j">
<field name="VAR" id="-Z2ex1M1~fOr(z`/x`!G">rayEnd</field>
</block>
</value>
<value name="ParentMesh">
<block type="variables_get" id="k0Zr~]ghNtcLwm~tvLdx">
<field name="VAR" id="F)w_7v5!Tavx+!ln:d[L">planeMesh</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setParent" id="=GF-5C_RwB!lFeO^!{qo">
<value name="BabylonMesh">
<block type="variables_get" id="d.#wvFb,[0r3BJgv{V`(">
<field name="VAR" id="l;zV{Uv*k.k)m:5$l!+A">ray</field>
</block>
</value>
<value name="ParentMesh">
<block type="variables_get" id="v/Qt%{eFcklA]_n,/JYH">
<field name="VAR" id="F)w_7v5!Tavx+!ln:d[L">planeMesh</field>
</block>
</value>
<next>
<block type="controls_forEach" id="k{lOE_OodFw0%YiuLdA-">
<field name="VAR" id="wD(AH16(3Ob]=i+t(Evc">m</field>
<value name="LIST">
<block type="bitbybit.babylon.mesh.getChildMeshes" id=";cnlse(BE,QL.yUr3cqJ">
<value name="BabylonMesh">
<block type="variables_get" id="wm$~T|}{z4H@Gd]VKB5{">
<field name="VAR" id=";S-l1atJ-^j6Dmyv9i2|">obstacle</field>
</block>
</value>
<value name="DirectDescendantsOnly">
<block type="logic_boolean" id=".a4PeN_.I!9pCjS3cv3W">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</value>
<statement name="DO">
<block type="bitbybit.babylon.mesh.setRotation" id="reJit-JlIPUpkmGJV38t">
<value name="BabylonMesh">
<block type="variables_get" id="^(~OcPlIguSm-P_sj;5{">
<field name="VAR" id="wD(AH16(3Ob]=i+t(Evc">m</field>
</block>
</value>
<value name="Rotation">
<block type="bitbybit.point.pointXYZ" id="Pz[ZKX82x!-_]t*%U_34">
<value name="X">
<block type="math_number" id="3X,qV.X4pDfW,e|0[*QL">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="@3:,6B|1`fH,p*(=/$o[">
<field name="NUM">120</field>
</block>
</value>
<value name="Z">
<block type="math_number" id="Llyenpx_L{gs-}X3*Xbr">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</statement>
<next>
<block type="variables_set" id="G-+.@$Gh)^nmx^Wj+!Yw">
<field name="VAR" id="Q`UnZN[AiZpg%1(P%F[7">xRotation</field>
<value name="VALUE">
<block type="math_number" id="cd6aF(sY-CGXUVs#xIol">
<field name="NUM">0</field>
</block>
</value>
<next>
<block type="variables_set" id="|DLFtjarczV7*d{:w9yb">
<field name="VAR" id="w-`jw_]`h4sSN7j6v%FG">zRotation</field>
<value name="VALUE">
<block type="math_number" id="V*TEYn-4Qrv/5+=%R-qJ">
<field name="NUM">0</field>
</block>
</value>
<next>
<block type="variables_set" id="RC}eb{4q4:@C]Yw-|t`r">
<field name="VAR" id=";5h%^BJh)`CAnK}F:xTC">obstacleInstances</field>
<value name="VALUE">
<block type="lists_create_with" id="mBY`^-K51Z1}FqqTg!q4">
<mutation items="0">
</mutation>
</block>
</value>
<next>
<block type="variables_set" id="~8vEL3@jM%l.1ta?+r)%">
<field name="VAR" id=")FB(QiJelx*$9Er+`uG3">obstacleColMeshes</field>
<value name="VALUE">
<block type="lists_create_with" id="tu5^)#`!}j^36J}m+r_P">
<mutation items="0">
</mutation>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id=")r9s[PCH*02rL$PHVJ[f">
<mutation name="putObstaclesInPositions">
<arg name="target1">
</arg>
<arg name="target2">
</arg>
<arg name="emptyListToFill1">
</arg>
<arg name="emptyListToFill2">
</arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="9r`MlLJH[J@!;m)a$+Br">
<field name="VAR" id="FY|^#Zz#k.B4[{A_DFp]">checkPickMesh</field>
</block>
</value>
<value name="ARG1">
<block type="variables_get" id="qDvso3h~M4QQ^83f=UHw">
<field name="VAR" id=";S-l1atJ-^j6Dmyv9i2|">obstacle</field>
</block>
</value>
<value name="ARG2">
<block type="variables_get" id="3h%px8VNYsYi{27qC`EP">
<field name="VAR" id=")FB(QiJelx*$9Er+`uG3">obstacleColMeshes</field>
</block>
</value>
<value name="ARG3">
<block type="variables_get" id="/3GRc^-^H35Cw10Bjs~V">
<field name="VAR" id=";5h%^BJh)`CAnK}F:xTC">obstacleInstances</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.hide" id="t^p,H=cz+k[v_!RVtSCs">
<value name="BabylonMesh">
<block type="variables_get" id="B6v|i:L_ogs~6W}=KGwa">
<field name="VAR" id="FY|^#Zz#k.B4[{A_DFp]">checkPickMesh</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="CeKO*`J+}6Gz38s?Y{Y7">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id="g?,^Y{,uD!|Q?X@$/V-#">
<mutation name="assignSeparateMaterials">
</mutation>
<next>
<block type="variables_set" id="fNMB(~k[Nz7gy4d`!FB`">
<field name="VAR" id="ETt77.7%q,y#[-0d?b]Y">countTimeMS</field>
<value name="VALUE">
<block type="math_number" id="Uv4%a}:?D%vhNS@SZGHh">
<field name="NUM">0</field>
</block>
</value>
<next>
<block type="variables_set" id="`yNdoof.?bB~}`S@/}:A">
<field name="VAR" id="V8pA:KMfYFm%Mi-Cn;%3">drawnTextMeshes</field>
<value name="VALUE">
<block type="lists_create_with" id="~M4-^bO8XouGxxP};ztD">
<mutation items="0">
</mutation>
</block>
</value>
<next>
<block type="base_time_then" id="Yy:XhGbQ~l@%@-iv0,%7">
<field name="Result" id="qkHe%-0P-88[y=XZ4Yiw">startTheGameMesh</field>
<value name="Promise">
<block type="bitbybit.draw.drawAnyAsync" id="g(CkE:`h[M+G)J*C[96}">
<value name="Entity">
<block type="bitbybit.jscad.text.sphericalText" id="Xc#D,dZAP6q:bn7m%`u|">
<value name="Text">
<block type="text" id="[^+Uo}8N5L^Xf5lS5hG7">
<field name="TEXT">START THE GAME!</field>
</block>
</value>
<value name="Radius">
<block type="math_number" id="~Pd@G)w+2G?7]wB}L/H/">
<field name="NUM">1</field>
</block>
</value>
<value name="Segments">
<block type="math_number" id="O+gS+!=d9)yEtKN3:uHo">
<field name="NUM">10</field>
</block>
</value>
<value name="XOffset">
<block type="math_number" id="=deM]3PMQ[kdn[Ig%}?l">
<field name="NUM">0</field>
</block>
</value>
<value name="YOffset">
<block type="math_number" id="v`IMOjvU0_+DbSle=RHY">
<field name="NUM">0</field>
</block>
</value>
<value name="Height">
<block type="math_number" id="`ZiYQy0Y0WvVqLCR0oL4">
<field name="NUM">4</field>
</block>
</value>
<value name="LineSpacing">
<block type="math_number" id="u9j|o}|_z!g$$)SQ;KD7">
<field name="NUM">1.4</field>
</block>
</value>
<value name="LetterSpacing">
<block type="math_number" id="#lIL{0*{u=2,{3,xf9(^">
<field name="NUM">1</field>
</block>
</value>
<value name="Align">
<block type="bitbybit.jscad.enums.jscadTextAlignEnum" id="J[7i2Od^%YeQEgRT~B-!">
<field name="bitbybit.jscad.enums.jscadTextAlignEnum">'left'</field>
</block>
</value>
<value name="ExtrudeOffset">
<block type="math_number" id="7@XR^]#/N)tFB^]gR@pV">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
</block>
</value>
<statement name="Then">
<block type="bitbybit.babylon.mesh.dispose" id="B3`~$Q%Hh1`9_|2Q~0ot">
<value name="BabylonMesh">
<block type="variables_get" id="ofRj(2mQuz44jLXft=Hm">
<field name="VAR" id=";63j/=~]1TvH[G7Z#h|+">loadingMesh</field>
</block>
</value>
<next>
<block type="variables_set" id="E`|BjxE/6i.#TOrSP@;`">
<field name="VAR" id="u8pzRT~Yq+ci$Pa(n{b1">materialHovered</field>
<value name="VALUE">
<block type="bitbybit.babylon.material.pbrMetallicRoughness.create" id="i0C^F^ewKMV[g$C8rT?c">
<value name="Name">
<block type="text" id="-;be)+Tg*V{kBrxd#J]X">
<field name="TEXT">Custom Name</field>
</block>
</value>
<value name="BaseColor">
<block type="colour_picker" id="dKelGy*J*r2q^g^jnhAi">
<field name="COLOUR">#cc33cc</field>
</block>
</value>
<value name="Metallic">
<block type="math_number" id="PzK6QGXcqtE3T)mt![fb">
<field name="NUM">0.6</field>
</block>
</value>
<value name="Roughness">
<block type="math_number" id="n#_)nsH00~Qt%54C`Mb`">
<field name="NUM">0.6</field>
</block>
</value>
<value name="Alpha">
<block type="math_number" id="O;/YATj6=5Gf=z%vGzc.">
<field name="NUM">1</field>
</block>
</value>
<value name="BackFaceCulling">
<block type="logic_boolean" id="S1!kXoJ:TjnC+mZN}@m9">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="CQ.PD.|GRhlD6.PrPAe+">
<field name="VAR" id="L}.s3i)Ek7.f$`sMC`=I">materialNotSelected</field>
<value name="VALUE">
<block type="bitbybit.babylon.material.pbrMetallicRoughness.create" id="}E7,x=b{=]Mi)uTY!{IM">
<value name="Name">
<block type="text" id="m4#FyN45aGL3_}Qz5|ak">
<field name="TEXT">Custom Name</field>
</block>
</value>
<value name="BaseColor">
<block type="colour_picker" id="^~4%,AkB$.h82bia4Lzp">
<field name="COLOUR">#333399</field>
</block>
</value>
<value name="Metallic">
<block type="math_number" id="L46o{L(?I|]:WUlyn0lS">
<field name="NUM">0.6</field>
</block>
</value>
<value name="Roughness">
<block type="math_number" id="Ho43o}dzi$_te-DcH;=J">
<field name="NUM">0.6</field>
</block>
</value>
<value name="Alpha">
<block type="math_number" id="poZrIjdN:G|q{wr])ews">
<field name="NUM">1</field>
</block>
</value>
<value name="BackFaceCulling">
<block type="logic_boolean" id="+XE4N-Wpk23!3PEM!`S~">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="3sAIL{QLS?.Rzg[q:rtL">
<field name="VAR" id="MZF66Jit8v(%L_G4Ppmo">materialSelected</field>
<value name="VALUE">
<block type="bitbybit.babylon.material.pbrMetallicRoughness.create" id="h^n5h%`?uu--@y-1+bnO">
<value name="Name">
<block type="text" id="w2ljpg,W[8:|q0]xJ8^{">
<field name="TEXT">Custom Name</field>
</block>
</value>
<value name="BaseColor">
<block type="colour_picker" id="xX05%K5pnj+U_2/uspLx">
<field name="COLOUR">#ffcc33</field>
</block>
</value>
<value name="Metallic">
<block type="math_number" id="h3nD]I0:W=Lac{m2$Zgt">
<field name="NUM">0.6</field>
</block>
</value>
<value name="Roughness">
<block type="math_number" id="d;4+{1SU9#gDujLu6vUk">
<field name="NUM">0.6</field>
</block>
</value>
<value name="Alpha">
<block type="math_number" id="1-dJGD*lk%nWNAF1Xf63">
<field name="NUM">1</field>
</block>
</value>
<value name="BackFaceCulling">
<block type="logic_boolean" id="rK_(|glZ{PX,4Ol/f50+">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setMaterial" id="fa[i6R[iJEd`]TOG`Cc|">
<value name="BabylonMesh">
<block type="variables_get" id="j$:m.[zSB1LB[mHRHsK`">
<field name="VAR" id="qkHe%-0P-88[y=XZ4Yiw">startTheGameMesh</field>
</block>
</value>
<value name="Material">
<block type="variables_get" id="%.%C8m@B|NmID-aGA9Nw">
<field name="VAR" id="L}.s3i)Ek7.f$`sMC`=I">materialNotSelected</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="7~UJi?713(7Ib#3uZs+!">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.moveUp" id="F4Hm[V@Mnu($1DuS=ewD">
<value name="BabylonMesh">
<block type="variables_get" id="p/@;;$!k{(ayJ]};j]S(">
<field name="VAR" id="qkHe%-0P-88[y=XZ4Yiw">startTheGameMesh</field>
</block>
</value>
<value name="Distance">
<block type="math_number" id="Y-,TdIzJI*|UAB)*T?U!">
<field name="NUM">30</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setPickable" id="sh=-a31VW4o[BwN5..lS">
<value name="BabylonMesh">
<block type="variables_get" id="+i~x.A`i~ccU[md;;XN{">
<field name="VAR" id="qkHe%-0P-88[y=XZ4Yiw">startTheGameMesh</field>
</block>
</value>
<value name="Pickable">
<block type="logic_boolean" id="#%cO!Zh7r}te1#(Q;449">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="{Ye0f9]rG=VI^2oVU8jv">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="variables_set" id="xesCw53}}/:VB!~3rm^;">
<field name="VAR" id="p5g0UQPeQRKZ=C6QX$!f">isPointerDown</field>
<value name="VALUE">
<block type="logic_boolean" id="=#E-XVp;~f_N4w7FKWV3">
<field name="BOOL">FALSE</field>
</block>
</value>
<next>
<block type="variables_set" id="1t^yag4Qp!rbtIAM@B2-">
<field name="VAR" id="tMWvaMdc|h|+z62Kp).3">startGameHitHppened</field>
<value name="VALUE">
<block type="logic_boolean" id="?qJJP/ffXgy4pNIiU6=_">
<field name="BOOL">FALSE</field>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id="E]FkxNe^^lr,CTT10O;R">
<mutation name="trackPointing">
<arg name="meshesToTrack">
</arg>
<arg name="shouldStartTheGame">
</arg>
<arg name="shouldReplay">
</arg>
<arg name="cleanMeshOnStart">
</arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="R{JE]yUO9PEK,63kk-F*">
<field name="VAR" id="qkHe%-0P-88[y=XZ4Yiw">startTheGameMesh</field>
</block>
</value>
<value name="ARG1">
<block type="logic_boolean" id="7)yM1I.L[Zu;(@G~Zmnz">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="ARG2">
<block type="logic_boolean" id="0f)-O,Q)DANiTrktXxQr">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
<block type="procedures_defnoreturn" id="1svwC2mU_X]xZpa7[Jbb" x="817" y="1375">
<mutation>
<arg name="meshesToTrack" varid="w;,D/nP)6x_3N,Xh+4CA">
</arg>
<arg name="shouldStartTheGame" varid="wdP2]qeqQ+RjpD3B;*h1">
</arg>
<arg name="shouldReplay" varid=".zx|JB2gL|-5(=S3G2F|">
</arg>
<arg name="cleanMeshOnStart" varid="X,7}=g8X@8FQ7lkUEQ7J">
</arg>
</mutation>
<field name="NAME">trackPointing</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="bitbybit.babylon.mesh.setName" id="6xL,4GAz*]=@}QL)]mU$">
<value name="BabylonMesh">
<block type="variables_get" id="Md+gioa}U3_zbAzd*DAd">
<field name="VAR" id="w;,D/nP)6x_3N,Xh+4CA">meshesToTrack</field>
</block>
</value>
<value name="Name">
<block type="text" id=",N.?MM%50)s9N7F)lYeI">
<field name="TEXT">TrackedMesh</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="o2c;L?=Y@SoTrHupb1Am">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="base_time_on_pointer_move" id="`bOX[xahm]9qf#Wdz]mk">
<statement name="Update">
<block type="controls_if" id="cFVS4|(][$v;l9g%9S/t">
<value name="IF0">
<block type="variables_get" id="SAK%)Rf[+Uo=)}#sg`fk">
<field name="VAR" id="E;.tH+kiH]AKdVRt|L(X">gamePaused</field>
</block>
</value>
<statement name="DO0">
<block type="variables_set" id=",edUK=mp2pG;mbcH9`yX">
<field name="VAR" id="eCi)`F3cKkux=_YqV^mb">mousePickingResult</field>
<value name="VALUE">
<block type="bitbybit.babylon.pick.pickWithPickingRay" id="dXGU-TA}?p)rkdlb~vj*">
</block>
</value>
<next>
<block type="controls_if" id="{2mQ=gibc2ai|S8sSlCv">
<value name="IF0">
<block type="logic_negate" id="wsRqR_arqj?hqPRPdLR7">
<value name="BOOL">
<block type="variables_get" id="*KNS4{4ORS4P_AWoMhKl">
<field name="VAR" id="p5g0UQPeQRKZ=C6QX$!f">isPointerDown</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="controls_if" id=";d?w(s6_Rzg5uwYIgu^Y">
<mutation else="1">
</mutation>
<value name="IF0">
<block type="logic_operation" id="VR0uxzDM{qpnF7r.j*({">
<field name="OP">AND</field>
<value name="A">
<block type="bitbybit.babylon.pick.hit" id="y-p}aOy!)`im%-M$_dy,">
<value name="PickInfo">
<block type="variables_get" id=":DLEzA7PW1,6yd=Z?{R1">
<field name="VAR" id="eCi)`F3cKkux=_YqV^mb">mousePickingResult</field>
</block>
</value>
</block>
</value>
<value name="B">
<block type="logic_compare" id="/x4krM7N[NY*m*|jyM:r">
<field name="OP">EQ</field>
<value name="A">
<block type="bitbybit.babylon.mesh.getName" id="?lWQ^XvAB!ob7;i)w^5/">
<value name="BabylonMesh">
<block type="bitbybit.babylon.pick.getPickedMesh" id="PC*i(o7UD7(x=@ncXP#h">
<value name="PickInfo">
<block type="variables_get" id="ev_92,{7Y]LP4INTW`Cw">
<field name="VAR" id="eCi)`F3cKkux=_YqV^mb">mousePickingResult</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="B">
<block type="text" id="!hwel[(CXIf`)VPfLk0L">
<field name="TEXT">TrackedMesh</field>
</block>
</value>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="bitbybit.babylon.mesh.setMaterial" id="$6:azxj}N/MUrfx5%Y@#">
<value name="BabylonMesh">
<block type="variables_get" id="g-_^P,]F,^?pylhZt[gU">
<field name="VAR" id="w;,D/nP)6x_3N,Xh+4CA">meshesToTrack</field>
</block>
</value>
<value name="Material">
<block type="variables_get" id="$$X:8L~#p3l!|DD.a@Q%">
<field name="VAR" id="u8pzRT~Yq+ci$Pa(n{b1">materialHovered</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="ENJ`pk20s307xQDeY*i^">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</statement>
<statement name="ELSE">
<block type="bitbybit.babylon.mesh.setMaterial" id="@tiygT[1c=^v1wbn?B+O">
<value name="BabylonMesh">
<block type="variables_get" id="XNBVU!Lvf-}pO8SbjUN%">
<field name="VAR" id="w;,D/nP)6x_3N,Xh+4CA">meshesToTrack</field>
</block>
</value>
<value name="Material">
<block type="variables_get" id="|OOP9VG3#N(yq3xRQ4nI">
<field name="VAR" id="L}.s3i)Ek7.f$`sMC`=I">materialNotSelected</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="n7Qz-4w6bDsSRCpuVnRJ">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</statement>
</block>
</statement>
</block>
</next>
</block>
</statement>
</block>
</statement>
<next>
<block type="base_time_on_pointer_down" id="|uCZCJr*jpAY~[ReH7)[">
<statement name="Update">
<block type="controls_if" id="/BRZP0QDg5Lo4wHG0C3R">
<value name="IF0">
<block type="variables_get" id=":Q9%gR(G+kYCb[(@+?;P">
<field name="VAR" id="E;.tH+kiH]AKdVRt|L(X">gamePaused</field>
</block>
</value>
<statement name="DO0">
<block type="variables_set" id="w}q::.T_W0n!$1c1A!W/">
<field name="VAR" id="p5g0UQPeQRKZ=C6QX$!f">isPointerDown</field>
<value name="VALUE">
<block type="logic_boolean" id="?r7e-~Z5*_h)Lx:*WHYz">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="variables_set" id=".OY{Da6m2WYxd%0/QYQ7">
<field name="VAR" id="eCi)`F3cKkux=_YqV^mb">mousePickingResult</field>
<value name="VALUE">
<block type="bitbybit.babylon.pick.pickWithPickingRay" id=":A]VzdP=CrD8W]5J#EUI">
</block>
</value>
<next>
<block type="controls_if" id="O03Me.ii]l0?}aF?T7b_">
<value name="IF0">
<block type="logic_operation" id="!N._b1[NsZ1+n/!VUN=Q">
<field name="OP">AND</field>
<value name="A">
<block type="bitbybit.babylon.pick.hit" id="|BNj#puG=0[;RX]X[2e(">
<value name="PickInfo">
<block type="variables_get" id="@~|}80L^s#P]iMMrW^Nu">
<field name="VAR" id="eCi)`F3cKkux=_YqV^mb">mousePickingResult</field>
</block>
</value>
</block>
</value>
<value name="B">
<block type="logic_compare" id="HD$QEEFA^Z7IKf6IlBrB">
<field name="OP">EQ</field>
<value name="A">
<block type="bitbybit.babylon.mesh.getName" id="EE^;.;V,7tYJ=^^0ydHm">
<value name="BabylonMesh">
<block type="bitbybit.babylon.pick.getPickedMesh" id="aS?.WXA-03]OKC_Si+:8">
<value name="PickInfo">
<block type="variables_get" id="e]meOtwZ0t6?Y2b@qQ3N">
<field name="VAR" id="eCi)`F3cKkux=_YqV^mb">mousePickingResult</field>
</block>
</value>
</block>
</value>
</block>
</value>
<value name="B">
<block type="text" id="$2iFvqM_`,8Wu)s}FA{p">
<field name="TEXT">TrackedMesh</field>
</block>
</value>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="bitbybit.babylon.mesh.setMaterial" id="Ew.i0+i^-qPcs+D|!7{4">
<value name="BabylonMesh">
<block type="variables_get" id="-dJ75QSx)|u{Pf+*ZGDv">
<field name="VAR" id="w;,D/nP)6x_3N,Xh+4CA">meshesToTrack</field>
</block>
</value>
<value name="Material">
<block type="variables_get" id="eQZ[Iwxz_X?L6W4GE-x1">
<field name="VAR" id="MZF66Jit8v(%L_G4Ppmo">materialSelected</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="O~bVp_d%yy{,mm+#Sp6,">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="variables_set" id="B!g$E.}_1V38/-{_%_7Z">
<field name="VAR" id="tMWvaMdc|h|+z62Kp).3">startGameHitHppened</field>
<value name="VALUE">
<block type="logic_boolean" id="R^Ruc{j8(wNq@/SWRoFo">
<field name="BOOL">TRUE</field>
</block>
</value>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</statement>
<next>
<block type="base_time_on_pointer_up" id="(72Yi68EOBbGpdT)7XB|">
<statement name="Update">
<block type="controls_if" id="3Fb]%YI~~Y/R?^AUg;7J">
<value name="IF0">
<block type="variables_get" id=",bZ:[6o^jm758JomCcOM">
<field name="VAR" id="E;.tH+kiH]AKdVRt|L(X">gamePaused</field>
</block>
</value>
<statement name="DO0">
<block type="variables_set" id="oZ6=f;7;DfVp{QHd5q*9">
<field name="VAR" id="p5g0UQPeQRKZ=C6QX$!f">isPointerDown</field>
<value name="VALUE">
<block type="logic_boolean" id="NlHW|Yr;jRjyub[FE+Nz">
<field name="BOOL">FALSE</field>
</block>
</value>
<next>
<block type="controls_if" id="y.8|fHuYeET_OWE0,Z(@">
<value name="IF0">
<block type="variables_get" id="DYiDpMMW?0LCpyO!JnjV">
<field name="VAR" id="tMWvaMdc|h|+z62Kp).3">startGameHitHppened</field>
</block>
</value>
<statement name="DO0">
<block type="bitbybit.babylon.mesh.setMaterial" id="@1u0;F(G~kazVA${3$6M">
<value name="BabylonMesh">
<block type="variables_get" id="bu0Q6fx2+6DxrYp7U}r5">
<field name="VAR" id="w;,D/nP)6x_3N,Xh+4CA">meshesToTrack</field>
</block>
</value>
<value name="Material">
<block type="variables_get" id=")P9AD;_L*3gzah0y`(-/">
<field name="VAR" id="u8pzRT~Yq+ci$Pa(n{b1">materialHovered</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="^g{K+}6|rKQHnACYn`=h">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="variables_set" id="1z$L|9Q8aqR7=}!D#fgd">
<field name="VAR" id="tMWvaMdc|h|+z62Kp).3">startGameHitHppened</field>
<value name="VALUE">
<block type="logic_boolean" id="3=0^jv!^U*8A8k:4wC.s">
<field name="BOOL">FALSE</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.dispose" id="AB@uBbAOjm6u`1sjN|Aj">
<value name="BabylonMesh">
<block type="variables_get" id="iRF5pBlrZ@n7!mjJBZ1T">
<field name="VAR" id="w;,D/nP)6x_3N,Xh+4CA">meshesToTrack</field>
</block>
</value>
<next>
<block type="controls_if" id="Snt*(kw:*L`iEk0;,go~">
<value name="IF0">
<block type="variables_get" id="ch2Md^x/mNNY?wwiz||E">
<field name="VAR" id="wdP2]qeqQ+RjpD3B;*h1">shouldStartTheGame</field>
</block>
</value>
<statement name="DO0">
<block type="procedures_callnoreturn" id="~t8P]N$%,p7mXigNfNhV">
<mutation name="startTheGame">
</mutation>
</block>
</statement>
<next>
<block type="controls_if" id="GN-VL3*cDeDku(h9dDl,">
<value name="IF0">
<block type="variables_get" id="vz$9Q~0UH}~!xABADu0f">
<field name="VAR" id=".zx|JB2gL|-5(=S3G2F|">shouldReplay</field>
</block>
</value>
<statement name="DO0">
<block type="bitbybit.babylon.mesh.dispose" id=",dY$ntL$_pTjJ%[^g{4:">
<value name="BabylonMesh">
<block type="variables_get" id="lGk{DZGGZDoglEwF`[s0">
<field name="VAR" id="X,7}=g8X@8FQ7lkUEQ7J">cleanMeshOnStart</field>
</block>
</value>
<next>
<block type="controls_forEach" id="SB_~+S|NF:7lUtoKjW,P">
<field name="VAR" id="i`?upbOhaXrYcEaiH^tC">r</field>
<value name="LIST">
<block type="variables_get" id="hZMP|dg/8il{C9kpKBXf">
<field name="VAR" id=")FB(QiJelx*$9Er+`uG3">obstacleColMeshes</field>
</block>
</value>
<statement name="DO">
<block type="bitbybit.babylon.mesh.show" id="hTA+75.lMS^-Vhu(A%b3">
<value name="BabylonMesh">
<block type="variables_get" id="OGa##M/)qv@=Va=YD2/8">
<field name="VAR" id="i`?upbOhaXrYcEaiH^tC">r</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="i~N0,t*(4T{7K73W}gKG">
<field name="BOOL">FALSE</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setPickable" id="0+-i,eFt-(36Ywd(FVj8">
<value name="BabylonMesh">
<block type="variables_get" id="uUZ^YyntVV|^wM=i8(9a">
<field name="VAR" id="i`?upbOhaXrYcEaiH^tC">r</field>
</block>
</value>
<value name="Pickable">
<block type="logic_boolean" id="c,@z=/16;=!`-rW/z0pZ">
<field name="BOOL">TRUE</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="PSeV4ek/V%xq@-J/Gt1e">
<field name="BOOL">FALSE</field>
</block>
</value>
</block>
</next>
</block>
</statement>
<next>
<block type="variables_set" id="Wp;1Xu~4U8gf~Ag@CCr7">
<field name="VAR" id="$/mds]S[E2a%g6Yc,BVE">secondsGiven</field>
<value name="VALUE">
<block type="math_number" id="t}YQzX0?f2VE+_]K@lto">
<field name="NUM">20</field>
</block>
</value>
<next>
<block type="variables_set" id="eZOjxk85cEj!3p!:%pbn">
<field name="VAR" id="Qcdx,zyv.,|5{Pv,efhl">hitCount</field>
<value name="VALUE">
<block type="math_number" id="j$)L,j}{K4I6xwpr+^Eq">
<field name="NUM">0</field>
</block>
</value>
<next>
<block type="variables_set" id="riJewz|tmw#i2,O3{Vp?">
<field name="VAR" id="E;.tH+kiH]AKdVRt|L(X">gamePaused</field>
<value name="VALUE">
<block type="logic_boolean" id="NIJ^-AiNQR@`{}P`$Mf2">
<field name="BOOL">FALSE</field>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id="Cg}1xUY9#L0BxEOvFKp}">
<mutation name="startTimer">
</mutation>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</statement>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="M5EE#pF:h#I#0u(VC=:V" x="2168" y="1356">
<field name="NAME">startTheGame</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="variables_set" id="dQ~N:]rpA#_X.n1qf;!g">
<field name="VAR" id="N55VA*wQ=JZ7)ZzC![e2">gameStarted</field>
<value name="VALUE">
<block type="logic_boolean" id="{IledY|^eOzWrcsi0;/H">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setVisibility" id="Tt3Vd@s^7nIy0xww/od/">
<value name="BabylonMesh">
<block type="variables_get" id="5|z^uFjgH$2`JPwfn~Mm">
<field name="VAR" id="l;zV{Uv*k.k)m:5$l!+A">ray</field>
</block>
</value>
<value name="Visibility">
<block type="math_number" id="2S^Kvp4!D,+j]67X[zdP">
<field name="NUM">1</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="nmBI|*kXGUbHpO31Sx+^">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.show" id="tAcZ~n#a8T01!mXWoP`z">
<value name="BabylonMesh">
<block type="variables_get" id="m:{73|f1a?J!x$nHMa%a">
<field name="VAR" id="F)w_7v5!Tavx+!ln:d[L">planeMesh</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id=")knqb@S%mP;Y@PfrGwh:">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.show" id="[(H,4e/;U+%D7Q2=mD~f">
<value name="BabylonMesh">
<block type="variables_get" id="N)#2+-=}PP)C6N[f]ur{">
<field name="VAR" id="l;zV{Uv*k.k)m:5$l!+A">ray</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="[ttWYt0O~l[u]{9Sp[O-">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id="6tc.:yRm#5!.@ig~9(tJ">
<mutation name="startTimer">
</mutation>
<next>
<block type="variables_set" id="r,{JE~[NR=^EE8lhPz5[">
<field name="VAR" id="E;.tH+kiH]AKdVRt|L(X">gamePaused</field>
<value name="VALUE">
<block type="logic_boolean" id="uM?xhpM8HzkzwP#{nj|y">
<field name="BOOL">FALSE</field>
</block>
</value>
<next>
<block type="base_time_update" id="#wo+D8w*C-j(eDF/jRIy">
<field name="TimePassedMs" id="i;cm5J?.TgpvRVfg!E6*">timeElapsedFromPreviousFrame</field>
<statement name="Update">
<block type="controls_if" id="%,#3?.8UdZh(]F$#rHHV">
<value name="IF0">
<block type="logic_negate" id="N=_k/i+n6UQJK2nP:e19">
<value name="BOOL">
<block type="variables_get" id="Y~,G`r{qES{Ij8Q_iiU*">
<field name="VAR" id="E;.tH+kiH]AKdVRt|L(X">gamePaused</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="procedures_callnoreturn" id="e_xn{A%,|_khgI]$jW6H">
<mutation name="controlForwardMovement">
<arg name="targetList">
</arg>
<arg name="restoreHit">
</arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id=":f^NLAOe?P~*apt}Bzvk">
<field name="VAR" id=")FB(QiJelx*$9Er+`uG3">obstacleColMeshes</field>
</block>
</value>
<value name="ARG1">
<block type="logic_boolean" id="sIhhWcYF$(3UllfmZ!3q">
<field name="BOOL">TRUE</field>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id=":Lz%)}SKVPaQA1j_xle2">
<mutation name="controlForwardMovement">
<arg name="targetList">
</arg>
<arg name="restoreHit">
</arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="f9vDN%jiHA5mp|m42ON;">
<field name="VAR" id=";5h%^BJh)`CAnK}F:xTC">obstacleInstances</field>
</block>
</value>
<value name="ARG1">
<block type="logic_boolean" id=")~=-7dS/8~N208S;DldT">
<field name="BOOL">FALSE</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setRotation" id="0zgt=771`JI%pt{0sHk`">
<value name="BabylonMesh">
<block type="variables_get" id="bbz|(BaZUNFv1zjZ+V8-">
<field name="VAR" id="F)w_7v5!Tavx+!ln:d[L">planeMesh</field>
</block>
</value>
<value name="Rotation">
<block type="bitbybit.point.pointXYZ" id="4/`B_z=ou`jgm0-c-Tfv">
<value name="X">
<block type="math_number" id="4@{FV[aadV+bQ(d+a-3T">
<field name="NUM">0</field>
</block>
</value>
<value name="Y">
<block type="math_number" id="5NwH(SHRBvquCa8BHxcw">
<field name="NUM">0</field>
</block>
</value>
<value name="Z">
<block type="math_number" id=";P4~9.0Ny1YN8uh`w-6*">
<field name="NUM">0</field>
</block>
</value>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id="[u2@Zx3?]AvHw^M{iW2n">
<mutation name="controlObstacleMovement">
<arg name="meshesToMove">
</arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="9td2X:+#idm8p0;gJOji">
<field name="VAR" id=";5h%^BJh)`CAnK}F:xTC">obstacleInstances</field>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id="2Bq,N|)o2:.Cobc7Q2=m">
<mutation name="controlObstacleMovement">
<arg name="meshesToMove">
</arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="R!Y(+.Z;gj~*NEHO$Z^-">
<field name="VAR" id=")FB(QiJelx*$9Er+`uG3">obstacleColMeshes</field>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id="f(fTB}e%0=C@uDSPW*1c">
<mutation name="controlPlaneRotations">
<arg name="plane">
</arg>
</mutation>
<value name="ARG0">
<block type="variables_get" id="gcqFHLpLiJ)^rpW_U,XA">
<field name="VAR" id="F)w_7v5!Tavx+!ln:d[L">planeMesh</field>
</block>
</value>
<next>
<block type="variables_set" id="s*y7FZw,jI{}h6U)whO{">
<field name="VAR" id="42j0uXu*zxT#gWpBf|mU">collisionFound</field>
<value name="VALUE">
<block type="logic_boolean" id=":S2[}$2(zCb9fGZCPa|,">
<field name="BOOL">FALSE</field>
</block>
</value>
<next>
<block type="variables_set" id="8XkT%XS_9jG=FzrK)XNd">
<field name="VAR" id="30#%0]L$:t6Ou}288YJ,">rayToCheck</field>
<value name="VALUE">
<block type="bitbybit.babylon.ray.createRayFromTo" id="xqI%TVs)9p[E7.;s,CXd">
<value name="From">
<block type="bitbybit.babylon.mesh.getAbsolutePosition" id="~1{pCsf9Ue!_!-j[KT]O">
<value name="BabylonMesh">
<block type="variables_get" id="G!Knp1u%kxp{K2ory5;$">
<field name="VAR" id="Z^6N%Qz;I1*UFFI1d]5M">rayStart</field>
</block>
</value>
</block>
</value>
<value name="To">
<block type="bitbybit.babylon.mesh.getAbsolutePosition" id="]uprkPj:oEVXa=cPDv=5">
<value name="BabylonMesh">
<block type="variables_get" id="k8p)Q,m0u*#mC?N*,L.2">
<field name="VAR" id="-Z2ex1M1~fOr(z`/x`!G">rayEnd</field>
</block>
</value>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="XOQs-/gpiB;CciSl7$(#">
<field name="VAR" id="@+:8_}NyQKSt3ZqRj)}z">pickResult</field>
<value name="VALUE">
<block type="bitbybit.babylon.pick.pickWithRay" id="[N5AFx*6Ao,bf,Y++g|7">
<value name="Ray">
<block type="variables_get" id="t*lM(i7rWoTl%1xct)7@">
<field name="VAR" id="30#%0]L$:t6Ou}288YJ,">rayToCheck</field>
</block>
</value>
</block>
</value>
<next>
<block type="controls_if" id="7dcijs5=0QSrFb]oZ8t{">
<value name="IF0">
<block type="bitbybit.babylon.pick.hit" id="z*{V3t(60uH10P.8)o+{">
<value name="PickInfo">
<block type="variables_get" id="ySU3wYD`rqck@8)_M{?b">
<field name="VAR" id="@+:8_}NyQKSt3ZqRj)}z">pickResult</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="variables_set" id="HkFLc#I0V|hHu,Vta:OH">
<field name="VAR" id="x1}?6sE~+;43`Nb.]z]P">hitCountPrevious</field>
<value name="VALUE">
<block type="variables_get" id="`?CbaRU_?=rt]1g~mu,z">
<field name="VAR" id="Qcdx,zyv.,|5{Pv,efhl">hitCount</field>
</block>
</value>
<next>
<block type="math_change" id="yK7s%|E]q~^*]l(BUSgN">
<field name="VAR" id="Qcdx,zyv.,|5{Pv,efhl">hitCount</field>
<value name="DELTA">
<shadow type="math_number" id="lXa1(n7?p1%:+bFoYN/L">
<field name="NUM">1</field>
</shadow>
</value>
<next>
<block type="variables_set" id="9C6ima4AFWY5Dy#l=dYR">
<field name="VAR" id=".UBM#mP(,U}f;{jf]Q5l">hitMesh</field>
<value name="VALUE">
<block type="bitbybit.babylon.pick.getPickedMesh" id="27A%I9b`p($kcRa.x^/8">
<value name="PickInfo">
<block type="variables_get" id="-s[S+ccKv0Zu(k$bg}:A">
<field name="VAR" id="@+:8_}NyQKSt3ZqRj)}z">pickResult</field>
</block>
</value>
</block>
</value>
<next>
<block type="variables_set" id="JaI+aqDNgixUFrNoY!eq">
<field name="VAR" id="W,]`|.USpL!Gl7lG}w8$">material</field>
<value name="VALUE">
<block type="bitbybit.babylon.mesh.getMaterial" id="#giI3%|%cEaLn^$mdQ!u">
<value name="BabylonMesh">
<block type="variables_get" id="Z$az44Jo,//}5Y:R!QCy">
<field name="VAR" id=".UBM#mP(,U}f;{jf]Q5l">hitMesh</field>
</block>
</value>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.setPickable" id="FYB(6%PAQh*ulq?BV*2`">
<value name="BabylonMesh">
<block type="variables_get" id="2l3t5{|nWK75k%R_0jaH">
<field name="VAR" id=".UBM#mP(,U}f;{jf]Q5l">hitMesh</field>
</block>
</value>
<value name="Pickable">
<block type="logic_boolean" id="8]Oc/)v2=TmzPt:D,f~V">
<field name="BOOL">FALSE</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="ndZ{P15w%RzyhGlgT.QN">
<field name="BOOL">FALSE</field>
</block>
</value>
<next>
<block type="bitbybit.babylon.mesh.hide" id="[:i`3b|3fYLu$+Z|[U6*">
<value name="BabylonMesh">
<block type="variables_get" id="hi1xY~dmW~n9J2dijXFn">
<field name="VAR" id=".UBM#mP(,U}f;{jf]Q5l">hitMesh</field>
</block>
</value>
<value name="IncludeChildren">
<block type="logic_boolean" id="6^o5HZG77]RThsN?*E@9">
<field name="BOOL">FALSE</field>
</block>
</value>
<next>
<block type="procedures_callnoreturn" id="PbGqX4b7!HjO42Y((Q9B">
<mutation name="textOfHitCount">
</mutation>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
</statement>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="xbTGs3h|q}jKf*Z7;I@6" x="3146" y="1430">
<field name="NAME">startTimer</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="variables_set" id="_aiBkVp?mnS">
<value name="Interval">
<block type="math_number" id="W:l?UxCyoq2}dYSWZeDL">
<field name="NUM">1</field>
</block>
</value>
<statement name="Then">
<block type="procedures_callnoreturn" id="^S?}wYK1z0TLH-yAGM~M">
<mutation name="createTimerIndicator">
</mutation>
</block>
</statement>
</block>
</value>
</block>
</next>
</block>
</next>
</block>
</next>
</block>
</statement>
</block>
<block type="procedures_defnoreturn" id="E}[ZDOhYEf#^Od3l%ZJj" x="4269" y="1425">
<field name="NAME">textOfHitCount</field>
<comment pinned="false" h="80" w="160">Describe this function...</comment>
<statement name="STACK">
<block type="controls_if" id="3jt{]^HwVJU_SwcE3LQ)">
<value name="IF0">
<block type="logic_compare" id="Q%L$1(MEJi1^I}8`0H$D">
<field name="OP">GT</field>
<value name="A">
<block type="variables_get" id="$R`00Dz|cX@;]K}Ck8@x">
<field name="VAR" id="Qcdx,zyv.,|5{Pv,efhl">hitCount</field>
</block>
</value>
<value name="B">
<block type="variables_get" id=",Hq^P8][3W`F:*?MqE}d">
<field name="VAR" id="x1}?6sE~+;43`Nb.]z]P">hitCountPrevious</field>
</block>
</value>
</block>
</value>
<statement name="DO0">
<block type="base_time_then" id="w;DvmzHpTSHI}swdZY5u">
<field name="Result" id="W{L4]JR8wmj_O^DxvM+7">resultingTextMesh</field>
<value name="Promise">
<block type="bitbybit.draw.drawAnyAsync" id="Zl+A#HIW`*mJWJ3:ftP;">
<value name="Entity">
<block type="bitbybit.jscad.text.cylindricalText" id="e|WRE@FtGFT:pA5yME_g">
<value name="Text">
<block type="text_join" id="hVjp)ej$S8Brez!0I=n-">
<mutation items="1">
</mutation>
<value name="ADD0">
<block type="variables_get" id="ANy(fP0y09K*1/bEm*hk">
<field name="VAR" id="Qcdx,zyv.,|5{Pv,efhl">hitCount</field>
</block>
</value>
</block>
</value>
<value name="ExtrusionHeight">
<block type="math_number" id="#2?DbV?]Ip9#e8/wxT9{">
<field name="NUM">0.2</field>
</block>
</value>
<value name="ExtrusionSize">
<block type="math_number" id="w#gQI=#qWwg=v#~sjZG(">
<field name="NUM">0.1</field>
</block>
</value>
<value name="Segments">
<block type="math_number" id="=@k%;GEDn5.BV[MFFs?`">
<field name="NUM">12</field>
</block>
</value>
<value name="XOffset">
<block type="math_number" id="3U,LoosoJ`k2^Y4
Editor plans for 3D development, API keys for server-side CAD algorithms
Cloud storage, private projects & 3D tools for Bitbybit editors
* "Unlimited" means high limits that most users won't reach. Compare the plans
Run CAD algorithms on managed cloud servers from your own backend applications
Custom software development, dedicated servers & CAD automation at scale.