From 1d2ff09f896a196dbc0ce6ed4c4497446339602b Mon Sep 17 00:00:00 2001 From: Nathan Lovato Date: Fri, 6 Nov 2020 19:59:45 -0600 Subject: [PATCH] Rewrite step_by_step/signals.rst Closes #4174 --- .../introduction/key_concepts_overview.rst | 2 +- .../step_by_step/img/signals_01_new_scene.png | Bin 0 -> 4377 bytes .../step_by_step/img/signals_02_2d_scene.png | Bin 0 -> 3897 bytes .../img/signals_03_dragging_scene.png | Bin 0 -> 2272 bytes .../img/signals_04_add_child_node.png | Bin 0 -> 4188 bytes .../img/signals_05_add_button.png | Bin 0 -> 9105 bytes .../img/signals_06_drag_button.png | Bin 0 -> 1367 bytes .../img/signals_07_select_tool.png | Bin 0 -> 1558 bytes .../img/signals_08_toggle_motion_text.png | Bin 0 -> 3822 bytes .../img/signals_09_scene_setup.png | Bin 0 -> 21890 bytes .../step_by_step/img/signals_10_node_dock.png | Bin 0 -> 2256 bytes .../img/signals_11_pressed_signals.png | Bin 0 -> 4061 bytes .../img/signals_12_node_connection.png | Bin 0 -> 7490 bytes .../signals_13_signals_connection_icon.png | Bin 0 -> 3990 bytes .../signals_14_signals_connection_info.png | Bin 0 -> 4041 bytes .../img/signals_15_scene_tree.png | Bin 0 -> 3166 bytes .../img/signals_16_click_script.png | Bin 0 -> 3281 bytes .../img/signals_17_custom_signal.png | Bin 0 -> 4098 bytes .../signals_advanced_connection_window.png | Bin 0 -> 11142 bytes .../step_by_step/scripting_player_input.rst | 2 + getting_started/step_by_step/signals.rst | 445 ++++++++++-------- 21 files changed, 253 insertions(+), 196 deletions(-) create mode 100644 getting_started/step_by_step/img/signals_01_new_scene.png create mode 100644 getting_started/step_by_step/img/signals_02_2d_scene.png create mode 100644 getting_started/step_by_step/img/signals_03_dragging_scene.png create mode 100644 getting_started/step_by_step/img/signals_04_add_child_node.png create mode 100644 getting_started/step_by_step/img/signals_05_add_button.png create mode 100644 getting_started/step_by_step/img/signals_06_drag_button.png create mode 100644 getting_started/step_by_step/img/signals_07_select_tool.png create mode 100644 getting_started/step_by_step/img/signals_08_toggle_motion_text.png create mode 100644 getting_started/step_by_step/img/signals_09_scene_setup.png create mode 100644 getting_started/step_by_step/img/signals_10_node_dock.png create mode 100644 getting_started/step_by_step/img/signals_11_pressed_signals.png create mode 100644 getting_started/step_by_step/img/signals_12_node_connection.png create mode 100644 getting_started/step_by_step/img/signals_13_signals_connection_icon.png create mode 100644 getting_started/step_by_step/img/signals_14_signals_connection_info.png create mode 100644 getting_started/step_by_step/img/signals_15_scene_tree.png create mode 100644 getting_started/step_by_step/img/signals_16_click_script.png create mode 100644 getting_started/step_by_step/img/signals_17_custom_signal.png create mode 100644 getting_started/step_by_step/img/signals_advanced_connection_window.png diff --git a/getting_started/introduction/key_concepts_overview.rst b/getting_started/introduction/key_concepts_overview.rst index c97e8023d..20716f013 100644 --- a/getting_started/introduction/key_concepts_overview.rst +++ b/getting_started/introduction/key_concepts_overview.rst @@ -76,7 +76,7 @@ flexibility in how you structure your scenes. .. image:: img/key_concepts_signals.png .. note:: Signals are Godot's version of the *observer* pattern. You can read - more about the observer pattern here: + more about it here: https://gameprogrammingpatterns.com/observer.html For example, buttons emit a signal when pressed. You can connect to this signal diff --git a/getting_started/step_by_step/img/signals_01_new_scene.png b/getting_started/step_by_step/img/signals_01_new_scene.png new file mode 100644 index 0000000000000000000000000000000000000000..36d6915fbab5bf2f6662fa8b40f1a0e7f32159b3 GIT binary patch literal 4377 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 literal 0 HcmV?d00001 diff --git a/getting_started/step_by_step/img/signals_02_2d_scene.png b/getting_started/step_by_step/img/signals_02_2d_scene.png new file mode 100644 index 0000000000000000000000000000000000000000..ef9c0fc07dd3c5a5c660171f8974f34d6365ad1c GIT binary patch literal 3897 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 Km#BuA`~L&ypC)1e literal 0 HcmV?d00001 diff --git a/getting_started/step_by_step/img/signals_05_add_button.png b/getting_started/step_by_step/img/signals_05_add_button.png new file mode 100644 index 0000000000000000000000000000000000000000..62865c13323f21d655219bb670f05294450c463f GIT binary patch literal 9105 zcmbVy2Uru`vv))VS5$C8K|mmw(3?oF8U%y%DjkFLF4CKA0UI?msRANO@1Y|>Kp}ui z??wa^qzD3`e~a&Xzx)0F-+S-#-1|Jc*)w})=bSxfW_~lXd90&#?c{Nm;|K)eq#E|B z9s+R~LLd$;9Xkx)k&`Faz!$&+YjOvHpal=kL!ZY(cHo=pIvNHl+=6nRz7IqtuHJI+ zB6asVq<)vXqJ2qDThGY)+WT-r39Q({GrJ?|t3bFIGJD;*B0-eRN&rWl75LKWmCa6 zFuO?p@xaKMYfpXth?3QP$QM(YD8rB1Ia^-@`8Jr1SSViX&}WRV^}SAs6o_8dI<=Qq ze5bF85ezxZogZCKXWEeKRm+|EPQrDH<^q|c=rVCTdK%AE>l(ehSKL&z718icMvn9$ zU~`(6FYgDztKZ*0F#)`^;34?&tErLQFkj`F_e|ar%icMSUTaTKj<@|gs*O`-KBDCF zY29vSMtoXiyGq=qCYIcNQ6|v%NMEn7u`Ro5QtU>Iht-Q#iFn%X6un%kJo)UaV`}nN z*%OrlsY8}?6+&S8;8Cg4cV9QNl*hks&Yc-Z(&5Sx*|xT>*I^oaM|}7Y>vs*K2Kw$Q_eOTGT5Ic; zg_XZH%UIUD&!rd3VfZHaewjP^eMg&R6Bpqn!8A%)xAA4iFTGn|xIt6Y&LJ?bvc)L2 zd8e3}p}#_q%uCL^{M5OXn>Al=n@Xn0`_4pZEvvd#z`~QpFuQ)juEFm>eWo!RhcK_- zb=UwYL8m8<5=UIeo7~1H)%4Lk#T-8dTNIL+myd-t;oUC6}ArTCw4RM^*eSXvJSg6x%L!E zM?oztz_yfk^9?zNLB8XijIC0l^AeJ4x!7uLJu`z9_bq6Ab2W)YeY_}~5V2Ps&Cy+^ zHdushSHz7*G0i;?3Hz|+uG+Sb|MgU&4$FHX-f7Wb?mDMlcG+5-OPmtpP>~QdsWwR48}u*PhNz zjzK57&ukf)Uh|k$SN1)RP*#FJQBpX-l4>F z#42byOWz`k&e(VP-`Am0*$wfS{(5E&FSGg0dO<92;32GA(ew!55PZPb|5@|PWSmY- z#!i}fn2HGbG&)tOg8n|g)wjY$-{PJRCIk}pn6?nvMvP-?=7!v4e&KaFcW(P=`gBtw z-Q88s+$C(VBy9UCRu zLiXb8PnpC$a^nREBUNEV5qVvySBbjEJE^Ij}Lja z*1Zint7iA7KKxD1z5Kq&j!A2&UFQ zi>maM&9X5=TTl+phpZXa9{bVvd8toj!4Pk(%44?$x3e6hN$rZ@NY%>$`Da(cQ&iFw zXA_;QM&D!>>ZW)tlqzHVNQ&gFUAF8aNs9Zt8+YpJTFwBy=JeY$If6mH7fz;)4*EFp zf<%2aW@lB?5G_gjyDcWNTdKtI_c`)CC-HC9mYhZwH>Jj z$`P1}a!z|%^(!C$Ipis1=2{n4rMl@o;mL!uxk=3~a{lCi*F+6yms;*gx6vFh-AVt= zlIW1uvEj$@`(blALm~(|>I26QQh{7B3UDD0n*T3J z#$%;B_(dh(43>LZG)*GLGHS--idVgX2>;_iaIVJZP7@iqMJdFF??<6l;$UmnAnMuH z3b+`>jpIpCX`iBf(LPT7WzS~w9kHrLkeqc_Q~N?DI9e~fUp_J$PIMlvuRpO8ysO&H zKd3$M>UrQ1w=T}Dh4VodaJhFK#}%GJsvCho_9rK{!LH7Hyo$9Kf0gW|$RC0pRAXFc zxd}hd%VVXtUzR^y5!u{qM#o9qjFS)v1gvV4!>c0rQnUnObgnlhWFVvnA9Kc&$d(xW zGX?w4+d0nnXAPnOvkXy4ZvY)r^6s+K?eMn>wV~UW{WPxazPf3mx0;D24cpom>@?P} z0Ir6@GBG9BFx8VEN&Q}4-*XcpESXdM-z$=NH_;$b`_3}q@TDs5m+NZOc9ynTCD(`c zk>^z~)fo?)(y~e<&Ig|b?7zNggtg}!p;9A?_NM6)U$(& zA;dnBEAt;1{*C`{5*8H2n^{xO#g70(w21y@)};h{_0iV{qijTf6z-C7jRHr`0f&Gk zB)RX~^-f)))&(Rd*#h-*jw|=#(j$mphPAfrgp-BC1ud;QwNuaVLb>0JC-iOGO$at- z5et4(hk$)8qD(0G-NouJ_tpH#LBhT+AeU#V0m}?KB;oc{-KT=(X{kS+2_6$|Fezq6 z0FwflpKndv4jH1h%lcXA)mMC2N>zKFPrnH3^Id99wSTqkFu0ckHT*t0`?KHCt4}Kh zLb?PKSB%?kW9BX?T7hgPyqx4*G#htH?}wks*dg_dk8^lv{>u+p(W!(oMJFUr;T0Nd zPEN8tI@Np7OdoAtk#Q>y`#R(TE}7PPvfe>zCH*iMa-Arc0JfAtrCvK>7AP-rAv9XL z#h8+dz)}*yj<>TPQG&gUhQy*%B$7L7jM|wWc~Tk0cNDb)L8T!+nn&U)e>C9zn_;(M zr()kA)_H}f_+9OdoMOT}}(#xcm8fnNa8DV_-7+X?t*;{36nNBVVjMm>O0xD?uFJgNJnqqSvL5j*eYCn{zF< z-T39H&MVG8c1q8GefW86rIOrx1WS1hnI=pqJl~t@$?dJFjxAB>FvnbE=eafTkiGtX z!&7wrMw!G+8TrU%BB7X0H7-ZAg;k$%Mp}*U)vf$HfVa|MW@lzZ_@4Appan0s2f)gX zN(GL-j`{qQ@(PO4T|&FqZ6~ydxiFlX8lz?x;^4VV4Bv)`%r&ySv-i(ER~t%xznyEi&l_#L!1C8)j#_t4Tw89s}RmI@_=(m z-S7R7`p}WpnLSGmt*+ANOKmO87A`aQ&%x^#R0@%Wx_dz>w1ElUkd{~Fq831IFk zU6>8I0Pj;H#f-7@y8~;#*qomMre^48tI5{1XvMsZ0^Aw0b>sO=&RAME9RmA)176S= zIP8JvL4OeV{42Sv41%cRR%Z?n1|Ie*3^!LX2hD#a$LRBF0|_%zhq08G&}?t*RPSOD zTbg(8atUPW|I^R;p*sRqzfIDl$=8ig71s*7OjJF7DerL0Gp!PC z5w)unIK(a!ebK*9r4KmoN=|SY$fp4n1ll+?y;nK%! z707q(n)d1FFm7sWpuBdxo)_`8*fU8-Xr$L`LPk~97z)SGgFTK3` zJXGb)M-_3Y=M@xS*Px4l|)|y2WrEfzq#vg?V77oYdM)jY; z8!-qb;2?2nzv_OlO-e>2HcesGh`SJ)OI*x0QgwE8;nhqW%}(LSWIl=tYGPApH5HHe zq>)#T#%cWOw|K7poqMzk>}YMJ1z2rOULSVXce3EZQB;zGp4t8Awz!`3E=+ zGg`3aDy%tMjn?v1W2)+JVwSfmyo{{W9X=z}@h3@sU0a%%H_4S8=QM>I?g!|zAb?^S zTisB{po(%QG2%1X#1fa5yrecMZ||gsqP=3;4iE0)TAwvJDleE+k*ki6wQ_lsKEFL=bMq@53%&K@)xSSA%Kgb~TA%03uQ|Y!E#+z{HzN7VasNdGeofisNT*B1 znLiQrpQ!qes{PTjgZTQNb?)C(@DC~aFbH#*sDvWtuK>339Ej-UE0&4c)j!jcs&ruU z6_~3SAK~jy5b5M$n>l}-CKLuHcLjaB?MU`H!?fHLAjO|4xSx`E-&4k>IW*M6aI5AX zq!he5Su*~5cwukbMv=^ovyb~2pzy6Zl-T)t?S0i-7&tA7cVgDbmZ%`H3=e!s^eVm+ zNh{1)S}H`~W{O^>nPsp8g>j79GYppM)xUxAm&_Ll_alE|P&>bb$W4TfPdux@qzh0^ zst5`UzKo%^13LvL@tX&rOgRnArcMl-dYN-yC@$x)^Q_Yj=k$ zp-}`kX3@50;YU>DMLLGvg9xaxs^*>*fFq_PCX2Aj{c#p|!P4?3c-(j*D|&LfVjZ8tD|c7f2Nl5h+^%`g-5K$j?QT_V~&@Kh(eE4})d z$XM*jjU{9k{X~2TQ`_BB?`U>PT72;(jLizV-$1)fs1Dogv_B%*o%B_Y$Vv`1Db7D`a)V2j_I!--X+GMF{(j^Hm!t{hWTd<> zPGRIlR&m$}rHnR3dt(zlRr?`htE~SWCND1{-b$ayx(N+aG-5?NdFn|X!wu{+dugxv zhpBI^@T@Eog@#2N!o`&-_n>Y96n{rmgX}$R;GWFgWE1BchBK%gXpCkFG8+v53sbt~JMlC_J-SfZF(DG?Lx#FnW zX@*4_yP^x!BIx?lmepw1#mR$(`pm;vdds05spksjdGX{9dR3Xes!h~JS(7Ty&C&pI}1z*9QI=Xd6!A0Ij5&-!tY;7w+a z(+P{|7H6C430u255vvnYcmLcyCAC8D&2-4yxvtj9P~_^8#QfI)`nzQo9jKoL43=+~ zWZ=+uwpxVzBB0oOYW|J1#N^rllbN>vimIK5U8C?VA#nnF`&|va81B<=;(sNBUadgYtf8fOYk3s zuh{Dihoew#FudnXzcz9f?v+;HM&5pS4-z?_^vNk{<4e(wTC`{5r_d%~$MAdiF`#={ER3`O0M_`W-)g93C@+7l&7` zE;t{PCy{mg>jDQw24)=eC+2KOs{6%@Fs}`J9z7T^Zh0_r({#RLTWJYD;P}gs`!Z35 zC|Xg%n6bK&FPwgMPh?AW=X^$SZ!%LL68V+^bW)&Yj$Ex&6e2w7EDkE|5AD7=_3Uw| zk!f!H*}pi73duq2N*&#j<6JmnKf_UJqoG$5TBf;%Iq7FWs(Kxam7S@?ob`Ec5pGtk z@UIx6Ybg_azk+Qo?(-Yh0#TB-NNx=@YAu2~;`ie%sQ@=W5$|F7Ge;e!wJPL9Ec4S6c5@sqxmQeW5CfrQr?GO4;B4{3IMDDDZenTE?erAnlFe z1%?}mIT48R#8yk}F^_VHhPGN@a>S%jn18SkzZMF$$`)1((E^9u5|=g0{3mxM{smsY z9764=TQU4+c(*L2PKh5iIRtXyUP=~L7S;^i6n4eMSCz{`2B97>B!!bZQ9*n@0b5Jx zrePV0bD#1{IG3LJ5=yuXk@SEPKlziJbG&+)mm49sf7{GBCJ$EiY><6Hjz2Nt_GhDp zc^{+Bvqp{~zeOiG-yA;#xJP^V0ecN6@*%t_)r<3;3k3;61)tqjPOYAdJ$RNHu+rMf zxcmEuZM?^}jOToJRe6WfjYyDvmK9|PBVG!~KErc@s+%TYKC;%3SmF4#HqDTae7o_A z-We)z;%AQXnBlcf6kxWkuPFOh%a05wC{0xkkkuXug3 zvqyc5ihZtafbi&huOKVQ_shZfwRrXN-?H5dXGcv68R)kvgC4%*hl-sO99=>{`8+yDsx)sEosmSYDak>SN?jn{U&NJ9q`+F8XJp5Z$&WQJxSK4_Qc8 zo;u8?o=B?MBBKR2Cw31bfQ_!8DiI%!{NYwZVp~-TGzu2zOPP$$ixYy=Q$$aw*Z|rs z5p)sQV@>+RklXIY%DC)W=~vMx!GxQR&Y?doJX|tTKDymHJ8dovE4cu(5FxfY&OQR1@0uxVV0C%=}ii+V|gHzvS-iczIoQ#xZh;KBwMV&EBG|E{9f~*=`Oe+?@WfHIP~bzevep{&T?kg+`r{v&*Qs7S?0%S&TnCf(S%!R|B}s92Nijb0ZnCDy`p00DJP{A zCj+L)mZiw{nxS`AEc3FBY29nJmfa4v(iO4Xhp?1JsM2}fRL=e#$=9 z&FH0>K~$!vU38)ATpRDjtLJ73a`p}1`;FT#?T9|hdoyo&F8PRj1QecPFc~;IcLT*{ zsFMp^s~X6cww#u>GhkIVj};BmlqekkM5&5u=jy9Yy|`b_kj#B3iVv6l?Sh(g7g&{@ z{;T{+Vdr9{YXg=SR%(X{n;tZ2cI37~%X$U19~+Rr@AKg$hXzq*ufH>FQhB^0FXA*w zD<85z;u5o7D&j>mT$r1z+Q&k@Z|_Obuw zzPXqPXTxU!GXj)+W&9e^yk{2uY&1?A8F=eT(eADYEtVn(*4_>dqcyNyzsV$picDGY z#aA|Hjjp>-^Gvx|B%E3MHrDd1*K85Tv@XY9r}L{X?aV@+3F?`eEG9km+;rl|pom#` zoXe|`U^Cc`V@s^KH0|RYFn)aHG%2qhhmV*d1DQ?^cNF@zrN*CGJJzqIS3!O!wo$^6 zR^e9U=YgblSE+M43*74H(cpK0=J^z!fwAn@Y>-BW1$XLF{>Xb7vsaAKmZJ?NG(G0m=p6TDu11|Gg|tS+uC zvY!=vMK{fvA43mh_?Cr)h?$M9sjPoVgP5kB?0Y=;$if@&kEs`5CP}#Q6I|n_TokaY zH%;C!S^rXLl6$dl`JS&%V?x7OV526S79eB=OPCP(H5j>pH96Q!uM+Ly4ermdrL#<_ zjG{B=zFsXd+0p%zPqCp#!5mwCra>>_#7xd?gI_iEdsnJk=aNkJ(;JQL;A&DeXjCOd ztjJWmQ59dtUrxi+H6n{_pjD1%npQCplkL|J3djhoj`k23xxrvWBB2N7=nuEQV(8wg zT%XRVRAo7n&ib@zFqg~*uW9s0f>Dj)DZx{P-iFT=s=t59dH&l+@>^CtZzo-7Y5GcU z-B?Q~WcH~sxx%Mntu(>z1b#c)%Gt_tCTdjPq-j^7Iaw0*?Z2t6|8ElQKQ;RQo3{T| zsQo*K|L+JZKIGe|FOShjD34)-Y~KitMj)uZ9Q+sHz&Oc=mE3>brQhNDFFt18?K(UKI4Sv71u0^4 zt`Zlxjm(wET5ZDtbvpA$&+zM<8H|RD9A+2h`q#ar1Ng4>hpJ9#^uBB9FcBdM;`(Kg zf#}DOy;SMfEnq(FVr!_Why!fe$tx@%5aZ!|wQy7+7m}-cMA-0iNQjJkJQop(_48p6 zD9X@r_4diEqUG;39AiQvW0v>VyKWM2^p74eUvMdX|4wp$zpxVj_CYUOmeE}1YQUR! zt`+6Q)N2|Vi6ZgU=~G?;O|LxDeF9NzJmR?WcPt?fM+0<@|K`Kpy~^+zD%O-{%MkrK zFycK+d2hP7F?QjSCZ!4prn`P$5$zJ`fI$@~$MtMKSn+4DTbfRTwu7Q_fKl|ovH)nL zbG!m;90jxVAz8+Clq|dDbnZA}cJGM)(xP;M`XQm}NBa>%cO$tcfS6_PM=pX(?>AVX zTjl`(Q$y0QA5V~lbw{zsn-?rER;N@A&V7ckua#}wzIrkf6;n_x%+^2Asaep)Z>s_0 zLQ^F+$t7miC!2Vfj^$K)0sEhtNA1WrP;g<<&J16lYMWS~5R>R3pAG+np zwvYLmh&d1RUf8LFu6M37aFO5bGwh9khdIDKGW{p$i!vrT8it(YXf(AV>LuWafqzV_ z|Mm7x(4&yO)nb}su(lloK}>WsJqiVJB9Sn81#>{I+-^h^Y@NDQZV*un|D6V*rlNJV J2y^qn{{dE#&(Z(@ literal 0 HcmV?d00001 diff --git a/getting_started/step_by_step/img/signals_06_drag_button.png b/getting_started/step_by_step/img/signals_06_drag_button.png new file mode 100644 index 0000000000000000000000000000000000000000..aa0e2a2a2d4cdd0c2ac23db381abade0cd60d071 GIT binary patch literal 1367 zcmaJ>dpHvc9G#>)NzEjml}CBhRp`OISH^5;`-l=!2$_afacSPocm6tmoRi{=K`QQq>;wP+iVi5db5iC@ zK?BN4Z+P0`vXta+pge8?01DtAkQsg-yD5FeT)(A3ma#3*WM$gK-Qb6$0RW-?Pc z?^Ca$d$X#q#s^@0T{a&EOs8h&pza=1QiA~i+pjs;*|2w2YqY-N&d|CcC=o=|+I|pd1BCyV z{Fa0W(Yxbtu|mW?a9G^jj(C7M--vBl+1)uUD%UXYiPo{{69 z%B`vHoa8?e*l(SB1z0;H(RzMb+j5E7Ze{9dfNNaK7iI`d-;qhiQFzVbt*w~2-%F10 zJeuAc=AC93j5L$d$+dpnlGQ~E8m0|nS(xyhKX*T3rH-L*=F$~7Uw0%eI^v>1&`D}P zt!l^?L~1TqqeS?7+;Y|bFgXuW&&2UpD1)2gK$)~nZ?jo7iNlElGn)I#hk?w29g}n> z9{y3Mgsl{|Iy=sB=a**2^dfnBg@!RfiGwJ6UL}{^({k_J34-5Q!#WLhMn;A&l<+LM zLAD~HWCq{lS!383>w+@R4JM0eMj0j6Q+pPMHL?-8HGa8PDrhimsRclVIwezQNrK0SZxhj+}4f zjjk9JJyKMps@A4sA5;oa+;P?A(56{jun^aG-6-P2WuB0I9zJX9^|m6Gt^F)4`-blTvyw)|{bmq4 zp6n$cwD;%4JkM_Zg#+y2LL6Wx(YoM3LJb}sIk&S^Ca~(5jy<-xTx}|xaT~4s#W)F9 z%u9~aR!A9VWGqdt7B`dQG*~R5t;+OpPRtm%_>jSwpT+P#c%c3;f;csy47B+cAiw%r zt^)($(=g;`GAk!{ifbySwi_|D1qOo6+LEd=Ws4Y~db`uT&N>W5#J39O9LgGO#>yj1YIowdZq6iO1d$M~a z)1=AxGz(&0J-M)N^o`IJ_;14{`{79&`?Tg0{t5R#1MoBbmGf~j;cFpuZQ6@j=_mpm L5E#2^xKHBWLzk3` literal 0 HcmV?d00001 diff --git a/getting_started/step_by_step/img/signals_07_select_tool.png b/getting_started/step_by_step/img/signals_07_select_tool.png new file mode 100644 index 0000000000000000000000000000000000000000..21af816398e697d33f4dba214295e6f4749943cf GIT binary patch literal 1558 zcmV+x2I={UP)Hr`mF?D%@867A{PGLGi zR>{lIhm4rIyuo^Zi^0Okkd&Wtb9Gr?aA<9NvbDTvoam{nw4I@~FtWt4vDM9WN zktNa4VQ1xlIy52Th0rP?EE+2kAQDh!0BNkOKz*|J)Sf`;J6RCzu-n%N)%)Gyf|f2B zkcmNybr{4jRZ=Mk6O9n{uGC0|t@&6At={buYsY?9_s|%$=b;XvoW^C5DicMB(X=SJ z8EI9dQlFC4-c%Mw=}zg8EA>@zhn8uR6D~5C=7J~g>H%9vwhY>#C8{rOb79l z@)flGuARZVz1M4Y_>s2J+IekIq@glvD+iHb*YM_EZU?7DYjUL?1p=K{AprxncZk6H zXxwIQX2Os6k~wRFOHt#RL`$R{LZ!36MXOxKEhR__HeMHWGNjS;&E(z zkZ3b4e5$yW#EaI+4cb%Eh&TB=G&Dfda7F3PJ8)gIfHG-9%C-fnMg!8jPIk69gJ|#ZVXmY1YVI#_qhC7*P#;5F~)%D$IsKD62 z$0ne&=*VZ$@JeXgZH?|j%W+X)-yR;vSPF!M#CUQa&Wz6_+KlyIKm%JXr}JF_nIq&Q zLl8IHj2VVgF{#IAHMDwbrB0^N(B=IsL8BI5-aknkO}Q;ce;$x`rV+Glq;=gW8Zx2C zDdlF^N7$$dL#qd(qr44Ts|WLFvOF$<22KrG>$g!fX@Drk)Ig4y4lx2w4-kf)o}J#k zWt@C{alEu?=Z4T`?gJy9Ww5ht*n9E24rqGO@m&e(<=A1S?*X{|( zxD80^nfOgWPNSLnkq~@jQ?=aat2;`zP9*13$L2{Rd6x%9`pU4RIQFLzj1jqKHR9$P zNsea5`KyRWKR`p<6G%?m^K9}b$Y&owM|{M@6}YkFuZz8>B#zHDW(cXTH|o(37g{I1 zB1z7FR`1l<0EM&&fDt!a<*EK$_AEKSnpD(n`D5g_IcCdJys%xbVYvvtB z;L|^6dF->?zb>9aJ0d|rUV1w_0;5+y^r42#+(*LmT0jeE-;Ne`kAEK8s$B-Owa|W| z1hjzmf@sk%lopNj`4G=eiii4$zjv-} zh{i_@%07*qo IM6N<$f+kz$kN^Mx literal 0 HcmV?d00001 diff --git a/getting_started/step_by_step/img/signals_08_toggle_motion_text.png b/getting_started/step_by_step/img/signals_08_toggle_motion_text.png new file mode 100644 index 0000000000000000000000000000000000000000..295289b0b29b69312346d36cf0348db62c81df07 GIT binary patch literal 3822 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 literal 0 HcmV?d00001 diff --git a/getting_started/step_by_step/img/signals_10_node_dock.png b/getting_started/step_by_step/img/signals_10_node_dock.png new file mode 100644 index 0000000000000000000000000000000000000000..70df7270ff9b2947d99ecaf5dfe8ea8822b1d12c GIT binary patch literal 2256 zcmYk8cTm&W7RM7o0@AxcXd)~@Ur-PUgyKRF5}F2tr3kDA2)saOF(4uYkSe-{qSQr7 zqzF=^g9N0h6zNL|KR00L1Q$1O~oOb$cgI3maD#4}T++J^YesV{?a&zD0Ruoqup-RP58Djq=W} zk90cy2_-ix_f^bcRXmNdtmg#-fp}HXsGsdgQ){zHnOPblAOHlxH^u{DOQDAlLjk4F zul{&GyNV0`>f6lo5`FkIpw=1w?n1;RxJ4wun-X6y`n*V7X^# z@{m;!{}&vWXvgHShdKyK&k3)YDnWwTgEwBNoN#E1rv}`jPR&JL&=nt@F?@P^RK#yg zfrV-kif9mZo3n(C8!YrM!U?ox@u<0391p>7eyC0=Flk*-CwgKY?=Al2{!smBQ^S1o zZgrGBs;37PhfgiUf7d5rG(=mTC6;)*@^_=GU}<-(mMD?B3f3^o)(X5HL#n+5C!zh? zf24T9?{}ee??FD8nQ0?7KdvFydGhMC+*}Q~g3AX~DM4}860NRxmpHYfQB*5srPzi^ zP{}5z7F#=YY>3>R2IWEKL#NYKWwg;4*k)CMLHLz0?V?d>S}8Z&H0-m7oV04Bi4 z+sU_JWb82NH9Puef&X49fxF0>rd^;@RSXOtJuYPWN5v`2x0`BhMmsH-fxKYL zcJ{EnQ|rEeMVXW!z*L9WAxGAwj_DqnX5tMyLK>~phLWKF9$lIWYfxMOdR1U|{3w<^ z+1O#;`pp1eMG(8|OBjX^DES_UVFA53;lBf@dd19^5&No=7wead!E8RWnQ7dzUAAR{ zd8Q))FWa+YA0m)aUv<8)m9Y=9W#9E+NC*37k6e?woDx&b3L@m$|FQ?Zn=kv(MCL=s zP-zjOr!lpUcjK|~R6tc=AH*p0w5-b)k=`qDvF0|Q#zF^z*V_V=I5e8AB5%rn z2lRMIj{!~_pLBb#-WMd7UOu1QDJBi6l66pz*&(uS-E@8N^1?m0$D0BXBAab*d>{5B zd1kOa+kUK&fKH&g4ykz=Y#h_D*d*!F*GS(e?#oC)~h{4hvBIdfxjDo_ON$dE6zed|(Xd;Nn2R?v{NB+suzMY9q&(U-PlLb)Qv}%`!L+d(+TvTA z!G-z7-ymes#&{Zxgc>yY`@&2DToh62-R$&Ob~}z|BF+}(M${=;Wa-dTW+6sdu&xW~ zt^LdS`)4P??RkjWIOn_U{QYqo@qwabx^J`ik{bORFHrVV|hq&{;gfP*CAuWMTYry`yu{Qb{(736-jlJ7X3aL>awFfEyWc z=S8sxbkgZ=N5-T2Na_#LTtNPcCmj`)MZyj(7YyRfH(Bw23@dnEJ>08==Kz6mmvAdv*1su;`u|fcuvF)~WQHl_T$g zUPBVnTK6PdhWy+3GEya6&oWI4G|6!#JbbbGD7ZN% zFkOTDA@|;GFzgD>aFRCdvFGH~;HJHFSQhi#tOLVX=mg--+i75QYu4&RRr zxk|`dmp*u;QKa+0!(K|Qy!yclDs?LJ_|$Os^hEjoDMWV$*Rd@w9=YQOqR?ZBaSnKQ z!A(*QkWQZ9K7N~jbmg{z5Ik!qP_!^?vzbpbsPJj@#prOTD@CN=%$2raY4xW=7p?tf z%h2Q+$m_%zqeKAp?$6h)o@Iw@PVwt9-wEtCg0rQ-dyB7`d<(S4m z87>;*B0{ZXcl(j|tLt`Te`44$G?!W$%3Pb$!0SZB1$q_94mYs()dd7)s*AsdvYbWp z4S(*EQL1Q%dwMU+07pylkw5FgbZY1tTi-q#LedWp<6@X|iwKJz0U6Fn|@|@%x7UiQUG~2RYi9i`iz#*71FL5^6ZDjH2Hv&SN*`O*+Jjnk5 DTqQ>5 literal 0 HcmV?d00001 diff --git a/getting_started/step_by_step/img/signals_11_pressed_signals.png b/getting_started/step_by_step/img/signals_11_pressed_signals.png new file mode 100644 index 0000000000000000000000000000000000000000..5dfde3ed47ef9307bdb854ec9aeb77c24c71a8c2 GIT binary patch literal 4061 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 RygxT2RVB@*B?=Zn{{h0y`0W4y literal 0 HcmV?d00001 diff --git a/getting_started/step_by_step/img/signals_13_signals_connection_icon.png b/getting_started/step_by_step/img/signals_13_signals_connection_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..926a46b72c84c21ce6f925b529d991d71de4cc55 GIT binary patch literal 3990 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 Wknr>e=kYfjqOESAR(9uZ)c*mD*Sw+t literal 0 HcmV?d00001 diff --git a/getting_started/step_by_step/img/signals_15_scene_tree.png b/getting_started/step_by_step/img/signals_15_scene_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..a635c764609c95222ead60cfff8bb5400c128be3 GIT binary patch literal 3166 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 UN(rvVe*=)YiKTIsk$c?#0D?^nP5=M^ literal 0 HcmV?d00001 diff --git a/getting_started/step_by_step/img/signals_16_click_script.png b/getting_started/step_by_step/img/signals_16_click_script.png new file mode 100644 index 0000000000000000000000000000000000000000..f1929b546817d21b760d64ed0e6e35c4d69922a0 GIT binary patch literal 3281 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 literal 0 HcmV?d00001 diff --git a/getting_started/step_by_step/img/signals_17_custom_signal.png b/getting_started/step_by_step/img/signals_17_custom_signal.png new file mode 100644 index 0000000000000000000000000000000000000000..8e91bcea0d2166c75dc4183473bffc70ed1de269 GIT binary patch literal 4098 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 literal 0 HcmV?d00001 diff --git a/getting_started/step_by_step/img/signals_advanced_connection_window.png b/getting_started/step_by_step/img/signals_advanced_connection_window.png new file mode 100644 index 0000000000000000000000000000000000000000..03a5f19f229012a3f6ec9c093253ad645586ac18 GIT binary patch literal 11142 zcmd6NcT`i|vnV1WAS9>=2qB141Zhf#0AduR_uh;MNbeZBh$5TrLz0!R~q(2E#~ z)X;kiEmR4FUT^UCt+#G@cir{Y`{%B`vu2+;bLPyMJ+o)B_q@~6P@tT zP=}1{JU~W94yHO!!t7?7qDa78OHJ<)H^0mcuDk5)?AO_DLm-fjuD+MAqeNsh1;vzf z44&S9Y+_*M=;;%RuBdNm?Xq$335!h1$t$UEXu;udi78pO$qUNXpAZq=+WYFPBxZTd$%rk9H8*B4Lgy)rI$KW6c3 zhJKIPtW8!a>TDNPns_;Qu!py#@?||fxaGHvm1jTIpr@$SJADPGA_wRxg8u=SdPUXn zKY2cA`V$}7N_{_u2Mrd}grJ#UtgI21(0oPZfbH4-_b7u*`W4yC@#imtZgKD_@cXRt zN%|k@l+i`?P804bYd?c}3l7;QSlMx9Jri!1g)9rb_&9y%Dkj~{$blRHTkVbYQt=*| zhG3NL()M1=V9&p8*7QvMbGAW#jl4VU)U0d4Z8ii=Dx4a`PVkA z2kFddZN8+h2CWQ5g~XE!STt(rQNh53)9rkQH+vlK*PUQ!z?9Q z{Y0YHJ0wzf?pywdYbeNDDh_gg{;XXix_SdhjL>y9RE4*#`~$k zlZ9Cd(0X?pyhK!}px@4(QYFmG?c@0T$)g0kj&M9-G+DV)G&vq6aOBw?Ci3M`^*vj? zaCrJyw4xr!@3@Aa2o#)~Y$rBf0Y^)AFsYq%m_Dv9m=*Pu5{QcqRCJTLSMX9H9Y zz3BYqb!>O9;AuJr4TuJ{ffhUA@G}wb0Ujq$dHE+yrc)OnAj>>`8Bb6Z`aXld4;5&A z3#d|J9s#0)x?^89Bm6QR#yW9=MV+Z|&2bN`mkX?w*CRK=JsgF2&7oLHQBIOWc5%kQu zehv(dxD3b%kbBH`vKL?Lqy`AUi>C>|bF#~j$qfH~19IH~#xSpdJ!$~!cbk~Fz5?eE#uGUsP4(Tq;>M`P|s&vnivQ#+2Fuh#x)|gPl=mobe zpoV`p2Ys%5N@zmDKr-`|e<#d&#WT;27HB!{eQf87y!3EY3{m4YNc$*xws{}G=Z;RGqX@Krd4JsO)Q7GW8tU+o2Q zTaqOQURd-#=-Bn?%lGD$9dC7SMs#tN$!Kmm3Ey0}(w1$%Y$8%Gd{2Gv{hK@GH667J zK4|fdh2I=PGUNCOmPOJm|M5E>c>%iVCL zs=dJy=WOvy;>7YH736_@SH|#E0bMYB@pN!TeM}JFYO5Q~5`jtU{MnKi?OM@YL&a%stc(rnd7G#<4v)d;|TNeit`%&l2sIKU3 zD3ublY3oty`vPPr&=+J`*g$=2o~7R8eh9|4?a~QDhDQ+6{%N(DN1noK$7huib3bu~ zYb~B=d6$NaLkl|YKnDU2oSwTFTGyE&Q<-Fuyo<|h>|y^i8u)nVkf;Gs5ot{jblt*W zw?aDa#aTLL;Xjwt_rJdUL&~T+_l8Gc+meadtUb3ATa?e6-YvSZtC_z+A`LCkA@6LH zgAz?g#N=Jx1d7(P)FwLQ>3=wvD>GYEZtk$8+YoPian6!lzUxa0pMDv&?jce9>O2iF zs3gQ=y(yx-*fNNE>+W_}v0kz-O}BJ3(Ie+etgo1XPGCKMaGEfKf1q4jv9(DM5=)l* z;Z7FvBTV@RyyJXlv`o-#kI5+VBx9OX_NvFrywSfU z8Sq9g(1=$`%K2g(L_KBruFBQeWLd65yMAX$tDVl@w}AXL#ImFL6UZN%kC~Tzz9eWS z6v(@XXv>WWZQE%xLbjDR#z}3&;R$?A?;2un;TnC#^k=)&&`qAbb@K|AMruBulh$3|dx= z&1>3KB5e8mFD5y}PlPFZoWed0Ak{2!9_agkVZaNOyps1X6jxFT+s}h|XX76kPfCFF zjp+?M)`kEXxVOV*S<5$%7)((VgJjJw9DRIX8=_bPk`W<|o-b4Br0Q2v%zJ z`k4%}fX465rJo!kh8w|-@8nsEO=HTu)cyxbpc zAyqbVt9>x*cpH!Vs)_rZApXi(EmZrR`NDNKka@i<_uyYO0X$3FM~7DJ&|)>PrKqhnC#RY^6eESOlrbyHRMiF`EFH@-b|R8zDroo-e_2(85BF zhr(*48D95yzIy-<{1CJZ4hZz#8r@MH$+*it7!~P!{NCdz`%kav4fERcU!@*L(a%(+ zOuwWQm!+rt$Z{L*)Mv9Tb2qcieSf{!O|sN{%6b>fUpaoIOER;~s(ZHCVhMYgHhZe| zmIAnl;Hyc23rrJksD%!>RZx5@Kb-!&%b4}+l2m5wLu1VcF3^up`D&yELvN54Cwj@( z|97yc01685pT=750ge{~bf?(Sw&BF<06Wv7P=AXzU1;4`%PA<@Qj^)%l?v2=V{gL= zbu86u*Z<@=;-Cm3p*Sf1`3(Z}gQRdnf5ahq1eZ!VA{Vu2&S32G!c29Lfl34)K%;{a ziOw9;i zm3%~e2x5|w;zfUXc5o~EQte$^m-s8aym5=^=AXJ;f-&*#k2MnvrDW$X-u&I3;BN&& zXaA@`2F$r$CRW`=4Ia^xzl!A2lsckvV;zsOw2!$&Ay#nrj~czoyu-5*7x%^aFE#@D z3*D{Om1-t}B}D476r+1z1bXC?pJ|}#Up8No63y%D$uf4mYalK3t0ju`0_)#5Ec~OC zKv!>QFnHdSg|xJB>{A2Wa}Da1gGbVIb!q0|id|vvnB@MLbW}RyjCV{|FrlzfPIHar zcjHgJ{Y{ELmv9}}cI6qc_zoOs4XR&M&U!I2!@u7Q;U+&0Jt6rc3Q=v89+TFrvf%ct z^(rXa&Y~$=QPgtlw}^d4D@7Wm-@>e%HrIY<+HskD2kf#*SoTZZzLM0Ch6c08P zpD9^0-YnR)ix$ae{s3Y5`l*+JKkmnu&g*e7_k^d|#|a~A!E;3MvP4j@9)1bK_T$DzAa;n{20t?(>u=xu=6gXuzowI z!!k@0ie3UQ7nW(R7H!;lEK8$udMfgr{iXVY(ag2fGLOL|?G?%gx5}9O#uVp|HxT;q zWtBVmvy<3g^NJ(fIjTWF_go89@w`>Yp2DPj(^cei)?4STU=opoC~j1b)lsqe)m&J9 z*I~m!hzH=iyGzVamP;JK_#{*mxOwH3$ zmfB(Jr_C^R9gU{7%`{-ZCvyGqI&ZankuyR%@qO0_#-PbCoSJULtGTWB_Lx!m9yN5i z!uf9g3gd(CD~y%zfO2S(Pf?uBT~qTxfi1rkMvd}~ITNeZidlr$q}5F|;(hDgiwmkl zUPr443v^`Iwqj@4j>A{S_LaQ`t^PeZuz7M^bf2{aZM$@!-3+b(aOScP!YfQxZbwlr|Kw=!sHk6sRGId(eFmR|Fn4jkkpM**XN zHNr`K?+$Eky-!%K5yKt>4)%WwAgPdVftLVsuXYv=MeMMio&xy7V{@$ed9t*Nv@ZcN zQb$se`ai?p#$-R?WF$^xFbY!ti7`D;q>o#FD0+N!p>6;^?|$lg)a zK(*3OOyo_X70cGd%hje8?%{H%cjulLyAH=59J*8J_8|NuMErT>)Z`Z9;TvEMqluK{ zyL>W1_j|2%lDe#Fqg(u7WzL64oW{L(=-~Na%ThT;B8``r#>M+RpQQaQ;MY*s2~3JF z=gG~ErC$WM`|z=BZEQ@6Q$F0=8uu!3D*GXpU~MS>hVUp3*|p}LP+9(1o&lU!klN?F z+I!I`GQX5V1?xM!WaPG0Me&f9!<8csb+3Q*g5QMuEJCY=PAZeAt@GKJ=V@+-6*a4j zBGYMBP<)kA`4SX`7(ei%Vh$6$KCc{(TE?5yYbd$(dEu5->`K%8VHEW z*QEBAQn{8B0o+`>Cs>cB_^~WP#2d?#Zv+fsDwihw1L!*4`XFZERaEhn+vYM*5_{QI zbh2!I*@8{3YWqjrb?{Yj{j9Ihu~AI!5pk9cj3;xERnunn^7_Q5#R?`~8{ki@JY%bx zP5AUR(l_C}lx6pUdV;%$&tSQk_r!LQbjLD+RcNpkWAEUcm1iS$4>p@27A$xt#t<+7 zS6eeIdX?aDRr8}5#NvS<&(QvD{mKrvbXJjJ6Z^iJpbmf4`2508j09w>~_r z0dTK|>*sO4&-RA>zd7mX8^KmRJVRFx#Mli;`YnWgYRAmBYcC|!uHaZ2O~DwqmS){Q z%>~Ai`)R8WAQN!q{d%G)XLCXUY5IW!KukciFNxMB9PNgJc3bMQodNM%E750nf9R z2=31o(CHhlmFYGe#GVP3*IY46dyTt@8anTh;%zMf!{H2C&4Z)qJ?6wh>Za^XUo7TI zV-+?N+Xw!|++Nks3M~uJQaJoEmOs1ho8Y}I$X!*TvC_xo)xAQyKVE0vl3u@FI1A7Z zDA}a$F74~cGO-8n(R$D`hM1YzmCrgAReQA$V$c=gB4X`%19VLH>NKll!K(BtaxwCn zN9b>}^dvJThmlL%nBnl3&*g~0arj#uue{D(*Q0>FcFB1>yI9DwaUM!O%|S-$P;yfL zcf%tTlx8osarl@ikgFOBoo0%bor4`I66nF_{R)d?Y_A|pSD#LAjM-bI)igeLN;QwO~1a$3R^E}&e>a4 z?vjK4@_>H8hdG-1NYyid&HLn2z||EFc`bW&pY;6JO*Q19zeJ#IM6Q94E$zmIQ18iD z|KaBBtaqil@+80op3N&{CLQ<{!4JSU2Ri3QnKWHrxfF>yl>=PuPBOI?b zIR^Mjq8K*@x*^H>jeP7-P~h~|EJqDKLvH~o%14cq!ajQDSH}Rxrf|spbyPTmg>tihNb>Z(L2-j}rkI_#FgbF-@g@E#xtVo$1?^W|!n*MO^W6MXx zV@aqznDtEZ>RHT3!(Lxp zu=`*$NOUW)f&>G|zI#{@<}E51^KaZ=#jKMtx;C}3k=PA^?x zx@bS~z|?A$dG`umFaFT(wZogVl1PA%4-9oc->lmi&)j~~DIK`dc$E8sTko5QO=W$5 z6x{~B+&ahf-v%ZB+h+dj<&iO%eecpewj(M6L1?F_1rDRwBvC~&#<2vok33Fm6xWcaUH^BF1{D-?3xv!3mz(jjsJZWPP$4xjuouu28VHA8JtyWGgqjY&r{FCPigJ>^`9eu|x1$0y*FF zO|sB;O#7u7L;byRJ^1stjf_CFQ3yb|49>IVNW)IZk2LJb`sMJTKTv9FjOZSXsKav% zz9y!+_uYP=_$k}2)R(1)q{Z`IcH8`o(~~Jzb!EKBMbtx*h#9K#E5oqX6pmRk9Z%J2 zztnCL-8=u`osH845ibG4Doovnac2JrYZiY} zGKlJF++e6pW@G*J#MOBasv)8_I?dt#Jk2J6ab^;xE~ufIJpd1C!5E?*?(uAp-k?iF zxlKH1Yk$;M?EG=#8?*YaT8)V`phxc~eDCN0Vb-Dliww#F0y?$RUL&0b*$NI-}6p%q}S*RcRe`}gG< z;Rm858~LS~qk8UduC!%GN~0*2bzqH{dRg|elzes&^n`U2fo=T-zrjv^W*{>hTJhv0 z18F@=tf-KW%~j0blUPx}IN9rB!9ZV|Ye^4sya~Q{e!rUueC%i=GW!bXFGf-Y{e)L9 z;x)ZBUa9b|W0)|lBpMMfyRnqsu9<$lH0hRiB!tI4p}RJ14tGQIyZQE)cB@C%CiLL) z_G<^;Ta#Szrib!7U7nTt5SoxKuz2vWpo6~sIe* zFi}>dSwGpwETj*fCaL#jK`9f>V{ulOIiIFGe#w)rt3pN7cm3l6)@O+?k6(QH@z}fem^mJ`dI`=-- zr$Sbf_yvePgoEyqH0mD?Xx{+6f1B)c>G&1kTS=fK`JWtTe4MVB=xOZtd;oWkkCfcL z27d!uRz{r%F-CZ6?N4-PPeuXwA)k69u#j60(S)0{kb`k>cajVH2g#nzB+09{{}myk z%xI8Q{qUb8Ux!hgQJmp(NUnW`J8Ne+Em9ac^Zehaf8mjzefN%zKA(Qhh$PUTsK}1{ zN|rvDT02!cq2CWbK*6`7DU|g_lM?bM-^W=58 zeM`nlv-kLRa@z0mbgY$7`h6=-QByaSI=1roY}VQi^EKM<_wpUAV6TBrRBH*>#{2L9 zi^ysdQ8BQDZ1`x`7KI;X&EjAzTmQ;pu#}fO^kkaSN;guaHo`T zT)$n3!;sR~)*qNG0_|kUNoiitow0@juW0M|+F`Th-B0MdChzl;yw-e)PCM081I(4_ zg=(`LFv6aeScLT8P5jRpL_c~$xZ~2h)QN6%?b>j17TSNORsh(LHiNA!7c|!zqqlXd zSmJ6utJ6LnP38=)wP!84=nw)8?VtPYkL(V17~nWy_JXq4J-yucxy}5+FDm;DR1LSy zuv|Npv30wYHn!#xc|CfCRU>(84#7jZ<_m9@3ftuGGOo;&n0tADS}9{Z&Ux}4s2{*M zr28Ntp2pG=k85UdbBV1{9;r)8LC8fPXyyHGezrF();R+fLG*rV@_b@QgEJ4kxIp32MV2~N~5;`(|pJVOnv>}fA1hEe@b>Shdmky5Pe zirLlfP(Ijec06t?KVr-+%`?n-u6Hp(wU&s&o7WDYy)9Z%J!rFBZz$9oT>#AKAhp2h zvSlFJm3JR;%|1yHfS_3O@xAlNNw1QsHQxz%`KWmT0GRJ@M-fE{F|bc7c5j>=*B&a2 zfpbf)Uie|mHe-#$(mTRZ-bXL5p#^7MQF-O|(&0A1*W`F%hxV==sN%iQo^8Vw9KtYA z7Lri@vZWJsabZPuO~fzC&efWy3z$r+N@VnIp6EAGOmQN6g@<_H2Cpq4!TOCqg#NbI2#?=7f2C;iT_6CG^+& zrtly6yiM8w9>bp#9vQdS{a(p0;CNW%c5K(fk0MC%R8CMcXu;?#y#99~`7C7rFTWdk z=^x=q>&{y0Fv5Gb&{}KM*s|5B2Alz!eOwDr~IsT`79R&Rq z`Pz14eUqMyKu-ofN9rW_e}+*?|HAx(oxbRoFtB{=2M$?b)jsFK`BHub!NRa`1c+PNg?`Al-U zua?wIGuNJYX>KLgUlE#mt*@0mR_8@zY}gJ#^TBz)|V*2q&wi@ao$4*{5~(*jW6d0};l z7LkG%_yO-(FPOh1SOnFp_`xE9M;CnukDD3gg!1_bH!0Se=XsghUH&cPX%~4o>d=ZR z4t^LISJpJBS#Hwy!!U7%c|ruXIA>_jo@f)R?kLAXK~b(Icf z3>%(oSz;t3_4YO8R^r$t7gIY&Wl0JzQYQF^VW%2 z6oY~l-vURo+9jcX@xm0}Zlp|faAi(hXlNXLCd-ie+0&DijErXZtQNr0W@9WS0*KH? z_Xu7rs4c_WHDc_To|c(%U78S+Gpm0AZF?I;$0^tbdD>A!i0+P7pKfmf5@nG-u_mAJ zxZXL2djnmCt7C@X&K3L;eT_eNC=IPWQALfOs#4c<>ZSVg4iw)r|Y#-;&i`<+=# z8<;Z&AZb-#N0|y--wG!#+kJ=ywejD%BV!^|QuMAS%a}vL5c%9vR&Bh=$$9eW$dke_ zwSB0fG`QqmyiUR#+F0xqThnCfvE-X&lddY_!#Q++WSwv%&8(#;{=~+*pk@mT z<|fq}ZqT$wR&<1fh4?wrRw4ZF&f(u(!~ZmVDZhxjT0@y8N~nZdOp{Xgzk8A|&;D7R zWzqlf(((^NdwF__I#_VuDjKDfhJYrH0S)Oh!}%)~{>E-0$*! z*wi|%`$IYo@!acholxs~0MOQg@7LgoR2Bybo=81#`VT5KkIAPgHaxk9}gpMd`|#d+p-l%iJ~FfeORZNS~)mdd~HTi z2Ie7o*;U6iHi5Nssj7EAOt5q|H_eoFsX1=Fyx&d9@^=`{a{;V@_R?3yyFM7wA+YwdDrGne zPMiBlzf5*u2fGG2B&`);t0>h8LE7VgW>>uguHK2z75-F7MW$)rd*h zTHLSmtl?!+8SAKRdqDswl4)ebUSvfU(OkQXEt|ETioG88XsUZ&=C@y*trcg*_M6a_ z)$jc+Eyx=6m|J~sJ$Kx0WyiP?g^g5ZGJn-%@p8oP+zD9d<~L#844RDS8pVFD)8*YF zi$p>JZpQ{m)dXP!=gGDB_aAwAPlV4gyZKK%$~S>r16+gf^O&#A2^By2LwlQR>mHf4 z-PR@>ZGQgAO7(-Dm1mpkZ#Ayauaz7OIVfLoH{>+^af<^8Xk+6JGD6++CJG&~4lZl|O2MjHW#r-wqS5 zNeB<^-I0S#-c;W0$WT$chm`BB;oas1Rw7X1*yeyFrOqciVN)fVF>)V{5gJEH3+RkB zyIkG1GO>KQR`XXF4=GMxcdgch1Y3~Ik0^Og*HPQE?_iEMF*H#>X4kqrt99FH{c8Lb z+Y@Z+jXWz=_HVuNvu$oII6=XQrqXJUFuJHnp)P@3^(09ApCKSrRHi8BsnP3|2ArRJ z&MbFW;5_)^7X_l=;zP&|B7;fjdv*8LOT1lcfevkQ;!lInUU6ciUr0dGZ(}otO&a0G zoVuHiA#doC1%Ta(;FuTgW!MFeqZXX(z)immt2l7Ej)Z$t2?OTU)i1WL{AZJZYiSPP2hCMi$V;)R5&3C^EBDe_<8Z4?GXh zZ$>@H_MlQYI~XUC{zuT=3Yoc2`)V4DW$4=06l0^M24SB3@^j`%0=*%fVAGQrx>EHu zMEx@YA*7kF{Kb(ZQ@aR1yGuIFJhc{{7qYx?Mt@S;AZjd;WK9OtPkOSd3rJD`cEV@_ zqi?p^4Y=QRP5hbuBeMe;HN!g#k(9u6(L3XayxZ+MQ7HB5#;1MmjKxON zknm~3h^HeeYOQ$K*`+zE;~tBip>o(y96J`LV_oxuC~BO9Lc12P3vivwHfuCd;gggV zm^=3q7qcXJNaTO8gLkZsxE`||tq{vtwcfxXNxPcpRNCLe`Q0ZA|3$4QCW~_>!fTrF z)3ZTEHvu&ld_8QtSb?VzH7yM0wtdmgDA7l@tlN{>VB?7A3MB`ySt8;?dS!W?2?g{#olwFh@KqU_`BT{2WnE3)%G>CT+a>o}Qqb*U=V zqjg*QD9`^7BWqzV8^{$PTB&7_eZlDhFQx0=yQLYGs0P>$(BwPvIiQd<_eI(oMg^!f zR*_`|mXd9tfOS4IzGzBLok$J>tF_=6-Ag-dPl}AbGkc2m^^>Z-n2$e;&Mq|R#?!z0T(T`;^BFoQBR^$EDy$__ex&iR@WGQ; F{|2%Gq+tL6 literal 0 HcmV?d00001 diff --git a/getting_started/step_by_step/scripting_player_input.rst b/getting_started/step_by_step/scripting_player_input.rst index 955b533da..1fae53f5d 100644 --- a/getting_started/step_by_step/scripting_player_input.rst +++ b/getting_started/step_by_step/scripting_player_input.rst @@ -139,3 +139,5 @@ button presses from the users. There are quite a few more. The ``Input`` singleton allows you to react to the players' input anywhere in your code. In particular, you'll get to use it in the ``_process()`` loop. + +In the next lesson, we'll build upon diff --git a/getting_started/step_by_step/signals.rst b/getting_started/step_by_step/signals.rst index dee86cf7a..ae262bdbc 100644 --- a/getting_started/step_by_step/signals.rst +++ b/getting_started/step_by_step/signals.rst @@ -1,281 +1,336 @@ +.. Intention: give the user a first taste of signals. We should write more + documentation in the scripting/ section. +.. Note: GDScript snippets use one line return instead of two because they're + really short. + .. meta:: :keywords: Signal .. _doc_signals: -Signals -======= +Using Signals +============= -Introduction ------------- +In this lesson, we will look at signals. They are messages that nodes emit when +something specific happens to them, like a button being pressed. Other nodes can +connect to that signal and call a function when the event occurs. -Signals are Godot's version of the *observer* pattern. They allow a node to -send out a message that other nodes can listen for and respond to. For example, -rather than continuously checking a button to see if it's being pressed, the -button can emit a signal when it's pressed. +It is a delegation mechanism built into Godot that allows one game object to +react to a change in another without them referencing one another. Using signals +limits `coupling +`_ and keeps your +code flexible. -.. note:: You can read more about the observer pattern here: https://gameprogrammingpatterns.com/observer.html +For example, you might have a life bar on the screen that represents the +player’s health. When the player takes damage or uses a healing potion, you want +the bar to reflect the change. To do so, in Godot, you would use signals. -Signals are a way to *decouple* your game objects, which leads to better organized -and more manageable code. Instead of forcing game objects to expect other objects -to always be present, they can instead emit signals that all interested objects can -subscribe to and respond to. +.. note:: As mentioned in the introduction, signals are Godot's version of the + observer pattern. You can learn more about it here: + https://gameprogrammingpatterns.com/observer.html -Below you can see some examples of how you can use signals in your own projects. +We will now use a signal to make our Godot icon from last part move and stop +by pressing a button. -Timer example -------------- +.. Example -To see how signals work, let's try using a :ref:`Timer ` node. Create -a new scene with a Node2D and two children: a Timer and a :ref:`Sprite `. -In the Scene dock, rename Node2D to TimerExample. +Scene setup +----------- -For the Sprite's texture, you can use the Godot icon, or any other image you -like. Do so by selecting ``Load`` in the Sprite's Texture attribute drop-down menu. -Attach a script to the root node, but don't add any code to it yet. +Create a new scene by going to the menu Scene -> New Scene. -Your scene tree should look like this: +.. image:: img/signals_01_new_scene.png -.. image:: img/signals_node_setup.png +In the Scene dock, click the 2D Scene button. This will add a Node2D as our +root. -In the Timer node's properties, check the "On" box next to *Autostart*. This will -cause the timer to start automatically when you run the scene. You can leave the -*Wait Time* at 1 second. +.. image:: img/signals_02_2d_scene.png -Next to the "Inspector" tab is a tab labeled "Node". Click on this tab and you'll -see all of the signals that the selected node can emit. In the case of the Timer -node, the one we're concerned with is "timeout". This signal is emitted whenever -the Timer reaches ``0``. -.. image:: img/signals_node_tab_timer.png +In the FileSystem dock, click and drag the ``Sprite.tscn`` file you saved +previously onto the Node2D to instantiate it. -Click on the "timeout()" signal and click "Connect..." at the bottom of the signals -panel. You'll see the following window, where you can define how you want to connect -the signal: +.. image:: img/signals_03_dragging_scene.png -.. image:: img/signals_connect_dialog_timer.png +We want to add another node as a sibling of the Sprite. To do so, right-click on +Node2D and select Add Child Node. -On the left side, you'll see the nodes in your scene and can select the node that -you want to "listen" for the signal. Note that the Timer node is blue, this is a -visual indication that it's the node that is emitting the signal. Select the root -node. +.. image:: img/signals_04_add_child_node.png -If you toggle the Advanced menu, you'll see on the right side that you can bind an arbitrary number of arguments of (possibly) different -types. This can be useful when you have more than one signal connected to the same method, -as each signal propagation will result in different values for those extra call arguments. +Search for the Button node type and add it. -On the bottom of the window is a field labeled "Receiver Method". This is the name -of the function in the target node's script that you want to use. By default, -Godot will create this function using the naming convention ``_on__`` -but you can change it if you wish. +.. image:: img/signals_05_add_button.png -Click "Connect" and you'll see that the function has been created in the script: +The node is small by default. Click and drag on the bottom-right handle of the +Button in the viewport to resize it. + +.. image:: img/signals_06_drag_button.png + +If you don't see the handles, ensure the select tool is active in the toolbar. + +.. image:: img/signals_07_select_tool.png + +Click and drag on the button itself to move it closer to the sprite. + +You can also write a label on the Button by editing its Text property in the +Inspector. + +.. image:: img/signals_08_toggle_motion_text.png + +Your scene tree and viewport should look like this. + +.. image:: img/signals_09_scene_setup.png + +Connecting a signal in the editor +--------------------------------- + +Here, we want to connect the Button's "pressed" signal to our Sprite, and we +want to call a new function that will toggle its motion on and off. We need to +have a script attached to the Sprite node, which we do from the previous lesson. + +You can connect signals in the Node dock. Select the Button node and, on the +right side of the editor, click on the tab named "Node" next to the Inspector. + +.. image:: img/signals_10_node_dock.png + +The dock displays a list of signals available on the selected node. + +.. image:: img/signals_11_pressed_signals.png + +Double-click the "pressed" signal to open the node connection window. + +.. image:: img/signals_12_node_connection.png + +There, you can connect the signal to the Sprite node. The node needs a receiver +method, a function that Godot will call when the Button emits the signal. The +editor generates one for you. By convention, we name these callback methods +"_on_NodeName_signal_name". Here, it'll be "_on_Button_pressed". + +.. note:: + + When connecting signals via the editor's Node dock, you can use two + modes. The simple one only allows you to connect to nodes that have a + script attached to them and creates a new callback function on them. + + .. image:: img/signals_advanced_connection_window.png + + The advanced view lets you connect to any node and any built-in + function, add arguments to the callback, and set options. You can + toggle the mode in the window's bottom-right by clicking the radio + button. + +Click the connect button to complete the signal connection and jump to the +Script workspace. You should see the new method with a connection icon in the +left margin. + +.. image:: img/signals_13_signals_connection_icon.png + +If you click the icon, a window pops up and displays information about the +connection. This feature is only available when connecting nodes in the editor. + +.. image:: img/signals_14_signals_connection_info.png + +Let's replace the line with the ``pass`` keyword with code that'll toggle the +node's motion. + +Our Sprite moves thanks to code in the ``_process()`` function. Godot provides a +method to toggle processing on and off: :ref:`Node.set_process() +`. Another method of the Node class, +``is_processing()``, returns ``true`` if idle processing is active. We can use +the ``not`` keyword to invert the value. .. tabs:: .. code-tab:: gdscript GDScript - extends Node2D + func _on_Button_pressed(): + set_process(not is_processing()) +This function will toggle processing and, in turn, the icon's motion on and off +upon pressing the button. - func _on_Timer_timeout(): - pass # Replace with function body. - - .. code-tab:: csharp - - public class TimerExample : Node2D - { - public void _on_Timer_timeout() - { - // Replace with function body. - } - } - -Now we can replace the placeholder code with whatever code we want to run when -the signal is received. Let's make the Sprite blink: +Before trying the game, we need to simplify our ``_process()`` function to move +the node automatically and not wait for user input. Replace it with the +following code, which we saw two lessons ago: .. tabs:: .. code-tab:: gdscript GDScript - extends Node2D + func _process(delta: float) -> void: + rotation += angular_speed * delta + var velocity = Vector2.UP.rotated(rotation) * speed + position += velocity * delta - - func _on_Timer_timeout(): - # Note: the `$` operator is a shorthand for `get_node()`, - # so `$Sprite` is equivalent to `get_node("Sprite")`. - $Sprite.visible = !$Sprite.visible - - .. code-tab:: csharp - - public class TimerExample : Node2D - { - public void _on_Timer_timeout() - { - var sprite = GetNode("Sprite"); - sprite.Visible = !sprite.Visible; - } - } - -Run the scene and you'll see the Sprite blinking on and off every second. You can -change the Timer's *Wait Time* property to alter this. - -Connecting signals in code -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -You can also make the signal connection in code rather than with the editor. This -is usually necessary when you're instancing nodes via code and so you can't use -the editor to make the connection. - -First, disconnect the signal by selecting the connection in the Timer's "Node" -tab and clicking disconnect. - -.. image:: img/signals_disconnect_timer.png - -To make the connection in code, we can use the ``connect`` function. We'll put it -in ``_ready()`` so that the connection will be made on run. The syntax of the -function is ``.connect(, , )``. -Here is the code for our Timer connection: +Your complete Sprite.gd code should look like the following. .. tabs:: .. code-tab:: gdscript GDScript - extends Node2D + extends Sprite + var speed = 400 + var angular_speed = PI + + func _process(delta: float) -> void: + rotation += angular_speed * delta + var velocity = Vector2.UP.rotated(rotation) * speed + position += velocity * delta + + func _on_Button_pressed(): + set_process(not is_processing()) + +Run the scene now and click the button to see the sprite start and stop. + +Connecting a signal via code +---------------------------- + +You can connect signals via code instead of using the editor. This is necessary +when you create nodes or instantiate scenes inside of a script. + +Let's use a different node here. Godot has a :ref:`Timer ` node +that's useful to implement skill cooldown times, weapon reloading, and more. + +Head back to the 2D workspace. You can either click the "2D" text at the top of +the window or press :kbd:`F2` (:kbd:`Alt + 2` on macOS). + +In the Scene dock, right-click on the Sprite node and add a new node. Search for +Timer and add the corresponding node. Your scene should now look like this. + +.. image:: img/signals_15_scene_tree.png + +Click the script icon next to Sprite to jump back to the scripting workspace. + +.. image:: img/signals_16_click_script.png + +We need to do two operations to connect the nodes via code: + +1. Get a reference to the Timer from the Sprite. +2. Call the Timer's ``connect()`` method. + +.. note:: To connect to a signal via code, you need to call the ``connect()`` + method of the node you want to listen to. In this case, we want to + listen to the Timer's "timeout" signal. + +To get a reference to a node relative to the current one, we use the method +:ref:`Node.get_node() `. We can store the reference +in a variable. + +.. tabs:: + .. code-tab:: gdscript GDScript + + extends Sprite + + #... func _ready(): - $Timer.connect("timeout", self, "_on_Timer_timeout") + var timer = get_node("Timer") +The function ``get_node()`` looks at the Sprite's children and gets nodes by +their name. For example, if you renamed the Timer node to "BlinkingTimer" in the +editor, you would have to change the call to ``get_node("BlinkingTimer")``. + +.. add seealso to a page that explains node features. + +We can now connect the Timer to the Sprite in the ``_ready()`` function. + +.. tabs:: + .. code-tab:: gdscript GDScript + + func _ready(): + var timer = get_node("Timer") + timer.connect("timeout", self, "_on_Timer_timeout") + +The line reads like so: we connect the Timer's "timeout" signal to the node to +which the script is attached (``self``). When the Timer emits "timeout", we want +to call the function "_on_Timer_timeout", that we need to define. Let's add it +at the bottom of our script and use it to toggle our sprite's visibility. + +.. tabs:: + .. code-tab:: gdscript GDScript func _on_Timer_timeout(): - $Sprite.visible = !$Sprite.visible + visible = not visible - .. code-tab:: csharp - - public class TimerExample : Node2D - { - public override void _Ready() - { - GetNode("Timer").Connect("timeout", this, nameof(_on_Timer_timeout)); - } - - public void _on_Timer_timeout() - { - var sprite = GetNode("Sprite"); - sprite.Visible = !sprite.Visible; - } - } +The ``visible`` property is a boolean that controls the visibility of our node. +The line ``visible = not visible`` toggles the value. If ``visible`` is +``true``, it becomes ``false``, and vice-versa. Custom signals -------------- -You can also declare your own custom signals in Godot: - +You can define custom signals in a script. Say, for example, that you want to +show a game over screen when the player's health reaches zero. To do so, you +could define a signal named "died" or "health_depleted" when their health +reaches 0. .. tabs:: .. code-tab:: gdscript GDScript extends Node2D + signal health_depleted - signal my_signal + var health = 10 - .. code-tab:: csharp +.. note:: As signals represent events that just occurred, we generally use an + action verb in the past tense in their names. - public class Main : Node2D - { - [Signal] - public delegate void MySignal(); - } +Your signals work the same way as built-in ones: they appear in the Node tab and +you can connect to them like any other. -Once declared, your custom signals will appear in the Inspector and can be connected -in the same way as a node's built-in signals. +.. image:: img/signals_17_custom_signal.png -To emit a signal via code, use the ``emit_signal`` function: +To emit a signal in your scripts, call ``emit_signal()``. .. tabs:: .. code-tab:: gdscript GDScript - extends Node2D + func take_damage(amount): + health -= amount + if health <= 0: + emit_signal("health_depleted") - - signal my_signal - - - func _ready(): - emit_signal("my_signal") - - .. code-tab:: csharp - - public class Main : Node2D - { - [Signal] - public delegate void MySignal(); - - public override void _Ready() - { - EmitSignal(nameof(MySignal)); - } - } - -A signal can also optionally declare one or more arguments. Specify the -argument names between parentheses: +A signal can optionally declare one or more arguments. Specify the argument +names between parentheses: .. tabs:: .. code-tab:: gdscript GDScript extends Node - - signal my_signal(value, other_value) - - .. code-tab:: csharp - - public class Main : Node - { - [Signal] - public delegate void MySignal(bool value, int other_value); - } + signal health_changed(old_value, new_value) .. note:: - The signal arguments show up in the editor's node dock, and Godot - can use them to generate callback functions for you. However, you can still - emit any number of arguments when you emit signals. So it's up to you to - emit the correct values. + The signal arguments show up in the editor's node dock, and Godot can use + them to generate callback functions for you. However, you can still emit any + number of arguments when you emit signals. So it's up to you to emit the + correct values. -To pass values, add them as the second argument to the ``emit_signal`` function: +To emit values along with the signal, add them as extra arguments to the +``emit_signal()`` function: .. tabs:: .. code-tab:: gdscript GDScript - extends Node + func take_damage(amount): + var old_health = health + health -= amount + emit_signal("health_changed", old_health, health) +Summary +------- - signal my_signal(value, other_value) +Any node in Godot emits signals when something specific happens to them, like a +button being pressed. Other nodes can connect to individual signals and react to +selected events. +Signals have many uses. With them, you can react to a node entering or exiting +the game world, to a collision, to a character entering or leaving an area, to +an element of the interface changing size, and much more. - func _ready(): - emit_signal("my_signal", true, 42) - - .. code-tab:: csharp - - public class Main : Node - { - [Signal] - public delegate void MySignal(bool value, int other_value); - - public override void _Ready() - { - EmitSignal(nameof(MySignal), true, 42); - } - } - -Conclusion ----------- - -Many of Godot's built-in node types provide signals you can use to detect -events. For example, an :ref:`Area2D ` representing a coin emits -a ``body_entered`` signal whenever the player's physics body enters its collision +For example, an :ref:`Area2D ` representing a coin emits a +``body_entered`` signal whenever the player's physics body enters its collision shape, allowing you to know when the player collected it. -In the next section, :ref:`doc_your_first_game`, you'll build a complete game -including several uses of signals to connect different game components. +In the next section, :ref:`doc_your_first_game`, you'll create a complete 2D +game and put everything you learned so far into practice.