From 2f904cd21624cf6137dc8d3f1eba651be4e0c7e9 Mon Sep 17 00:00:00 2001 From: Chris Bradfield Date: Fri, 25 Nov 2022 17:38:59 -0800 Subject: [PATCH] Updated "2D movement overview" (#6423) * Update tutorials/2d/2d_movement.rst Co-authored-by: Raul Santos --- tutorials/2d/2d_movement.rst | 189 ++++++++---------------- tutorials/2d/files/2D_movement_demo.zip | Bin 13917 -> 7053 bytes tutorials/2d/img/movement_inputs.png | Bin 16785 -> 0 bytes tutorials/2d/img/movement_inputs.webp | Bin 0 -> 19798 bytes 4 files changed, 62 insertions(+), 127 deletions(-) delete mode 100644 tutorials/2d/img/movement_inputs.png create mode 100644 tutorials/2d/img/movement_inputs.webp diff --git a/tutorials/2d/2d_movement.rst b/tutorials/2d/2d_movement.rst index cb58a6f8b..34ac2ff52 100644 --- a/tutorials/2d/2d_movement.rst +++ b/tutorials/2d/2d_movement.rst @@ -25,7 +25,7 @@ for the Sprite2D's texture or use any other 2D image you have. Open ``Project -> Project Settings`` and select the "Input Map" tab. Add the following input actions (see :ref:`InputEvent ` for details): -.. image:: img/movement_inputs.png +.. image:: img/movement_inputs.webp 8-way movement -------------- @@ -36,77 +36,52 @@ fact that the player can move diagonally by pressing two keys at the same time. .. image:: img/movement_8way.gif -Add a script to the kinematic body and add the following code: +Add a script to the character body and add the following code: .. tabs:: .. code-tab:: gdscript GDScript extends CharacterBody2D - export (int) var speed = 200 - - var velocity = Vector2() + @export var speed = 400 func get_input(): - velocity = Vector2() - if Input.is_action_pressed("right"): - velocity.x += 1 - if Input.is_action_pressed("left"): - velocity.x -= 1 - if Input.is_action_pressed("down"): - velocity.y += 1 - if Input.is_action_pressed("up"): - velocity.y -= 1 - velocity = velocity.normalized() * speed + var input_direction = Input.get_vector("left", "right", "up", "down") + velocity = input_direction * speed func _physics_process(delta): get_input() - velocity = move_and_slide(velocity) + move_and_slide() .. code-tab:: csharp using Godot; using System; - public class Movement : CharacterBody2D + public partial class Movement : CharacterBody2D { - [Export] public int speed = 200; - - public Vector2 velocity = new Vector2(); + [Export] + public int Speed { get; set; } = 400; public void GetInput() { - velocity = new Vector2(); - if (Input.IsActionPressed("right")) - velocity.x += 1; - - if (Input.IsActionPressed("left")) - velocity.x -= 1; - - if (Input.IsActionPressed("down")) - velocity.y += 1; - - if (Input.IsActionPressed("up")) - velocity.y -= 1; - - velocity = velocity.Normalized() * speed; + Vector2 inputDirection = Input.GetVector("left", "right", "up", "down"); + Velocity = inputDirection * Speed; } - public override void _PhysicsProcess(float delta) + public override void _PhysicsProcess(double delta) { GetInput(); - velocity = MoveAndSlide(velocity); + MoveAndSlide(); } } -In the ``get_input()`` function, we check for the four key events and sum them -up to get the velocity vector. This has the benefit of making two opposite keys -cancel each other out, but will also result in diagonal movement being faster -due to the two directions being added together. +In the ``get_input()`` function, we use :ref:`Input ` ``get_vector()`` to check for the +four key events and sum return a direction vector. -We can prevent that if we *normalize* the velocity, which means we set -its *length* to ``1``, and multiply by the desired speed. +We can then set our velocity by multiplying this direction vector, which has a +length of ``1``, by our desired speed. .. tip:: If you've never used vector math before, or need a refresher, you can see an explanation of vector usage in Godot at :ref:`doc_vector_math`. @@ -131,78 +106,54 @@ while up/down moves it forward or backward in whatever direction it's facing. extends CharacterBody2D - export (int) var speed = 200 - export (float) var rotation_speed = 1.5 + @export var speed = 400 + @export var rotation_speed = 1.5 - var velocity = Vector2() - var rotation_dir = 0 + var rotation_direction = 0 func get_input(): - rotation_dir = 0 - velocity = Vector2() - if Input.is_action_pressed("right"): - rotation_dir += 1 - if Input.is_action_pressed("left"): - rotation_dir -= 1 - if Input.is_action_pressed("down"): - velocity = Vector2(-speed, 0).rotated(rotation) - if Input.is_action_pressed("up"): - velocity = Vector2(speed, 0).rotated(rotation) + rotation_direction = Input.get_axis("left", "right") + velocity = transform.x * Input.get_axis("down", "up") * speed func _physics_process(delta): get_input() - rotation += rotation_dir * rotation_speed * delta - velocity = move_and_slide(velocity) + rotation += rotation_direction * rotation_speed * delta + move_and_slide() .. code-tab:: csharp using Godot; using System; - public class Movement : CharacterBody2D + public partial class Movement : CharacterBody2D { - [Export] public int speed = 200; - [Export] public float rotationSpeed = 1.5f; + [Export] + public int Speed { get; set; } = 400; - public Vector2 velocity = new Vector2(); - public int rotationDir = 0; + [Export] + public float RotationSpeed { get; set; } = 1.5f; + + private int _rotationDirection; public void GetInput() { - rotationDir = 0; - velocity = new Vector2(); - - if (Input.IsActionPressed("right")) - rotationDir += 1; - - if (Input.IsActionPressed("left")) - rotationDir -= 1; - - if (Input.IsActionPressed("down")) - velocity = new Vector2(-speed, 0).Rotated(Rotation); - - if (Input.IsActionPressed("up")) - velocity = new Vector2(speed, 0).Rotated(Rotation); - - velocity = velocity.Normalized() * speed; + _rotationDirection = Input.GetAxis("left", "right"); + Velocity = Transform.x * Input.GetAxis("down", "up") * Speed; } - public override void _PhysicsProcess(float delta) + public override void _PhysicsProcess(double delta) { GetInput(); - Rotation += rotationDir * rotationSpeed * delta; - velocity = MoveAndSlide(velocity); + Rotation += _rotationDirection * RotationSpeed * (float)delta; + MoveAndSlide(); } } -Here we've added two new variables to track our rotation direction and speed. -Again, pressing both keys at once will cancel out and result in no rotation. +Here we've added two variables to track our rotation direction and speed. The rotation is applied directly to the body's ``rotation`` property. -To set the velocity, we use the ``Vector2.rotated()`` method, so that it points -in the same direction as the body. ``rotated()`` is a useful vector function -that you can use in many circumstances where you would otherwise need to apply -trigonometric functions. +To set the velocity, we use the body's ``transform.x`` which is a vector pointing +in the body's "forward" direction, and multiply that by the speed. Rotation + movement (mouse) --------------------------- @@ -218,56 +169,41 @@ is set by the mouse position instead of the keyboard. The character will always extends CharacterBody2D - export (int) var speed = 200 - - var velocity = Vector2() + @export var speed = 400 func get_input(): look_at(get_global_mouse_position()) - velocity = Vector2() - if Input.is_action_pressed("down"): - velocity = Vector2(-speed, 0).rotated(rotation) - if Input.is_action_pressed("up"): - velocity = Vector2(speed, 0).rotated(rotation) + velocity = transform.x * Input.get_axis("down", "up") * speed func _physics_process(delta): get_input() - velocity = move_and_slide(velocity) + move_and_slide() .. code-tab:: csharp using Godot; using System; - public class Movement : CharacterBody2D + public partial class Movement : CharacterBody2D { - [Export] public int speed = 200; - - public Vector2 velocity = new Vector2(); + [Export] + public int Speed { get; set; } = 400; public void GetInput() { LookAt(GetGlobalMousePosition()); - velocity = new Vector2(); - - if (Input.IsActionPressed("down")) - velocity = new Vector2(-speed, 0).Rotated(Rotation); - - if (Input.IsActionPressed("up")) - velocity = new Vector2(speed, 0).Rotated(Rotation); - - velocity = velocity.Normalized() * speed; + Velocity = Transform.x * Input.GetAxis("down", "up") * Speed; } - public override void _PhysicsProcess(float delta) + public override void _PhysicsProcess(double delta) { GetInput(); - velocity = MoveAndSlide(velocity); + MoveAndSlide(); } } Here we're using the :ref:`Node2D ` ``look_at()`` method to -point the player towards a given position. Without this function, you +point the player towards the mouse's position. Without this function, you could get the same effect by setting the angle like this: .. tabs:: @@ -293,10 +229,9 @@ on the screen will cause the player to move to the target location. extends CharacterBody2D - export (int) var speed = 200 + @export var speed = 400 - var target = Vector2() - var velocity = Vector2() + var target = position func _input(event): if event.is_action_pressed("click"): @@ -305,36 +240,36 @@ on the screen will cause the player to move to the target location. func _physics_process(delta): velocity = position.direction_to(target) * speed # look_at(target) - if position.distance_to(target) > 5: - velocity = move_and_slide(velocity) + if position.distance_to(target) > 10: + move_and_slide() .. code-tab:: csharp using Godot; using System; - public class Movement : CharacterBody2D + public partial class Movement : CharacterBody2D { - [Export] public int speed = 200; + [Export] + public int Speed { get; set; } = 400; - public Vector2 target = new Vector2(); - public Vector2 velocity = new Vector2(); + private Vector2 _target; public override void _Input(InputEvent @event) { if (@event.IsActionPressed("click")) { - target = GetGlobalMousePosition(); + _target = GetGlobalMousePosition(); } } - public override void _PhysicsProcess(float delta) + public override void _PhysicsProcess(double delta) { - velocity = Position.DirectionTo(target) * speed; + velocity = Position.DirectionTo(_target) * Speed; // LookAt(target); - if (Position.DistanceTo(target) > 5) + if (Position.DistanceTo(_target) > 10) { - velocity = MoveAndSlide(velocity); + MoveAndSlide(); } } } diff --git a/tutorials/2d/files/2D_movement_demo.zip b/tutorials/2d/files/2D_movement_demo.zip index cc591e02f775e2953d734df4a64b05252238cc80..120975c9e346d9509df626d23da5f25712cf042a 100644 GIT binary patch literal 7053 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 K|9-pj{po)&)RYte literal 13917 zcma)D1yo$gw#6a1y9Rf6mq2iL3GNykf&>c=!5xCT6P)1g?(Xg`znOV6FPWeJ-tS&@ z`}SRZH^r%QZk@Atm7F9f7&Or9Yc0e_>W`Cu9gu(!ftW-HrEQ#ytclc%IStuaSd5HV*%;{T9gJLF`_2pK_g{Y$ zcnFT^Tuek!NdWL4zcw&H0|G*X1O^-{;DCVSWW)%A00%f|>{k=PiN6<70DKC(HYfRIQSZ!%GQGhUEHALDbU4dMhJn_o=O-Ff&1so4p@HtQ;m#kM# zKJUOnlpqKkok1|}PHFh+JQR?0dH|WH0@tWSWGfK)IY`DH(+4BJB^dyF((&Po=r^3? z#Zia>$(Y=LyC(&TV6T%vUgskc$3(W;4Skb8nY6I%0z^cjWDdt=01_aABNP?sS2wZ& zR|*ozBBW@@Vu}v5J0$*|>Z)YQ1?a1i`Q0WP$2NZXq2x0 z{;hr`^P$J|5Wc<%;GE_SXzkN(r840l==D700?l9=Q<}IlnnENq7!g=-X8B%~N7LnW zce#~k!zm*^ZE7H*Ph_T?=P^iQL`=oj1t<&WJcP(d9e0MU2>Qj2)K*J{KNOL?%1n2o zdl84$QhOaPj%>WlrkC?^UQ=PIX5-@_EC8jq;b{t&XGiytf!Z0qrsA|>kLI=!a@O&d zAWzC0o9@xJR_#&qS{DfoB1vb=&0=bEO{uAvl0VVCP5tj7aM8%K)= z1lhri4jjXYuP`o;OlVFN*EWuL zm1#V85XFOxbER?dWMenDLA26je8V)*N{$6)xillD&UUpEi!~bR7B0}^(`m&H+Q08b zxmppNy)A_|{lUb7a*5rF^F5p$aXt1ZuR`;(+MO#k#&mRacDoA$_KK=eahu(vGo+3y zqof1e0UI@_V=6qs$hq%upIE1p2XfaDn@JJUpLRe>8o0$(^DJA^Se1bH0pCvt!~F+i zn0Gqw1IJ1#8#^ie2Gh~R=xOAFNpWq?N0pgS*2M(Dp)tyWtCyQXhBh zWfc`tM*3^n*3a(xr0_Z~E_N8q4xNE+H^M!NUF?M?KX&Dt$x;H59jpeT{die2d$e5^ zZmRu(T}$7qh!XJa>#7&uvb4B7KBxL#(~A)+0e(Iyrh@h2I8;7q+hWwWK^*=V`|`Zi;g+mLW>31CFdJDO&$#K9KEgYioBta`KAub z4jaJxn!JE7P`%L9wW&f1W@_JEtkXZf<C3mFwDJZ`O-jC3cU>b-D|1U^-D66`X183I|l*bDqpGOui~z2Gs`y2 z(dP=i)mUbx;Z1wNyWR-=%hKxa;3RXm^q9>y3Rea6na$LhXd^0vvH2cdoI4wk@DQQ> zZ@X-!zkNm3abe&um4GLq=SheVRd~IK1bv17K>)R=^)5iN>AMq*vkAGP#;mi%fr_Gr z>CW+?p^j#w{{>w9eKEn5=q^I~vC&yH^LtsQOAWESIG2xF=w0e6#bmUx(s-7Jir)4L7<2r?O6TRSdRFa-F;N30)l^;y>u!0tNo+_Rzx9BFh%E!?G3G{Q7= z(zuggi;%p-!{LvIq}S3GQJ0rAyC5O0X~I}*NkZ;!42gmACdAzW{M%t+qG2E|HW0$c z)~|2IneIzmq{eh@TsKH_Tn*L2Qh43t-oaonnp_hPy1B67uv;2FcUp?(k_K4CC*_l~ zGCsO?_Ew8*%MKcE1cbf*#NL>{J<~sg!~L2DONCfc;zD1(S@k{@nfYK!3NtNq=D=ug zBwk+K6&|Q|VF;(}M_Y@Bdm>li&Z2xuV&^_MX|ax+ke#tY#Cbv1;o(AUJiCq;Xl*0& z8wGXO@EraR0RVvZQ^Udg=RD^7BX7MvGC#za`1py*$;qrwGo?$gIEKe(JTqzDByUK> zBQ0ciDV-w|wHw{&^rWSw0Y4=6(^dQUG6D~{cbhs$HdO}WyH?TE_#)B+TSI+EhzgG9 z$=H;tz1Yiz?~{{&L1X+yy!Phyc2xY#lRKq2GPB9>s;%-NWqF4(yzy|#XA(zMMtc5; z#YL^*4^CaAd_j^LkFm1-@`%N^Qy(QHCB>y{6xGyv&(VH#T9sE_C>abgIj5Pwo`341 zr=+1FVV#oM1I;N`tH1?sqfU?M5x%-5c_+(WeUWwZW4+$YwduAh{jFc?5klpaDc%8F zyua1PC3uHtOWez>R`&!-z}a|Fnf_#iMrM1vmYGRO&U z%yQi4rhSjsZTHa zem@8@gXfTQO?19iadbCsUcWOrAsEhgknFr3;g1x{r9D5k`X~q;GL5@m^GVJpd}Bw` z?n~-oIUzxY#TO75-BqtB5iN;tFX_KCiaxBUF zD$H5Uu|XSW6~Cj6^xSQQsOV4$g9?^4rks4`V6zE>X_@-wzTW9 znwf>I0kQ5Q$?0hK^dfOK$8o2m3fpZ(uW0GoKKRr<3Ti9?$57K()3sv>sm_HUgb6{t zXEJ9no5FNlnmXL4#wDIW=CuD_DeK-4I1lU|o?>{uwDOH%slD$$EqapN2*d8dC~8PU zii?#j6+2lxLzl)Mz9HWlou2QnoSCk)npsQO1Zzr_G@6XoN(Ur)MiiK!`u2c9-rRYf z?;)pxs9cL3WX}}vOy-OkMgK@H2Y>Rq4=y0<%$|MQ1JyisXqr`6`gJ33#IC6+7$vXh zw40$r>}@W$P{ryMIETwRETn8o{k>F?d~}>XF>RMb=A7SHhA^$T8g1&{N3moSPSp0J zv$11`vC%~#;VMus!h7DQuuK)X6c9ZXRHIf;=2Zl+f&!b&+?JjCwi1E*$`D1l6lCZt zAR^b*<|nJQ!V>7Ks0Exwc)|ypbZ&vCoB@^Em3nRDat(P@&ee-Y=}@0YT$0s`42ocy zH)b_pxX$j6MZitN(?86~{Wb}8Om<4If`@vP;|9M1rJGOg_hrDs-SbdLKoODnA%fl; z6ebJq$eQ?qHCaC%!^@!xm2+c8?obkmtAJv{aS_PvpWmur!8MowY6Ys@#=Cd|NNjM! z+Me2Z-BDUbOh>+mg)daRHn2d}WwH?8`xR_M2sks4%#-C%d4(4FW;)u(?k?`IoqKOu zaG{^G-iExuLl~)N$!Cq_-+84n^7Y=B;^42U8lXR3!KY=MQF zfs-)nK6UmrH0~3no5i&5D99~oBL0P$P<6w@$z$*`KDbm(hz2Kqj|R~8580?PoM^z( zG!UYy8OEJJ?xxP%IVyUc2|RsGre(XNu_`z@4WD^&9!)LteRrlRbIemQ zBrNUQG#GcKzjes7QM(7!qAVV-Jv-CsJBKYj1^Higuaw^rSP8fI$Y^6Aq}!xOoV;zO z&-k1?k(6#R_bG+?u7QO7hv9*@{35nTMV9$JOQs{PWf-cQ7iluWtEF&HKW|L}tk(gk zcmHjv`G3#=*#D=c9PACOUv0$$sHtDuD<9wyHDv9}farI^v4FscOD1?tx|rybV3P z#nwC59wcGQGu>Z_k2W45y(uDz%CMz2(!btz{64aeO48{iR9w%&(2;q_YS(aQmBj@_ zU-elk++>=NXC}<&(+F*L844*Pp4$Yv=_E#7W(=-+_c{gquEMBiKA-7yokQF4I)ya; z#DZRh2I*md+PqRLi%k&YY$8juBpj+Y>PYVX8!?gss~s5XuFvt%yUR(`egc>|BobLL zUGBD%vYuBO;a^-Wf|?-q8%6i!_l3RlHuK%M@2}==ec(XGK$NP#cAsfkTBlyx20d%3 zANM+-i^fEht|s`O5iUi%c>&J`qlg?QQde_mU@PPr`%bgSQEGP!PP8!8M;{$Mpcsl> z`Y>Z2B?t%qAkx?P(V7ja1^9L3+I-Xf^#P+64)XKJ{gc2U{N2b2TbdbI2wEGy(mMb0 z^;a(EFFwaA0+2#5Aa;!mwxhFvY+S(OBpx%nvs!I86D)YtCx7S4lpzg zJ~U(Sz=(cWO?*47(#u=g^N+ z^F=|1xK{q0C-S%*?WV+5c@fDGW1v;chnh=_QwTOMev#oSxJ#WZ_qylD;{8&>s#zy_ zD;&LYJ7_gx&6gK7;0=X|HYYu(0JA0sO1(J$``CLqdsG$Yvh`V&Ky+G4M}I zzWuM3{3{lIwxvf@n`}D+YWK+lby6Awqd_uRejj{rS||pg4wSmY114OK)jb!;OS6q{ zL3F3)ip7uTmYbRZ4P}Zp5N4TCCZC@3G%Kyy5H<8767_aQ72r`;L6D2L){-(?6D~Zg z8pmlR_qLGlExOcsTq*9fAdZMlG-B`e3F_m9bC;)^tp&-Gfl|vs4XU2y(?$jbMD;8{ zFG^13nyzC+*f5t`giPQO3v1AOCE{|_h2nj}tggg0FoKa92gcue(O55Z8Aes%=&R>> zt5?`y(FH@r*Sp!D%!80-ZiOi3gnQ0MtRL7+|{DRe)Iyd)BIJpOUV`bId>4eM4qI6#*e$=$V? zmjv|#lbnPfXT%Yq{89kLCLs&F?O3D*k;JnOG5UDnVr zmmC!^!;3UbX#=i6)RR&X5~Y*TNJ*Sz$s1>@y%Ao@+S(;j+p;1+e08gPjnAAT%+Sjd zrHxejtOE8-V8GLeq-)yPMp`ZzrB3O*3wjVwFbg31vlj7%ZO|osnJSgJR*(09kfoQa zznKlj$YKbEL2u9__=xcs1Gmk@d?R98Tw z6V-0Ep~q?jR|`g(T64;YU%;XnlQGCys0R25^F(@<5UF(BTZ541zPhhW5I=LYc=0hIhr|i zJ%u~CA(a9=>d>RGMV&iNZoEeH(D&Sfc}NYYZQA>8GBMB|*{H}kX~5Ms;92dX6;NAA zw(qWJA;{J7A*Q9`d)kxUq8aCc<~{_>qYrki5ojBb-&!FiYxzwM&U!bOK{(qA@kV9Q zS9=etRm(smQ>b1Izn6-=#@Q{M40XWpzpt00o7>$tw%@kqe9Ljy8)87r?Anw>Y+_uA z)_l}0Uy&Lf#7~U@Z@4LuaGzq8c}LcO;DP4bm0P_Sh0m7L!-;)E^hrW0V?63q=4MT} zO`jD-|FmQa82QHv?zF*dAO5mmvo1&Ycaa4AJ9mhA%-fgo(9F5 zYTlEDap_9#9UZRsd#qWAO||k4!;N0AfeW$Pn5zK_1cVBp*#Dh{r2c=@gum$j*MMyS zOk%>YdJaDIXIhl&wWnvm~4Gtptv=dzeSawvD?l7Qx^yw-l3>-4lM-8jU)XWGA?#+ zE{+L^zDCOAB|Ct1e^4&8KIYuvUb$JC*f~qJ2b=jOJ3{Vp+bb_f5)`jT|7cUbPOtIc9qY zpDrY)bkOZ%yy|ogLPyNkn?e=Z5ws{jzP3P(BC#k#Kg8z1A5Ta^gyKw8HR!RTlC3*} zt%O7eL--#~i5V}K$wQ{NT9643P^8~i?yDRumVtqKYFVkE#(0m=cE8t9*PswkvAFWO z=mvdX2@Q}B1bSbuflqyg1U3viRynvX8Pl_n!*h`Xsq{YSoH<$L(ySu+90++|(;+Fr zz~K1lO}+ZI&c!x73p3zc{LK^l({8yk;rhc-RbFCL0}wdO*mL3E2S;o;kI+NJ2EcuxuQ+nyMNiISZZ4hcOBn-oy*~p`_b@h2ln)3I zBdy!lReQapTFXGOVQkX``J}Xh1A|dgxe>VCyKAmI*M|}sN5ctwxD#f})j?VBWkOB* zxWBl#%Q|9g0H-Vi{XyL)AjP0#L~)Nw9Sbn$bonnb8-oF^ub)FS#8k}kG&ScXk)Ghb z++LbOA5{d{UnzUsv6e)k5#HASQLHoIeIZ~|Ax)HcvO z9CXhb%yhnybMIk3v5LqN(HV}UBhoujC1>RhLXx%%z*z{}5 zC%sLNa8}gN63~$$JMnV;jDRq?jzGn3V}_{|rK__?xE(>zc{lF{pT;w=F+sit*Y5s6 zuRB_J+veBS)bRY`@-V{P-v5zBbKXc);VfocKW;F&Z@7%U%4r20$SKWwQ|xB@Y_s^m z&gGG2!NDhsb;yIMoc&SI-|>Oowy-7E%iRU+0@CPQ{my9mkaLA|Kbw3{jmd_r<_evU z-!@YdqJG+*} zf&cKZMD-2D-hQz}3scn)iaRj{Zg%n+h#wS=nkt@mYDhi<_|~<}l8g5}x+?ny@F!q@ zcgLZ{K-Y^w|mRQft?yov+y{6w0 zt8*d7f^4qB~vwmo39M*66 zUISzZp1#K-`R-KLDuTM_b2mp5AHUbVgN?{Ju@20xV-h}SUN;9E{V>kEI7WD&NQf5mp}cKK?W7MO1BLf@c7CIxj+U&r|E9AuBFlbbsQ)}0bh;gqhd z-A0ZPxFOaChx0LR2nMb3@S#}3)u|<$^=z+CP(AF(dsuZkUU@M${oSX)HLM_-goJ@^ zIGjYlPqqg={klTX?T;5ZD?{yQXsH85ukiQm-_z*i>9c-Ev87G3~xq{`@c z9XVbfEeuQ|Ej@%s9U7|8(->W~D@asEH|EIV=^3xIG&eoZA8@1|2}S~Lp?R442mn9{ z$VMzXaOcPxfyYeI7l0Cc_YNFABuDeURJ#$2hp=Vg;gdZ`6iFnBU<>EB#zo+>!}%!> zs46uYB_$<7KV4gil^gi`L+@OR&$1;dI854EW21&4p4dx<_E}?oY3>e_Q-%lbpUOwz zO)c&1&kB7XA3s4uH$2mkitBF=V&RsC^MN_l&G!!`GDl{YQlX=wN2aHbbQOgs6wB%( zqkHW|L!*LGdo}u0Rx*uG456Z-Rp@Wo*zOM<@+@K245sGc*zFG$tKH!Q2M52GWmmiw zz@kZV}`SOynHHiG1dScc{#^`BC>URvgFn1X&Blf8kpsMjvSe} zAV?l?HE-9|ak(>EXQ4uUw{~cRGr)HrOeJ}fb2@}rm2Vr{H7vXG0^O|9jav4tl=D-l zZqH0SqmJf>Lk>qyLx8%ZHw8kyf{amp)b%$3!v^%a(olyQ^cz}LZ;Tb_D{8L4s$ZUg#}DMhv6EL>`@H9?=&3M zWin;JW=VjZAAUi(G;eAdUHJGda1j`4n0>BZ|3a6=v{yXH;F8cFo(GPW&hv8mGrke3 z5h){A&#VDg>)5=p%+%Es@lE|1@)$FxrjYbvx7Jvl=K{3%$yvw z5ucuT>o-I3WOl3zIWVV?<_%NSVYHaisgjrTAY2YiLgIgb|9q1=gWhTG{J{9&pkaUsS&w zLys?brL#Bmr{oKhN=|CoIb370KTm1dWkit4UCOeb?7iFe&Nfc(&Ft>wN@$btZ zdY-q>)EQE4{BkbI>ukFfuTjCplig`yYJX>H>1c3sTfx=D!Q+XG&#!u<wNL>6N3oR7Tt_uzO^gt}N1 zgGS8sgjldK(hvvj;8Scmaf#82xRbc3iN2*TnVT#+n?adks54k${5YMd|3e!&ySir{H-$Xo~6ie;6;<&3G%5yp%{k67B+ z_{cBo`>nY?0?$(aY?J8GRsp|+mX^lLh<3pVFI*ygWQk8nbn#7qP>I5sulf!1%eOvE zlnt}W`nyL5Vsdj$fN6slFg#Vs6dcThG6zY5?V}Qz7NyL6!nfJD5BTqWZuss&()sU6 zKZ=phl0!OVL>ZASDR&lAZeV_3f{mp?fud4Uw^aIIC%1B#SuqrrGbCL!@MQpp5K+mr z*-45{yi7C>%q>hRN=I5F6W%^EoF*%+4HOnuTv8wo>{-B@J|b0b-~)W+&U?=1)*)_= zT=+WtR26AEJvvhV`WV;&V)g;4Ldr+%Z{$hEB}y}_A0G!@!&Q~+*QHpGDco*tMI1#b zuov+O0KEOyYEV_`35z)zRsk84LKsOmPT+)vyf|`q_O)$&&6ErwX6N4dsIl|t=%kcz zG+G(`Ip@<*rh?od2vQk^#E&Jc)BDHCNzMF%lNK9WYPr&(byU`y z&6^GnwV+^4&cj$4E#rDc6Ba9UZ`4XCBwBauJjgW!8CH9C?7mS*2q2G}&uv_>nj=HN zPUb5+gMY#|tbrhUvg(%b1?IPQhoOL$iN7i7w%@Yp_xysUow=vz@#)-94&sg%uu>=x z5m_jZ`}x}RVM?8!uNI|j0wP!l(P^P{ddP;?i)PeJd;U~hpLyn3K&e$G;T{?hSb zYfnZPPt_b$C*7-vj?^e5-dmPdiR>E%mtUQI_!s}or~6M~%)74qh?g%08*|YwOBx>4 z_Q#Je`=b(`j`wzw|77j&id1OJ0E~U%FRcAP7lZwl(fq3l{MXvD*JAKHpcwpXl~+!b zY{ViVY}d&hYSCh{K-8PW*pCHNH9JeoqSTw-%)VftUD@+{dGr@wO6M&iJVzeWXzc@c z37eE-?b>?$>`GBu@@Vz7b0k~qJ*AP_Jm~ek9g+?LFBiWLJ;__d@UyRddSsExL?Jd0 z=Vh2WK{K5WYDVwyuES9m#?n!p5;VxbmGBIK-ZG~_H`bf#a&Tjx@doMnTqPeGYS5Dh zJPq5UhY)g{%g4;B(D2oikLPK{Th_*Tp4JW9DWxi$J|t;U=SCb z-GNYlV`Nr=qt3=4pZP%$-FXkhboRg?_L*L)L(I$fbPoqzBR**rRTwdIVhF#>yuoCh zve@+igs#NM2Q!^Eg|Su3-n?C3d9OXxh=E0AA~(k{&7npx92r6k0>?IV_J~ck(Dt6(VIva8#ZkUJH4wl7Tly z00u7T7Y0tj`&Z!w|91?W?MEAPBLfFI6B|Pthrg=%knev=3R^1D77GH1%?GNm?q(qE zPKRvp@GUXfx)Qqu&6vb0MPHkS%*B=vNS|-;`eu=`Y0pZ?AisH3G28H^3E0Ejd>=;_ z{7UPHmI|9h6EnX`QSYyOyGkTR00e_q?!8-6LTFjR9_f2R9r+zd5*YeO4!lZ|Gja*_ z+B3|dvfF!@IR==@hn5ShPZonT47guYddyxF{z<4bPOpvJyT(M6&J|S#z&1GcOct!xp9D7m?Y=RZ1WK@kMc9!zW-S#TOcialp32v7R zbc<@><8m^)y6Hz9=r5j($0J$YDn9kqR{FZ=zD8=LYnso|11)Nf(+_d#E$ehg?G#-8 ziA1E*=oA;ww88Hv!+P30RQ=STz6OJ6mfZ4)`?IX=?$tH`BxEsL!|(+6INyN=fjWdUBRi!YqNbKGO|bMhJI-{qB2(NRlifR+oOo8{Al3$7@dvKM8CR&2{QMR zebz)zR+Qs)Xohp%ph?-e4jC_F?FJl;N@klF+%Grm_}q~dlls|&EeSWVhW0d3y39mN zZV>Le>i&Tux<=U8wyBlz7Apy((J% zUn|T3>R*7#0cG_&37ie=2GoWax*T^^qHOz*tM7%l8qXF~RrYlylB5C}ANV|<0#H6z z1$kxqW|6VjEXy2m8`whgA!F>mKbIFv1M%J}YqCljs61$X))tdB=X5Ph$4dS}e7Q_0 z?RpI!@X6BOaG<6uVF%7&X%%(_l+r}OB9V}UZWr15 zvp}-C10(OITJ1Od2L8cgI)kTLZe~@XV+n$Yrmv1{=KTV9#vQ4T!ndk!1FqHz{v9!+ z*~J%RF#i5&mxr2;T2yqii-YH@NBiv7u4`(Jm&6oD#S*+4h>~P?ps#in9g|nQ13as_ ze~IaTN`%C}i|JqO`jKoBQTZh zhi-1za$Jj(xqQ6uupzQ>=$_ycNR?J%Au?LrZAf{Uu!(VYwUu6B&xyA36W;h7dbFN* z;bII+B|f8;P;BVEUz5i$rGJj|dD)sM*#B#Y_vFiv890au{fEXTC|WF(JDEMEwt73uFanv*=Lh?|OBX2{cs%|TEFMUf zdU!+C``&C)U8ao_u91tnL4KU^{zq%DHwYzLWl*N0q|Mc5wv9O!i7!k1eYcM(kK?jV zZdqAh2JUl`EA4%k_~gls)<3y)xBMY@WjNJ;wgEh&%YPZqn14vVzm>aw8BeBvNr$!l z?HaG`k3bpal>}o%gjjXEpdQx-aih_MX45CW{!T<@zoW~B!c^s6`|=!x(zZTHbsFWm z4LS_MS?SpYTZI8Di(0#sRqlISvmjz&bcF<7 z9PTAjrygAh=0iq+$mL#BLK;3w^TVdG2BsE~s9=A$2J7M`1kY|f{L$A`gr_QMv;?9g z?QF&6D~MY2ld_BDy|H8Jpm-HqkK|K?#+VOdKL*Q&wC`pyLD|EFK&AaiTHN`qGXoM; zZ281`-Vi68s9b}*2EjxKHqjIy2qJ#b2>%%bB>y!CnCN~V1w+>DuZp=VG&MPuGLbm- zm`eXQue?GGfo4Kf&TC{E+=X*4sO1)%aXE$Tco)=G zPUSWaC^XuLV(>@5>j2sFScW9@=j}OIgCd+-Zssisr%f^$ukB_8Vzg6Z=;s=KEqSRI zcw>QVvj5FSoLmzjuNwt>VZXMDpBWOVu7H*1`=a18o7~$m{c`Cbm6Nvk*!5oMI5IPl zc%L`gSMQpqcTk+-$y~1!R-8iSXbjjpnN&cSoAxl{ec`tGVu1Taf-tBf0CB)n3YVj( z-$M-tHftM(_@<~v$Vj^24vA-P&VSl=F)WAj94_+M!pLm|0V(Zm_Wl#%HvbzbwH;JE z@9Z!h>7G)I;Ue4b+)Cl@NiBgW(EaZ@Q0?Z`5j-ZnfH{FBvJ-mI<4We#Xl1L>LgLeK z4*5g}rwz^z82av{-4JH(Ym$rq@PBkGR(!VLKZSF`4i4{EmGIji{tpa-2Ks;PeSm$< zP+wmHM}n^(zu5@^_4iH)Imv%R{WE990{R(>|94RT-WBmD>A({FZ_M-eS{kUo*V6oq_!>PwuVTRd z1rZYQ|3dsTf}s9hbMiCht7`wVo=^A-W*gFPF#p$T2&li6-+v%Uaxe`5cvff4x_m`>ekC_e%=&zLUXXsZa{&_|v{-w)QH2)R)FTeOJEBYDybyEI$=K0mFNJF_W$lV`0Iu!AOyf$8XO4dp5gV|{{RlTwWa_7 diff --git a/tutorials/2d/img/movement_inputs.png b/tutorials/2d/img/movement_inputs.png deleted file mode 100644 index 6b9255de7fd2d1c0630a1b087f8c3ca4ce54843f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16785 zcmb_@2UHX5+U_6^%v5zT|oI646vjE%E^H- zQUFWhhXqJu^2QTtBRCBhgxNE% zZ3IY0r$H~%SrCUKvfPk~)=6^1>{ z(&OGU&L(mrbJ03kl0#-Tu2*Apb8IXbt{>DClo5Ll1Bm;qm4?w*s-$K6ZJ&Qau?NAT}pbn*Y;S3>&HtC z$CCpBmJgZEFkV)Xdi$vl{vlJW>=PRo;)4jk+lJ@TgEDWFqa@w=kfinWl|Dz*+0dLY zLF(ggC6X)+`I=QW#*@hn#NI41Ey`ou3)eLfDXpe6@kPFd3k}^>#^=L?lm_6fUoENJ z&UJLUAfDUFj5J25kK0dq^b4%dS0qwh?oDdACxlE*tARS~Ed}OED>YEGSkC^);dkLI z&(DESo|D^?>t)W{7<#TQ2ZMOJe#(NlyG=iwJhLY5Wi-6i$3yjw6}8_br!0RblugdG z!UMBHcbh`i4nlkZ(~y{IU7>_M=d8b4^1AYUE<+U)wFaO3{swP-(Ui~f+RfYd+j{S0 z{Ot0qcR$+rHb1g>b9I>kT{qtzG?H=<;A3r#ReaHLO&yQ+-O0Unu)f)>a}_xnHogld z`_LLXZo|Rv5H5A;SyOa;5yA~np1GW+X!RqGeyppTv+0G=;^(muT)knP`}|bx>h)*& zLS*z`Jhr3Ud^YaBNoVcd3l^rg`{28GEi$m^LvT~qEkU;2{?b5q`5q2oukQmQ%z=9= zxjP6G>ayp}*Yd1|y5bw0S)%-~nMkcd_zOnWn0D)+wu8)zuRHzf$je=~>7Q0&>YO-S zyv|VT6e|ISo`?pfY^=ld}B!`+-z4B6T4}d2xP<4D>J<`Pg<^ZUwep| z%wH>Bs^#02kB(2N`1Vw^m@Y@QGE)pucbMefU6i>$>ub5wHodM#!!h|08WXKyt~T3D zp~`j2@zH~>SrH7vY~|P919dll^g0&!h_^(k&U(evd{Xo*9=-+Z4F6Rf;qm_Vx0JV@Y?mDQ zxeekrJ>(v%sR_*W&9u#wD&Hl&YgK1MWa}DSppI{fsJ1MlEv!KOzS00QZS%7if;4s` zG>l#|&Xx|1vmrS6mNsHp#NO`nVHIv9;CtOqUw#rvJ#9wnyrK(46d*$Aueeim1XhS} zVwDi&DlsG;Nlv_EujI2%i9Rhgu#;r4Pz(HYPZE|`$rJLbk^>RSwCkYaSrChybK>R`^j(`zYTm7HvVimiPJ>Z;8H1&Sm=e z&ko;86{7UW=`SS;1xWQer1@ux1utiaeZJQw`W1Qo%I1}6@BD~y>g{>LJ#nFcQm@y~ zpQQ@!gd@*gY`hn5OjOB`E;8wXoxE_(JQ z;3+GLZ5H7BQEc=(C}3_hsRja)zlOuhRzprku8N!yb{4kh|^Ke8nV4E7!D|6 z>I=#^Lg#%#te`fjiM||Pc)G+m5jN+l-Pj(I-$_ zGBP^|&^PLsxKETAhm3oF#_QS&;I3B<*wzyR)kR1qXz$#AIT%&?0o=Qk4BwhqZ`iyD z>vW0nn%%UkQ<6c{9V&lnVx^9r+%?dypl&>pNdGc-m`4wS5+CMN#7<3)_wF}n{_L)I zR@_8j)aPe~UJmRr;i{bqg1xmjD&{{kPZt$q!F`E6eTn`q*@IJKfBw@e)Pmn{8N4NY z#KAI>o;j9|{ty%7+mw@pvU)wV_))t|C3hTv6mA4AQG9>s8FJ~|<4a?HeV1z`DN+wf zCvQokJ?hS52wk+k#669-7!tpKeXmoZNr8WSuO7TkS5AmK|Gh+X$^>bTSdO!+sgt?CHs#edd6|yW24dcJ=x&nEuRg%522D4 z6ZR0M_T%*doNg}e?E+F?N&BhlB&uLUhh z3!^Ss;_6&nmcJWw@T(5>1s`*b4XRD{AuH-v8=~+R&YqQu&f5-F;LUsqyM!GP!5f%Y zF(I}y-6Zx1zH#{M6c>LB0@Bjt3uhwTo%~1iJ)}Bszp$Yqh`R$*?->}-JL)@=%Y?ag z_tuorTfbfffLG$I(@;^7<^sG?GF@~RMv#8i93RZecc38CW%KW6tPG)E$b9TPEs>Oz zG#Q^VH6@VL`07d-aId&b&4(oDQ`=)obA zw@{74UV)p$5kA1cz-wo+q&cD-dLwDtW3EZ5{s4byfU6~T)Z*jj^|u5P(6?A$u)W`x zl(MMXJV2y)%u*tfWtH?D^U{#V8}Wxs9&7WcdL!vOMw(I)hL)j6T0=uj9SU|$ZEYrJ zC@=-%Vwa@Y=8l6@oE6Yz$|dJHr66r;52*$y8~NYfpJThXRF>3G53jLK^c1@9FrkI? zT*S4mJPue0Y=o=Nlie`>xHoHOwZ+U7uKh5E?)pfTL6!YSF5d9yk8=d5K#MWO1L zg0Ga8CCeKvG7~W`i==nf;7qkkPf zqP3(^VmFFhtt@}yuX*hQ!wu}wc2^3jVf*n7(pAxo?!5J2D_=}b?Adpj_jY|Y_p7oB z>w1Fmpu|_c89ntQr}9|dPN)3WXUQKmOg_hNp=o^gHW5Y>&wXOkkiFj~j!i~BH`98y zWzIB=Odq@mzr#F6>cIO%#hdm46`8-Ydz;f)4nJ(=u!~-Gntyf5M4nBjS~D)@dn;oo zttFeM2*nwd>r6=v=9i>ITNb=x@M|T{&0}6>7LN{!FDSwY1uicNDeB0sRTn&d?VAH5#_jnSsUTL} zpVWc4{yg*Q7__}-z3JmIM;?GTGYhJl_OphazXtzX09gq6Q$HFB| ztZs|GkG7v+ynzkZR*7oWKJ4#@CyK34hBiD65VwLDjdW0n9|t(r}>b9YLPyJ8>na~f!uoYqraE7!QDpfIlhQz_ri`?zH6 zv*l^Lb>m=(FX8&Ep^$2An(_O>XJ3#|?m~VD z+kGjk&o9ojng-rHGSKmzU^4z`@z>)3q7 zji^>V1eMFq8aWo8v8smhe5XZEG|dk<9e1MhxeKi=&(WU|tN1)1_vii+>v${U}5vEYihqclf5 z5Zo9=_xv(9#n{{RCr^4aA76gNA}v>VGx1F|lW~~G)AHPGkSoAS$DHR1mUdeBRi;iC zxzN!NfS;i87iYPRS~M4qtk=Aa_2gQrI(o6^8JDThsDpv(ShInYDG-Z7uILqTlAlED2#dZPtQ{>g`3pYFNMnv$i zoq78bqx5tGaa#ZFxu~CWjs9wcyMAP(M`Gn!9B;zOFD|CN{3^Eg z#z|B7+_es-SAo8JrRt4ei!XnC{!mrxbUU1iM9Q#;%=Tg_fj_02_yu`rXwB|TI40^I z{~X6J1yXW+yss|YpYbA+BK;$?O;hR0n2SbLQC{Ku^f%1RFLC$Ma;6R9J2BgbMiVKM zywJ4^HPGhkF_)$+^qX{RoGu6RM(*mevbGN7-L7jRb}Uo!s*MLLdq8B5?@8kUU&Fc) zOH;D-LrggGrcWgDX4fN_AD*km-&;z&oe|9fV|J;{e}y}?&db`B`7+PTcQ#C{lr|1c zx;<@AhudF1${lUym|tNubPN}(cc%cJ;M*C2)3-}y@Bm;MiXnN@$O1E^0@~qppBg3c zfMLtQ6a1-rR{$VP4Dge<4g38I(9RgkO5$hW=>6%~mq@p%q0NRqBoa-|1C3187LcJ2 zaSddks0PnW4lth_?)O>zFyUeV0A3<6^S~6+6;j^Wl=V6QQw}$nz+l<(5)<~_r1dje zhlLU3kFo6!TSewJ^>;$@&nw)5k%5Pq<bnn4}zg}jP?xIoZ;OV88>??_4o zvVZ31YFaMKQujVIwq70U6htL+@9HlOOH0!jm8@Q=yK85II$mAXE6ZABGx4~~|4J5y z*GQpDj2lyRZEl}h*gnk6N=7)b8%G5Bz$S7xt$bv>>KT*3#bP$&7O${GP0>@n>|9N! z-s;)UC%o)|OvGHF57)0N>TOSKA&5W@uo-`}je2h0A(=Fq4ty(R5_b%(? zh{YJY;BMts=P8x>nPO9ZTNC%(*0F9Y+wLG?i-n#h!fgxOcnV{#Bzwx!`7Qz9VXuio zm5~T73#E*~Crg~*?QuJ&Hv-ln1qNfbpq{OB^1i|RQeq^s=dAh7;JO+VwCTVyD>1X(?{#YJ@4D+G{IWGo!=4}6@$^;v(GThAfMbA7FLv@8OnTz$5-}u= z=Q^em6dbRqv$~|Kh={)Jg|3M>ObEtnX?ed?=Y1`GcYzH;vlSGFOfWInx%hecw*1H? z>)1-1A+j|VLdXx&bvj2S)x5N-eN8Vc9U47$nK4&{i6*)1?rrGQT~4v1FSW+1v~|BC zXw;P3y>fwDu z*4`=iNdapwzqHcD{Ck|Gv@bNAP66l#9C^Xh>UNoxL4;u86_@9Dh3 zbz0q9DUl?=o`g^bBk;MPZz`n5bgfsICkYBOBX)jc#X3An>KNWj-X5aCV* ze}UVd0*XI-S>wCUtBlwMp1ltE`4KRu(dR|~6AOMH`s7R?R+!>;C8#L9jC-+~g=jex z8wd%zi|cn*%>t~IcBw*?Mzgx8ZVdJKf$xOaf0IcygV;O|oZPRhU6Z$+TkE^okvw_S zdH|e0L9z_iE7Um|E#jrfVh|y?zq(0*Ibb(VShocZ=s%4 zhWx{{WpKIM_JvTP;F7CRYF1BEPXVO@RenvlQj2i|4K43yvIClYeF_S-7P#-x<2{_o zvdiy3S;63yuHG&`EAI)|$#rv!XY;?>KpTZ4x;HAb^}eM!Y6F1JJMhCvtxdEfRIo`mbiVV8!;w1>;xc@TZsn zMJF;%{O3*eA^4Rtk2O}IX+evi&fEfSm~0oyVm6|ambfQ9heVPzoSBU+ z%%uwp2s1pp{Ifr-dUM|`Bn0HAcqL9s`R(KR3vbA|$hZY__;OJCbIm$^8ZK?13F|A;xM zm47hAZ|*v&jj1=M-#;e-V$PIWB!hJEyQHYVLz08kK?;^62|##i0`0>2GEypVihDE) zRhdYc7NsqtlL92&tVloxBCI*>-EkR~X*9>F!d=a$#Jx4_ysYb60bu$ztey&fD6lex zBx=6>-p>x5n(H9$b$wZbr`Z?~zw!V;7YB^D45C3U)49EkAup@)=~6sg7@zpwxgnsM z0{Pf?0ccEdg-t>BUcbZ#c3xawN=8rx%dTREZX9jO%4LxyPm)%4a`OQI2jdsl`ff(F zTo1=EYPhoZy=l?B+4Q#rPs)%X16!ZrG!lU0yeaC2JAF|Ura~0ghbqTJP?>WJA=`y^ z6qkhfr|83T&+FWFHMhP1-omcsh?v3d+mvHti2SnMohr8|;b>Iq#=cw?AJxgrY_P=- zsN1mGMYHeXs;^wUWNbgo?&Ziye!=?|oEXBU-@WE-M-~*1wkHQQM`vxPsn_l?h2n5%AbpacdCs%=~5y028o2OFkvi(k03O zD0^1wgl90#=uJh+7#e{2zMvBxEAnH8+JLacL50MSo8wD2ZF@VYL_IkB9&zeB0e;3h z6&x!;4I8B>frkLN&;WSV;-uh@e<_L+=(vB!y5poY5TMuqf&QPXzXb*SS{G^Ng97Li zw7oX{p!RKn?fQ}fWkOT|YyGDT&~7u9xW>_H?^*}QPTLU|&?sZTD^fMXVpz5`IS?Y( zkpjX=?#|`&$8m<`lR`Q^>zbC&1M35iq%?{)5MYVz()u83$N#F1;GQ!naAaKbq&CFs zA+!r`y5)An1TY(x3Gg1i*5QeV!*{q~L~Uvx@Fq2xgdBg{C@P#dw#B+Ctf67qzLw8c zGb)aT*0YH9}80%|>%#1Q9~?1aEM+f7S+grmn4vNAg`<8(c7>R|q~KVR4~Hi%}(?*d_;k zLcq<0-Wrh8R^biev$Vl&-iD2*_w&{83b}3J?+i@8et%$v|IGr>rlm>QUV&aThTyci zQzBbKzxtgnIQC@eN|%<4d*P=tjjh7%RHM5u1f$jFBMC7%QGfbx13{L@Vaa!tsj&$AS(ms4;(z*P<`M&*~Q4J zW0$|p3VflCtj!&WDTNw6ra}Y&~p}xB++wl0#B437BJ&(>EBrE z_fT4lo@lCWjM-0gQY4f6rgo~CcHII1v{YJa4bu9~o25Vuf!|1SN%K!g`J)^GpePLK zl4yL23^2^;eEz2*KG`_`rDYp~iY5jcSr;clq9c&oNsqkgra+<#Cgt@ocsWPK96rX47Bh_IKg#wu zRKimLfbVe?;dtps-{4#%c@k9Q^>aLZ0=&mV&^eZ7j}&OcaRn5qSU8@x#n-{c9NG2{ z*tMHLxU4vet`EbPRgAmDDuI{_$Gu%T4z6{>NerhJm%lWD`e$L5&!b1|13!K2Vn=HX z>{zeM+KhlmS}U+l0-R$08)H5zU81iUVz>=ElvzdT4_yal$Pr>V0j~#lVNzxR+grVp z0SWt~7+IG|I_y5*x)9*^O2okYM6J=RTG;4hxuLt-D}=J9iAP%n^oN{a*)28>xM!Fa z{qzX%$ux^~k3|mVUujzqp#&EM;-T9gk)ZYUsSYgGja6t|*c0U4Fyzm0F=*3n30eoi zv*%;GM8Dvv_j z*fN3j={U`O3iu4VR|9h;*rOv`yH!Fq#_ocg``{j-wZK4kNuyvqt?Edn?B(a3=pj}; zHy9gTOKY9AgaTNyo6aPGA9EKi#PU-OXT{G{F``j2Karl z4{!NF1dUD;Q7Iopf+Ved?d$5HtZ`^i!+A z1Ew#S(}uH$j-b?H+*(R(a$C)=RggRcc}a!4Q8h zYkC^Cen*^N;sL~fIJ4JLrU4GbJ;4)%VSy7hK>{|R-Z?X$$ZB&yV?g)zx67OSbRMKy zK23H2SZ(KA-y6lmlPZ}sbiw0=kFN6ipYNC&{-|amUX{HW40WB%)C8r3DayBONxR;o z2a3|SH_EWVfB!NNykD12+6gBkxd;e$(1CeZr-nN0rEVhYCj|aJM8uevFJ{bSNf(St zc0TWa*`XCd2z8tVk3=l9urks7-d?@c8O)SESGE;I<-B{LM!&zmZz3k@wWV&q(_FV% zfkEqUxyQzyH>{|*^iXFUvBLNb)CHBO_WTEHy0K>;&-g%lW}QQoOWsA2=v6n#;A-%U1p8|f`im=Z6zPD{8GkQzouhQxZ)7Ws_y58L(D z{aP6!XBZQK@sol3t)UywAdQXC{CjWb%LARRTcDt^apdNeb-M{9jxp7<#XFjCA*M z?)_0(^D3J=E~RKNk9&8G`5hD0qdYvD?>o+=S7 z?SJ@#o?sro%uwaCKN3-S2^htCl>CGGK98UilYEF>$PeqkwwuepPx+VB&M#HWP?P*g zY~1{1ni4wW!V-63^v!qH9xvuuE4kHS2Eh7}K=YErTS2MCi4xi7gsEY_$r*w>VHrY=@Jb ze7Mk)8UR(axDsS0!}Mw*FS(5(^4AJ)mA9vcl1WaXh)FjoxT6|CL|ES@6ipE}Ks!Bk zexjU{r(thq=Huk+{rBNw*EWnK<(hlDo6E&&zh>Y^g?dN;|uskOAvyFe>`sMXM+Hx>*OspI4)Fihi6zH06AI6Q_a5 zA5Q}dF5t}@7K`b6YD)2q7T?~@zAhg_bM6PI#Uw&w_CMLc-wCN7twBwezfyP2O_JYU@JJ&5 zmeE;yQsA}IZ{j&QJ_`&Kb|-GnE>zaHuWz$e=rBDG=P;?o3uCCnh{9&gm5AA3l39jm zNMETgIR@i;y+qpu0OJ|;+hSFIzlAgh*ZtEAA=79WQ`V+f~VSEU78FKXZTgcO? zOLv)sc^>mrWNn8nh9=j3jj&=CfE=ZBO&zQiwx;iYVQo-3p*jIE@9-Es`owCTc(4Bc z9Pn(WkRN4P?a2uDGW=-lIk+XrihOI6H{c6Np0PS=IVCra=kmjmGkt<~gMoGd!5%{1 zYqhV6KpqUqaXTT636Y1d-3ZS>=B!mH@x0%YWqOst;$_)+_VOp2K~&Za*=Oislz`#Q znlp?{iDJ+hD~ubOS2ZhTv2lWM7sIZc4l*G>%?_$vU)KpvcEWmA!!}?rO13J{b}>|F zEAZl1)2qRsMJhBIo(?Hm@CQiWtQ~0wW!sp+k+Wnfbp-jv5r$7!uvkz_#63XiSEp40!5iTwON;_yzJsIMKI?JzD@II@%OCSq zEeBpdNxV@-MGJ(V_L5s=7wrxQv+%u)BXZiF2h!yoL4m}1uv^gQm8S%In!FTMa5<+o zMC_oMpar?RZ#Jbn&_`@6hmu zw!vVbEZ~O=7h@tr9Wl7zrhN0C8d*gP;f@z1bg0E2iaLThT-s%}2p!G%dW8IzKNWE4 z1v)X_8zC&Hl9^?}Sz5*N*u;8q`Wv`A$bh|ldsNUr!#FS`|$TE}E8VUmkc9ErR8zn|M} zx(x%B^2Omn8Px(3`~mweqctrSE(<@s+SgJf{jj4^{B71I74PY z3V!kz1*6}aqWGQi1fJvZp~ET2+!BI`%jlA?J%3SSp;Znf@xXwno?4UQywOR~)rSfY&R(E=Zv`(RkPo5HOv{#)SDy)f_7G zf^Y>=;uo|v{74`$Mj(0dD^JD?igj>POgg5|`w9H7UBm-X=FQlL^J9xmyegc8Bp zicjBrjQltVl13U|aTB>WU7%ehX~K^)?8yOTLqoy2AxSH7_FLob3k%z~Im5P-kYn7| z{;j|a^?&pouHZ^z6V%h4tuE12$nBB^v|8B?+t?bvB$aY>A3VYSYbj!)i+iBndHg0f zIYLO#cm&zXQUs>D2jo`q-~r{pc*-j5pHa-{<-|0Y@+Jv%1womXhVqhNwXHr(>YVui8d-$eAQ3-nnQqTSe z$=1|-7WZm_h>6#X!x1DjWzu(BjVNDh1@5t_CRVWW*>gi8PcShkNi4{Ogvn5|O6aku zu)=cx84fB29b(13iMp>p)p5m&de*^QRj(ONL(=Zr*iES}PPm#!LnaR1E)$p_>$89u8OrW?M4dlPjzN{H1a zDli^W`bSbU<{$kpozi~_IDJN@x89qT-fJ$1nDjF(_NcL2|24cvXy2c;=!|w|3n&tl zZS!KJyf*~&L9+}Buo&ULOW8jfVSY@ekjczA(1~g0>ViD*d#2)lG{ft24|e(1KM7T_ zq?X3QRn5J4^4+=sfF$fBr1p;#^RB6>-}M6R<_Rxwua{*xI#}KSn=ceen2jm;ch}>7 z0q?i-u1n)Mw^lJ}stK9~ zJ?2jub?H{KYinZVRyyf0e17bS0-6+X+FsDmu8jH(bN_6Peytfwbm+c1e$mF(2?cK{ zUH?@+j9&xo+sFmLa6?nd{##p{`AOgGP!HcdxSS>QP{0?AgQB_gYK@b{g3Kh24%{u9 z?d#4|H~&8R$YzfXyg6%u`wonztDd;*-|GNJI!N+@F&1c{!RGaE3(XfNP$Z|e9Sim{ zc1kgC&b2L!ck3qJJ8|J4Ll2HSaT`!AUR8UJ>F$0Yd?~VeTnskc<&4wNuwSM2X+3GC z5(HqN?9;F(JbXxyKCJ0o^Z&a2Y!{=&&FdPBO%|*2tTA#mi^~xDQlcpU^zfam|f9s%80e;saz#v9PQZlvK*#F%F`(50}r$A0c zz&;#Tva6XC6=*YU>{K;`G{mnkB?#)e4JTC{AFfu>5MH%gBA}IEPSy7@3iQ$->h2(D zLOCJ_Z~-zm-I(|wV9Zy?KTk3V0S6VfN?1{2i$@{}0*NW&RlOhT-+5y*<33jBM|kst zQA$d=tH-YK5i0ee$xKC%Mg!IzO`9AR8KWmGEM9|fXn>T_Mpo;r22;h@qv5uM!kvch zgPszwJMXr}FYdcBcJQr-+_~W_P*=5NGB8jEF9m}#c<^7*wdQffJ;K}&?nB#+qqp;5 zerjiX`kEh08_LG;K4;O;B8QQN|Gx5y!BOnUw&0ky3zA;hR#Yr1ufez8#k4zK$N7ng zkmF(?UUSM6)s#{JwpowFD)h^Xh8Pt|CBb&!s?1ch`bwNv7Bc@(ueE3N>trF7<|~(p zqYYw-Fs6CAtLRXA8jHJfLgOTU$xl%qVzsV_9`@QN2=u>p| zACx2Ree5|O>54pu``FXhwGqE1z^4VD_Q79M1a zrUA*Cu{tr?&{Tzp)(BN)9zN^cdoaf1e4=KRn3zRT4Z`JS-T+M~0iAOBXn&-Q9@aUv zw92B(r0g4WIG^VMZi>vGm?7SwR!?W+N4z8EqHh#4#O*y96QlCVirjo{?7cRhZIPV) zEuv)51C>oeNBXcLuxB~2*fg3a>-zLP7ugTPfy(Dd`2d+Lt2)rGdT(NT7eu$xwyzXT ztCZ_94S?5};yV3OwRyDHIThZL%GH^que5$RXL-k64qW&H4-+Q~eW z=mHthQxj_D==PI;zm3AaB_1m+xDw@^sjetGO#1+Tr_3EtAEsX zFVlHov|7~Kt5Cy^(l*-Q7hmS8(mFj-Q?vy_nFL52Pm*ZTKic_qzv@tZz6JO z^}JyZR_c1;8&&5n1`mvOCm!1`zC?Z!#F6lm75@Tt(tvDlWe6i>rBuf96e!+2mj&n$ zm-H^=2&D5>@6L2=sK)9ty+ky66yb)c%=-7A6#S_3h){*}dX(r??3Lx0Ssb<3)=RVM zP2yhmuxo*la;>@mNU8jfe^E;4m95l9U`S3HLxa9YBfclbYA?Iy6*fD)D3i(+f1Ot!?Y5@u_JoL6~^o zm>o}KxVbGC?Or=5fXdzYNX_jn9^@&}M2gc`xEpc+yyXgbW#T*;z*A%+P$;B3gUhbggU0YB9a?Ws`!&;^o81DWjYZ} zRop>LqN`%<1r;XJJ~BmG^s4?=;YpxakUKU&9Fb!}8PsMdohNu?_@oqOgB219&H?l= z4ZZz#8R57#SiNS@klqusGd-Q!tx3?@I`yTY4j=0|=b6|u7w*y%GUmF8xwa)qJN9zL z!%Ar%?76;w%+8Mkv5(!bqOErsXX52&1ZlavYGdjwt>$a*XGYbCBoA&4DkC$+MPl;u z9U<_0E+eIxVo8Pm1TRTuuQdkXU-^ggfX&6F!K9x?Zi1wuuvR$E12*DI+$DY_YZZso z3{-B8GvRD5T?bM}Uvs7$Pm=b^hW;GT({5b)lTUsJ>*C=2=U?msujg?AXES1oH8FpC zdfUzsv5TRle69WGlidF`w(-Z%&cCxbW5MOX&3?Cwwa&o<2}88UZJs6QA}x=+WRVYo6APVRvK(nTJ%n9 z9-MqCW>{y$SmrLCqjVRQT733U{$C~`SV`Zq7}Q|HriAz>0}^j5t-R&u?1S$jQq$cG zZI{b_-!G{a3t~93_;e8Fy%e^eS&*-{?tz#E4(x*S6pFbjS_p#CdRUUaY4`P2nKo9L z)}-|4+8kFd$KN*?nHu&BY|nv0kp|7{`c635YAPc#9n6Ef6Kmxx_$!(QYLq7@XreQB zYM)43JXi3o${l?H44nx;6gUpQ9slji0_oUqS<(^grC$Ljf)xnL^OnW*Sw zO^i)8=#5SS??2d-=^TG&vIw^I(y5)C@9{q3dH}Wz5ASl;Dy!mV?JoWip19|MJit5u*$k33n< z@5GL?C#y;YUS#{pasMpCCyi!*JoRT~?o*#s+3yi2!~MVJssVt=0A2ZMR4T#s3)~%m Ntd!#O!e@qW{tx00z<&S$ diff --git a/tutorials/2d/img/movement_inputs.webp b/tutorials/2d/img/movement_inputs.webp new file mode 100644 index 0000000000000000000000000000000000000000..76e7a4874c74c98ec3c88b951815a90c6c7862e9 GIT binary patch literal 19798 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 Z>&<_w#J4hkodxQQ70^fiTr;e|e*qf*Y?c53 literal 0 HcmV?d00001