From 61f1dbc69b7b29f2c3e06334640cb07bd34e2e7e Mon Sep 17 00:00:00 2001 From: Florian Rival Date: Thu, 4 Sep 2025 00:50:27 +0200 Subject: [PATCH 1/5] Rework 'Parse JSON from API' example --- .../assets/Orange Bubble Button_Hovered.png | Bin 0 -> 9194 bytes .../assets/Orange Bubble Button_Idle.png | Bin 0 -> 9160 bytes .../assets/Orange Bubble Button_Pressed.png | Bin 0 -> 9109 bytes .../assets/Poppins-Medium.ttf | Bin 0 -> 156520 bytes .../parse-json-from-api.json | 4308 +++++++++++++++-- 5 files changed, 4006 insertions(+), 302 deletions(-) create mode 100644 examples/parse-json-from-api/assets/Orange Bubble Button_Hovered.png create mode 100644 examples/parse-json-from-api/assets/Orange Bubble Button_Idle.png create mode 100644 examples/parse-json-from-api/assets/Orange Bubble Button_Pressed.png create mode 100644 examples/parse-json-from-api/assets/Poppins-Medium.ttf diff --git a/examples/parse-json-from-api/assets/Orange Bubble Button_Hovered.png b/examples/parse-json-from-api/assets/Orange Bubble Button_Hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e5f89f649931bf049bfb3a809ef183b1ef30ed GIT binary patch literal 9194 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 S;ufX=0000C6xAV z9>O0H=`OvvwcsL99VHt3A2)qn1d>6Lc%XoNr748w-69=H*UcV3w{!+NQ0Qcbp z0ACNEf5pcRUxyQh6LkQ(cI{#aYcGY7eh%)#$pgaGFjc&ak3Dt?P6$rK0j3eZ8D8r# zJl%c^;CEMmZvJ$>9zS>93)gSL2MO@tDS-Xc00&P3o_RWaJ_&gGX@Ccx>}Y&)j&N5F z5a#%Eu%p+OLOop%27mhp!BKwrfiv`K2oA70`z+u`o&!8Qzl41WwwsslCPz571JFCy zzY>y^uU8YhFsg@Ne|!3j*Z1KVFgn90zBD;RBQo3w)_C!_(O|U$%$Yred4Bk+i*VoY zCl6t&*gW|hY(Dlv-4O_0!N(tc5mv$~2be&52Z+Z1zMJUXdJA^{^NoP>MjtJDD0~hAxl`fpAbhsrelH4yfrS;0M5&Kq zyF=_6b1fMhRNsXUmj_%KJU|CS@@6+4mO)x;r@2`{2sa>IKtj%{@ITPV}iKZ ze6H6Cx*VWo{N7PN8hzM3628xb502g%H8iUU!#xqP@>r+vY!5Ioh%^M(gjBvL831N} zuJKE=$pMlWq?`<;n6ntt=}I3IuOv%uI9?8bo15YDZWzc5&aiiSjt1kjpkaj*EIL5b z`2YJaF#PJC)v+ol7ArQSEaZ2#y-{|IpNXO%{KaCGz+;rl^2rhZ(g1?r}e)V)8;Hz$EA&ECGP zq3yNH_rVeN_I?vC?)dm&BWe5DZ`q24)j`z(rfpro*K~PnU*G9Y4sG& zr&DtR0L!l>!Cc6W(wpIKpGTO-5S{_`Ikf@9bZj&<~*74vP003Kwg*P|l-&)ZIAY44x|P~rAZLlP6kh{Ws! zOJZ<&u_|}uxDYis?q)AUcPA&n!)Iap*RSd(SMkwDKhBFp1eiv@GX9kCxyFAa82=H_ zqmRV>BzawDa_p=#e&@?4Onel@k-| zr@kiPV36qp(@$~wGGKN`XC|9yaCc~xjk5y;&v+j6=pPdbXY?Q4c^p!fGIufwBu8XX zgdPn8!m1 zNw}1rkN1>D4wTVDDJ1hU0LYVvVE$T?!O|Cg z@AY*M_(VhQUzUYRM9B4-E(rdq4dp(jHqogvKgj(VcKcx&{;;*zubjv7xP2*GePTJT z`+=Sp4R5^RKHwRSPDi`RId~EV`P?;+GK$9JnSCB1G!%s=kI(ZTWP_%T3qFvNuR+x3 zks8Z&o{;WSXrJW*&=CUw*j&xqmX(BbwzBHT5s`|M&G-XL{&+N?GODA|rxg=2)GSky zJJB!q!O5!VA0jWKdHf4ChGAKE#**c>y+E(Pm799Z77b4kj8S`bkEJH1ysnCx&!#GGa zgeYLnY9LNFkEx?P)Jeawb3cuTH)x*w+dyu=7J)kJdT43rS@f>~>L_gS?3U#iiVRU; zv=wgNm&I@YaM~MSCDRk$O_&SD3%Tuk!=CJ+-2wPs|7Y+aTHof+k!So2ldU8S*M6Xj z&W^9@g=e?J1>kG1G4#6|KMz0-U!Eg+8{4KQe20_T(I7=SOm`k=i3fw5e0RW%ju0+m3kNLnR zK^-tNmJOi|YmU|E5y9JeBznjinho6J@SqAFHDpQOi@Iy$(Xbct0Cjle-C*0NI1-%; zSaenp@lN^-OAbIvDki7*;3F$Wl{cTS!rg%vQfmfUO?!nSyZG$BmyE%a9i(Avo7{d& z%kj);*|QSKzPd%!JJFHTw$V;2B3}DX%N8cSrG$W5IL84-iwOE?Cs{PUa)vy;b%eZAw|w4!s}FdBbw+xbpI3%r&hlovC-jIM{CrU?xhYlf~l_|U1w zdejxw9FA`4l5^$}lIJBfw9@E!oxD~)FbA`8$k!1Uq7$St(T?%sPJyJvK&LI|sqvXX zL=>t`NvLo=XKKtZt>7i(RXR>`b36kiX(U|{TGU%!1n2^#AQ7U{0f(WW@cLFb%eaFr z&!JKv0wbyn%)+a1!o=TGCR*MZSY4taXmeSN@QRMp|9tj~Pb0j(HdQ#zo>?a+sOZ~) zP6x;wKq?I*-vP=omO&aLE@)88xoWgFnmRrU6bW6x>R#yUdQFu&OfO3*x;=P8BDsHOR3lXYaM_K17POEjAlo- ze3c5oHv}jn4T`Vl2%vbOk(Kmlsz#a8UY@e zs63ttbiIeq9n|~wXtnAze>dSObX=5H8d9M(AMoH66}|wfpY`x;X*OuXvWz{jE&|Bu z#^!h}r`Bc6r}BygRXJ7Y^bYjeRPVK`^?}o2Ji7L&$SH3aX3b_|6IRe!u?iq&E#;|e z1Xtc!T_N7BGODAXQqkfkq7TCAE$kD1%@|j_53vMY4ltik#W;dwQd87v1xmlkK|H=D zKZ?mr;Q@kXDJMop^5HL~f!m&K7UDNFGpqlVE25|9xa}xn>PQ_Xjjyly z313!67LO~8o0Xs_lqzyo`%NTAZIqdGLoq$^mp)9j;YnmAkh)7Jo^^I;`$yKlZBEiMNjbf5F-pG*(79GT%Ss=dL1p6A*;+IGTl2X7)pX7 zV;JwXobEDC_yRGS;OfbROvCAT1=cMCN6_z3bLNZ1Is@c1Qz+vE%Cx~lo_RW%5g5_@ zTQPc#mv9sf-Y=76q4X-^v;oA!F96kX#hW}?3Lg@E)HJ+y+#9(p&;^}IAXJ3WVj)n| zS1WZC6E3n8%S$4bjx-?|nz~#{SHlOVkF|U4B-*&F&V*)17sUHj*Yo^R45}%o(VqsK z%x}3w_IbaZ%hha9K2$DZJtIPXTVZ4G+QX-Y9GaKchbkW~tLh7{YuLmP>0}O_8M9W}H$lem8-U6FL*lz;&kRu|D@e=PIE5D@I1)49UpFMWp){1EatL zAcLEXqov^5DZG)%LsjXE4B*HZ9i%cZmv5@dBg-{l6DOMyB_6qRf0CBKT}`C=&M9DZ z1aJ%VU?5puv{Otnk0XB%>P2HT#LOr&V% z(66Vqj10a7jQ7bZEx)GcCBg|uOfg=08#?y^ilT^*V&Jne3;&c#YEqC=QMuz=uz5=~ zM-AzSGY+2)%0z%}3?Yy|ek)?krI`oN#o{{6Rkm-U6)3sFj?{uJZKFKTBOfipQ_x!t>Z}@Rk>O{ zdOu91uWQmS!Cfo^Nqu6eyEX&Rqt3&ty+9%zrN*C{JnRoowP@)&echr{`_?klT|mk% z`_F&y!l&2jr-jZ4z~*%a_}q+fM~#QOj2DOVOs^~x@J-* z>N9ry)>Ht@{=T6t`OG;7@uCv;biiQFVE8&COS@<>j+I=KCRroPYI2xmQk_PUPeuY# ze6$p6&A;MlApg{qOi`$IaP!;QassIu0ICsTa;@j#Q}XU~pq;*(@<8qdbsDGU8q}m; zuU~@o4}+itF2QEHWqChF@yT%l{`{KnA@FrKAL(hD$PbJnC6voEoBxBzphya<$`ZOv zvOqa>dAe5~US)kCi4Ku^l0~}HK;T6jVrK(@O>-tXaD4$kN6>5jRY$_S(8z$~MNeeOOodM|3VAuICx#?lh|}bh zxMcFry3P27o0P9K)8#U37oL)rl_>R_oM0q#dw!@CymHkCk^ZSRsxy_g8qbGS4};{x z63ZahEB?YM`G8P{FcecFsFK4RYk@gdV-3&gWmEzkxNJXo9ph_E;Lx#$mXx#QfJdMQ zxlCdu9scIL8HYk&&;{K)fm03}=V$)ZihwQHX#VK>jFk+uC>(PnAeoG%POAuK{n1%^ zMcMK?onjf6G4UV(os1PM<$Oepqun!*GAUW0=v2@}CL?d3S(2hk+=GBRJz(|IKp|x5 z4f~(DpZrpaTbRpK9hYFfah6YlmgMP|k!j0wf}Zygys6D=Q`*jLaRxwTYB$)L)LthIho&dUrg zrqL>A5Y+7}v_U(Lsx3m3$z3HMsV}bNfw{vHtU45`r#c?afMwJoX(d+1?m^shV55tj zzAZGp$lxg)foIM+H6#$Sdc7q;&}*?gtC5Tna`Q=>qPVk6PBH(VCCohdyZ@yvG1(Bn z;pgdP8CJa;s7xtf9<59?^7?Q!k9b}p$AO508q;+!?r8NvVWBe#EQ%#%w2YCH7&Pq?CN`B-lA>AyqsLD% zCV?Jz_KBZ7WTM+FK|Q28g8}3$jONP9R;R0Vs_9C7CY|(70jtgfcwUSZ9Pbbbtq{z1 zS|@S7;u8kc^>4yUziLAC0o3&F*hQ z<({W5Iyw}Oo>xFagC23_Ow96US~3Fh5y3}Gi++)obX)SHj&4~8?TCyUS-r?>GA*TR z4^oF6(3Jzo9lOGqiw11IO$Rn|Va}!W0~TkFi&=L0n|$f5U9_z8b;L_Wq-E37Q6QV(+6h0%u6d>Gz3I`&D&U9{^oKD#q#|HE~7F6C^{b0 z95@vq=Eu)m1~G=XV~JEG%{4I zE1fSJv&i0{&_0-U_S6Hf(za;X8w?F$n)UV!<9sdeBj3zlCACX@6m&TN=Fyz)8BdU- zwW*Mb5zuCm9Wo`}>pHv!UH3&tr8+%ZD5IBO=gLqiCp{RC3EhW6;}zIZZE@3*i_}w+ zv~s7~VGjUysFa1fJPqhgA`tZLlu`-dX(8!E5B_v9rUzMi-WJr{FTcUu6OWEgpX|@p zL|uUo_5iFW%Q77Eha#CEa|WdzPWZSMdgjnL&jTn0k)u4Xt&mjUd46njY>Q#9se(-l z*UmEq^F2$gH+ZZgX-DmYyM8^K%=|Q$7Vt)@oZmXRpZeWzfkl?R&58o*DPx#wXuS_m0#cOwD;V# zmgp?IxrFYm;CZz{DqBs}6cbRVo=>R2J3{P>#7B(hNHa2kvMI&uK!$gaHW<(_(caDrp}P$U=50;1kfVU4tcYzn}5 zsbrJXEXU_SQf`A>!CD!dCINeCFt#nU6CeMF8Hrs*I+>Sp0&xydk?{T~gisw?eP|x; z&%*V2K<7Sy`WB!veR32|4tiEJEijc?H|BOwHk!0D*x0Rx{j!c!vf5Fak6FcXciAfX zUDnG<-m;7)*(WpN6>GAWmVj!GclgL4Z9XW!JUo(AMFxFsanSGswPjtC zOVUZ@sjb~s_6I>%--%4Q-d49pB~zdNH2vap2nDN_fn1@;1o5-}dfsZ6hF(}eXe-g9 zONz3kr?+>(m7AEHr97>@<-;Zv{K4&`uJ`InxqR@ZjVkMGUuKzlBf*LTA##CHyY`;R z&-1j%AOWjN;D#)#T0YmK>p(LPa-GS8n&Z_*p2S7ayg8oAO9UWTzUbVyMzX}Sk(oNC zsToe}cLJF>>@JGqge7u~sq2f=xyPUd@0!AT9l~kpDzTWJ^YEjfOSPkH$?*D~=UnUh zx#~!me_cidiF>NxYSrmKC}r`m+TL@D^@i?=239`JzeU&9VuMzTB2?P7^Rqhi9}7>* zFaBx@q-!vbE2lg08Vd`3i56#|%J{F2m~M%6ZxW8zrz)zHLs?_v9EJ2eJMU*8$mhu9 zL~W%LzCTeq%le6t498=A(0T?G?d0r|TjBBPb>odgDd+g-Zw42-z|D?pUOc9%JSN^AWLBMIfUq7TxMU zn~Ewrkz*iq#D~IH)ak&&b<(GI1*F=sesV+47mf_XoL{zE0^EQ> z@V&l9o2Z3r6&)o|_bomiJ?X68dA$<)y^(FdYiA98N31xf+a63C_vo39?g%$FVZOW~ z3Y{>q-Rnseq{8jmp9GeKWhc<|^)HTFI=u$3@$7I`cAE}(EWHziRcG;9c`}iTh<-o! zPFX5==4nL|g98BlQXrjv+BDqm$It~W=u`Od&C(hLe;V+1LzmtO>XCX0hZdd;j-Tzm zGibE~0R4D$01*N3@LAJt^d|n|1sBuL+*@JHdrPNxdTB)zhZp&6O1sJ^cXI>>&(N(+ z2jtXgS;;R?*QDRh(y~I?j6**HY)*etixzT#?bb{I-b!HqfUPyN9C53bw9+FUMX{*h z&*)U{f!7g;vmB6^!lRY2PLnE zpZ7hWJS5_OQ3Wmj{(&?4AAHJA@3gtR!NbGR0dDYeeB$p+`%@2Y!QEsKielx?feTEV zH>_`huYSn^(%gz57RD*giCm4?dLMm9M2BhONAfm*XV$tuksr&*acTFBi6?0B)sk88 zsDYIu0w2bmG1^LTQHmH6vK?3+O-Kvptj5q2aA!Ys|zg)lqnqDguOnj(!68 zk>@n+{}{hE@#eb%dCUWx{eTA^-Y|yjL$%@K^p9p_{T#P0T5mvzh;Z>Z7%6Hn~%O= z=sfVyUWfvPLirZ%2%ZtE9Z?Qbt_yv;aZ>Q)`Wzhknh!Wj)U-iU8@>ooUAuGoI(Y!7 zA07eFzmsTX_w=Y~6`3|$@WcNnE}F6sDlSiTQ`5u4kOSal(dc6@m?$tB|6uYk+fjQh zg=VS*5pI;3|+sFX|Fvxy1bYh)dF9pgEP*<-M!Oc{#Prz z5b=Y}ua1``U8LR1rlA)F9^P~2m^Fs4Bw^;By6W#niS9$8g*GRHb2s4AAGdzp(f`zQ zHv31olQ($ZK43##zod*QV3f807);IS6D$Zxu;4R)g z;T)i@r&b><|IrqwA3bHt$GLy9p+JVK_}F8wr(3yTB(hQ96JIiPM{he2$ws3i#OjG{ zmFBrG;qiNqF66d$^9Ni!qr|iq?G++&RaFLej_@D zXesF!?N^W!_|td1F*Gy}tUFXf7n?v!&fv6-4tH>7-=F)#=->OBf75NR;-im#oEOV_VQTML#_s_uIXI^#Mst6C>fsip5P%DBljCfPQ2xC5Q>cOR> zh0gruItDMF@rX3;0L4*gK8%45KfcsM0Ds=)m*lJhsGuR#m!o1Ndj=h3e>mOLhA(E6 zT%PQs@kiZzu=)5!@2T#kF!x_FxGse)j@B02!{ds;Boq-wLB>!7;3!apH*fgq&ZRJ` zhd!?d5IF;9(=-sH50ada5%rpVb||@KXCD)#H2qp+Q8`GCVk$bQN8bl$PSuSc2C9?z z-GJ@pWf$KooYsg4HeCGWm*-`L17j$9@I$Ad{{CPsp7C#nOKN1~I;ylMP)B9}sv9<} zy%=TOxjbhDsLXRj%>yySBuHPMS{-LIiB>4kRJuDuda zzM{)_Kl&%2n?H5i3_F7NuKgi=4~&KC*;0~JO^A4TXVTP7yQdA03diMtJlK0+8%F&p z|ESjpXFdsgpZ%6oL9d3;|5d0!+X1d$KMMnWKN!nAN*aFh4H(}1UbXG}zu&>_o9{I+nOdN`KeX!r+C2g8Sz zR%>-Kwu;c{QBFo6Wn>PN#p1bJ9z)r5!|`81NTqBh;OCT zT*exBQ%KD=YV9oW#eB`mQc~7*HZ31nK_)tFhcAC@Ycn0@7&H7aAyv5bW*4o|8FqJQ`W~HOj1I%mU~>aKn9b{1s1m=iu99D=X_(G#WcxPIE3aSrgVG5(Cc0%j+m z?|3=E2xCq#{QOe4Bix6T&>Hn4ggHML{|mjwpPL*5YO8|@LNu7Bg*X2_Oba*RKAZrI zhX3f_&rfHa9oZS^)$ok}>+_@iemHi@9h~4|X#UM`dDcZ39pT0s_anmHK#$?aO`c(R zIqcxR0>^;6T60ZP!kyjMVS`_6<6QyzO_&~TT)FQI3oyQ!HJ-^F59XRAHv+zjqt!V{8w?9~pF};E}j_QN?7(RxL9Qg2g z_ej2N91^|o&~AQibC+_!3BoEzxDV@LG<hw)v{XPu849{lA?<@Gk6Y_PvdkFsz;XBCL T?oWzT00000NkvXXu0mjfzf_^d literal 0 HcmV?d00001 diff --git a/examples/parse-json-from-api/assets/Poppins-Medium.ttf b/examples/parse-json-from-api/assets/Poppins-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6bcdcc27f22e001e46defdfd9e23f224ff65dd67 GIT binary patch literal 156520 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 {", + " return response.text();", + "}).then((result) => {", + " // The result can be converted from a JSON string (result) into a variable", + " // with `fromJSON`, which is a method available on variables:", + " runtimeScene.getVariables().get(\"Person\").fromJSON(result);", + "}).catch((error) => {", + " runtimeScene.getVariables().get(\"Error\").setString(error.message);", + "}).then(() => {", + " runtimeScene.getObjects(\"LoadingText\")[0].hide();", + "});" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] } ], - "effects": [] - } - ], - "behaviorsSharedData": [] - } - ], - "externalEvents": [ - { - "associatedLayout": "NewScene", - "lastChangeTimeStamp": 0, - "name": "parse_json", - "events": [ + "variables": [ + { + "name": "num", + "type": "number", + "value": 0 + } + ] + }, { - "disabled": false, - "folded": false, "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, @@ -438,45 +730,53 @@ "textG": 0, "textR": 0 }, - "comment": "Generate a random number", - "comment2": "" + "comment": "Third version: this is the same as the first one, but the variable, request and JSON conversion was moved into a custom action inside an action.\nThis is useful to keep your events sheet very clean." }, { - "disabled": false, - "folded": false, "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + }, + "parameters": [ + "RequestWithCustomAction", + "" + ] + } + ], "actions": [ { "type": { - "inverted": false, - "value": "ModVarScene" + "value": "Montre" }, "parameters": [ - "prev_num", - "=", - "Variable(num)" - ], - "subInstructions": [] + "LoadingText", + "" + ] }, { "type": { - "inverted": false, - "value": "ModVarScene" + "value": "MyExtensionForRequests::GetRandomPerson" }, "parameters": [ - "num", - "=", - "Random(61)" - ], - "subInstructions": [] + "", + "Person", + "Error", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "LoadingText" + ] } - ], - "events": [] + ] }, { - "disabled": false, - "folded": false, "type": "BuiltinCommonInstructions::Comment", "color": { "b": 109, @@ -486,161 +786,3565 @@ "textG": 0, "textR": 0 }, - "comment": "As long the new random number is the same as the previous number, generate a new random number to avoid repeating the same number twice", - "comment2": "" + "comment": "Display the result on screen, whatever the way the person was loaded from the API:" }, { - "disabled": false, - "folded": false, - "infiniteLoopWarning": true, - "type": "BuiltinCommonInstructions::While", - "whileConditions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { - "inverted": false, - "value": "VarScene" + "value": "TextContainerCapability::TextContainerBehavior::SetValue" }, "parameters": [ - "prev_num", + "ErrorText", + "Text", "=", - "Variable(num)" + "Error" + ] + }, + { + "type": { + "value": "TextObject::String" + }, + "parameters": [ + "Information", + "=", + "\"NAME: \" + Person.name + NewLine() + \"GENDER: \" + Person.gender + NewLine()" + ] + } + ] + } + ], + "layers": [ + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 0.1, + "cameraType": "perspective", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "", + "renderingType": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "Animation", + "type": "AnimatableCapability::AnimatableBehavior" + }, + { + "name": "Effect", + "type": "EffectCapability::EffectBehavior" + }, + { + "name": "Flippable", + "type": "FlippableCapability::FlippableBehavior" + }, + { + "name": "Opacity", + "type": "OpacityCapability::OpacityBehavior" + }, + { + "name": "Resizable", + "type": "ResizableCapability::ResizableBehavior" + }, + { + "name": "Scale", + "type": "ScalableCapability::ScalableBehavior" + }, + { + "name": "Text", + "type": "TextContainerCapability::TextContainerBehavior" + } + ] + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [ + { + "author": "", + "category": "User interface", + "extensionNamespace": "", + "fullName": "Panel sprite button", + "gdevelopVersion": ">=5.5.230", + "helpPath": "/objects/button", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTI5LDIzSDNjLTEuMSwwLTItMC45LTItMlYxMWMwLTEuMSwwLjktMiwyLTJoMjZjMS4xLDAsMiwwLjksMiwydjEwQzMxLDIyLjEsMzAuMSwyMywyOSwyM3oiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMywxOUwxMywxOWMtMS4xLDAtMi0wLjktMi0ydi0yYzAtMS4xLDAuOS0yLDItMmgwYzEuMSwwLDIsMC45LDIsMnYyQzE1LDE4LjEsMTQuMSwxOSwxMywxOXoiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIxOCIgeTE9IjEzIiB4Mj0iMTgiIHkyPSIxOSIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjIxIiB5MT0iMTMiIHgyPSIxOCIgeTI9IjE3Ii8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMjEiIHkxPSIxOSIgeDI9IjE5IiB5Mj0iMTYiLz4NCjwvc3ZnPg0K", + "name": "PanelSpriteButton", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_button_ok_cta_clock_tap.svg", + "shortDescription": "A button that can be customized.", + "version": "2.1.1", + "description": [ + "A button that can be used for menus and most labelled buttons of a game. The button can be customized with a background for each state and a label. It handles user interactions and a simple condition can be used to check if it is clicked.", + "", + "There are ready-to-use buttons in the asset-store [menu buttons pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=menu-buttons-menu-buttons)." + ], + "origin": { + "identifier": "PanelSpriteButton", + "name": "gdevelop-extension-store" + }, + "tags": [ + "button", + "ui" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "changelog": [ + { + "version": "2.0.0", + "breaking": "- Buttons now use \"variants\", allowing easy swapping of their visual aspect. You will have to make some adjustments to existing buttons in your project. Follow this [migration documentation](https://wiki.gdevelop.io/gdevelop5/objects/custom-objects-prefab-template/migrate-to-variants/) to do these changes." + } + ], + "dependencies": [], + "globalVariables": [], + "sceneVariables": [], + "eventsFunctions": [ + { + "description": "Check if the events are running for the editor.", + "fullName": "Editor is running", + "functionType": "Condition", + "name": "IsInGameEdition", + "private": true, + "sentence": "Events are running for the editor", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const game = runtimeScene.getGame();\r", + "eventsFunctionContext.returnValue = game.isInGameEdition && game.isInGameEdition();" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [ + { + "description": "The finite state machine used internally by the button object.", + "fullName": "Button finite state machine", + "name": "ButtonFSM", + "objectType": "", + "private": true, + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::IsInGameEdition" + }, + "parameters": [ + "", + "" + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Finite state machine", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The \"Validated\" state only last one frame." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetStringVariable" + }, + "parameters": [ + "State", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Check position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the cursor position is only checked once per frame." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "MouseIsInside", + "False", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "ShouldCheckHovering", + "True", + "" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "MouseOnlyCursorX(Object.Layer(), 0)", + "MouseOnlyCursorY(Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "MouseIsInside", + "True", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Touches are always pressed, so ShouldCheckHovering doesn't matter." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "TouchIsInside", + "False", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "TouchId", + "!=", + "0" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(TouchId, Object.Layer(), 0)", + "TouchY(TouchId, Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "TouchIsInside", + "True", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touch start", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasAnyTouchOrMouseStarted" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "Index", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchOrMouseCount()", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchOrMouseId(Index), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Index), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "TouchId", + "=", + "StartedTouchOrMouseId(Index)" + ] + }, + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "TouchIsInside", + "True", + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "SetStringVariable" + }, + "parameters": [ + "State", + "=", + "\"PressedInside\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "Index", + "+", + "1" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Apply position changes", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "BooleanVariable" + }, + "parameters": [ + "MouseIsInside", + "True", + "" + ] + }, + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetStringVariable" + }, + "parameters": [ + "State", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "MouseIsInside", + "True", + "" + ] + }, + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetStringVariable" + }, + "parameters": [ + "State", + "=", + "\"Hovered\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "BooleanVariable" + }, + "parameters": [ + "TouchIsInside", + "True", + "" + ] + }, + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetStringVariable" + }, + "parameters": [ + "State", + "=", + "\"PressedOutside\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "TouchIsInside", + "True", + "" + ] + }, + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetStringVariable" + }, + "parameters": [ + "State", + "=", + "\"PressedInside\"" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touch end", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": [ + "", + "TouchId" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "TouchId", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetStringVariable" + }, + "parameters": [ + "State", + "=", + "\"Validated\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"PressedInside\"" + ] + }, + { + "type": { + "inverted": true, + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetStringVariable" + }, + "parameters": [ + "State", + "=", + "\"Idle\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onDeActivate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::ResetState" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reset the state of the button.", + "fullName": "Reset state", + "functionType": "Action", + "name": "ResetState", + "private": true, + "sentence": "Reset the button state of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetStringVariable" + }, + "parameters": [ + "State", + "=", + "\"Idle\"" + ] + }, + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "TouchId", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is not used.", + "fullName": "Is idle", + "functionType": "Condition", + "name": "IsIdle", + "sentence": "_PARAM0_ is idle", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button was just clicked.", + "fullName": "Is clicked", + "functionType": "Condition", + "name": "IsClicked", + "sentence": "_PARAM0_ is clicked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the cursor is hovered over the button.", + "fullName": "Is hovered", + "functionType": "Condition", + "name": "IsHovered", + "sentence": "_PARAM0_ is hovered", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is either hovered or pressed but not hovered.", + "fullName": "Is focused", + "functionType": "Condition", + "name": "IsFocused", + "sentence": "_PARAM0_ is focused", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is currently being pressed with mouse or touch.", + "fullName": "Is pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "_PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is currently being pressed outside with mouse or touch.", + "fullName": "Is held outside", + "functionType": "Condition", + "name": "IsPressedOutside", + "sentence": "_PARAM0_ is held outside", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "State", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the touch id that is using the button or 0 if none.", + "fullName": "Touch id", + "functionType": "ExpressionAndCondition", + "name": "TouchId", + "sentence": "the touch id", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "TouchId" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "Should check hovering", + "hidden": true, + "name": "ShouldCheckHovering" + }, + { + "value": "Idle", + "type": "Choice", + "label": "State", + "extraInformation": [ + "Idle", + "Hovered", + "PressedInside", + "PressedOutside", + "Validated" + ], + "hidden": true, + "name": "State" + }, + { + "value": "0", + "type": "Number", + "label": "Touch id", + "hidden": true, + "name": "TouchId" + }, + { + "value": "", + "type": "Boolean", + "label": "Touch is inside", + "hidden": true, + "name": "TouchIsInside" + }, + { + "value": "", + "type": "Boolean", + "label": "Mouse is inside", + "hidden": true, + "name": "MouseIsInside" + }, + { + "value": "", + "type": "Number", + "label": "", + "hidden": true, + "name": "Index" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [ + { + "areaMaxX": 256, + "areaMaxY": 64, + "areaMaxZ": 64, + "areaMinX": 0, + "areaMinY": 0, + "areaMinZ": 0, + "defaultName": "Button", + "description": "A button that can be customized.", + "fullName": "Button (panel sprite)", + "isInnerAreaFollowingParentSize": true, + "isUsingLegacyInstancesRenderer": false, + "name": "PanelSpriteButton", + "objects": [ + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Label", + "smoothed": true, + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 4, + "topEdgeAnchor": 4, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "useLegacyBottomAndRightAnchors": false + } + ], + "string": "Text", + "font": "", + "textAlignment": "center", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + }, + "content": { + "bold": false, + "isOutlineEnabled": false, + "isShadowEnabled": false, + "italic": false, + "outlineColor": "255;255;255", + "outlineThickness": 2, + "shadowAngle": 90, + "shadowBlurRadius": 2, + "shadowColor": "0;0;0", + "shadowDistance": 4, + "shadowOpacity": 127, + "smoothed": true, + "underlined": false, + "text": "Text", + "font": "", + "textAlignment": "center", + "verticalTextAlignment": "center", + "characterSize": 20, + "lineHeight": 0, + "color": "0;0;0" + } + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Idle", + "rightMargin": 0, + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [ + { + "folded": true, + "name": "State", + "type": "string", + "value": "Idle" + } + ], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 2, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 1, + "useLegacyBottomAndRightAnchors": false + }, + { + "name": "ButtonFSM", + "type": "PanelSpriteButton::ButtonFSM", + "ShouldCheckHovering": true + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Hovered", + "rightMargin": 0, + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 2, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 1, + "useLegacyBottomAndRightAnchors": false + }, + { + "name": "Tween", + "type": "Tween::TweenBehavior" + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Pressed", + "rightMargin": 0, + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 2, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 1, + "useLegacyBottomAndRightAnchors": false + } + ] + }, + { + "assetStoreId": "", + "name": "BitmapLabel", + "type": "BitmapText::BitmapTextObject", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 4, + "topEdgeAnchor": 4, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "useLegacyBottomAndRightAnchors": false + } + ], + "content": { + "text": "Text", + "opacity": 255, + "scale": 1, + "fontSize": 20, + "tint": "255;255;255", + "bitmapFontResourceName": "", + "textureAtlasResourceName": "", + "align": "center", + "verticalTextAlignment": "center" + } + } + ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "Label" + }, + { + "objectName": "BitmapLabel" + }, + { + "objectName": "Idle" + }, + { + "objectName": "Hovered" + }, + { + "objectName": "Pressed" + } + ] + }, + "objectsGroups": [ + { + "name": "Background", + "objects": [ + { + "name": "Idle" + }, + { + "name": "Hovered" + }, + { + "name": "Pressed" + } + ] + }, + { + "name": "Labels", + "objects": [ + { + "name": "Label" + }, + { + "name": "BitmapLabel" + } + ] + } + ], + "layers": [ + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "", + "renderingType": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "instances": [ + { + "angle": 0, + "customSize": true, + "depth": 1, + "height": 64, + "layer": "", + "name": "Idle", + "persistentUuid": "24882334-eec8-403e-8bf1-70fc928a46e6", + "width": 256, + "x": 0, + "y": 0, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1, + "height": 64, + "layer": "", + "name": "Label", + "persistentUuid": "3b29c95c-5363-4e25-bf47-eecf13e8a226", + "width": 256, + "x": 0, + "y": 32, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Hovered", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Pressed", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "ResizableCapability::ResizableBehavior::SetSize" + }, + "parameters": [ + "Hovered", + "Resizable", + "Idle.Width()", + "Idle.Height()" + ] + }, + { + "type": { + "value": "ResizableCapability::ResizableBehavior::SetSize" + }, + "parameters": [ + "Pressed", + "Resizable", + "Idle.Width()", + "Idle.Height()" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Hovered" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Pressed" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Hovered", + "=", + "1" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Pressed", + "=", + "1" + ] + }, + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "Labels", + "Text", + "=", + "LabelText" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [ + { + "name": "Background", + "objects": [ + { + "name": "Idle" + }, + { + "name": "Hovered" + }, + { + "name": "Pressed" + } + ] + } + ] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onHotReloading", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsPressed" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::SetLabelOffset" + }, + "parameters": [ + "Object", + "=", + "PressedLabelOffsetY", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "Labels", + "Text", + "=", + "LabelText" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Apply states", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Show the right background accordingly to the new state." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsIdle" + }, + "parameters": [ + "Object", + "ButtonFSM" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::SetLabelOffset" + }, + "parameters": [ + "Object", + "=", + "0", + "" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Idle", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Pressed" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Visible" + }, + "parameters": [ + "Hovered" + ] + }, + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "HoveredFadeOutDuration", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween::TweenBehavior::AddObjectOpacityTween2" + }, + "parameters": [ + "Hovered", + "Tween", + "\"Fadeout\"", + "0", + "\"linear\"", + "HoveredFadeOutDuration", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "HoveredFadeOutDuration", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Hovered" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "OpacityCapability::OpacityBehavior::Value" + }, + "parameters": [ + "Hovered", + "Opacity", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Hovered" + ] + }, + { + "type": { + "value": "OpacityCapability::OpacityBehavior::SetValue" + }, + "parameters": [ + "Hovered", + "Opacity", + "=", + "255" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsHovered" + }, + "parameters": [ + "Object", + "ButtonFSM" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::SetLabelOffset" + }, + "parameters": [ + "Object", + "=", + "0", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Idle" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Hovered", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Pressed" + ] + }, + { + "type": { + "value": "Tween::RemoveTween" + }, + "parameters": [ + "Hovered", + "Tween", + "\"Fadeout\"" + ] + }, + { + "type": { + "value": "OpacityCapability::OpacityBehavior::SetValue" + }, + "parameters": [ + "Hovered", + "Opacity", + "=", + "255" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsPressed" + }, + "parameters": [ + "Object", + "ButtonFSM" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::SetLabelOffset" + }, + "parameters": [ + "Object", + "=", + "PressedLabelOffsetY", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Idle" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Hovered" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Pressed", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsFocused" + }, + "parameters": [ + "Object", + "ButtonFSM" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::SetLabelOffset" + }, + "parameters": [ + "Object", + "=", + "0", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Idle" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Hovered", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Pressed" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is not used.", + "fullName": "Is idle", + "functionType": "Condition", + "name": "IsIdle", + "sentence": "_PARAM0_ is idle", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::IsIdle" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button was just clicked.", + "fullName": "Is clicked", + "functionType": "Condition", + "name": "IsClicked", + "sentence": "_PARAM0_ is clicked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::IsClicked" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the cursor is hovered over the button.", + "fullName": "Is hovered", + "functionType": "Condition", + "name": "IsHovered", + "sentence": "_PARAM0_ is hovered", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::IsHovered" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is either hovered or pressed but not hovered.", + "fullName": "Is focused", + "functionType": "Condition", + "name": "IsFocused", + "sentence": "_PARAM0_ is focused", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::IsFocused" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is currently being pressed with mouse or touch.", + "fullName": "Is pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "_PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::IsPressed" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Change the text of the button label.", + "fullName": "Label text", + "functionType": "Action", + "name": "SetLabelText", + "private": true, + "sentence": "Change the text of _PARAM0_ to _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "Labels", + "Text", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + }, + { + "description": "Text", + "name": "Value", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "LabelText", + "name": "SetLabelTextOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "Labels", + "Text", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the label text.", + "fullName": "Label text", + "functionType": "ExpressionAndCondition", + "name": "LabelText", + "sentence": "the label text", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Labels.Text::Value()" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "De/activate interactions with the button.", + "fullName": "De/activate interactions", + "functionType": "Action", + "name": "Activate", + "sentence": "Activate interactions with _PARAM0_: _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "ShouldActivate", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "BooleanVariable" + }, + "parameters": [ + "ShouldActivate", + "True", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "no" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + }, + { + "description": "Activate", + "name": "ShouldActivate", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if interactions are activated on the button.", + "fullName": "Interactions activated", + "functionType": "Condition", + "name": "IsActivated", + "sentence": "Interactions on _PARAM0_ are activated", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BehaviorActivated" + }, + "parameters": [ + "Idle", + "ButtonFSM" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the labelOffset of the object.", + "fullName": "LabelOffset", + "functionType": "ExpressionAndCondition", + "name": "LabelOffset", + "private": true, + "sentence": "the labelOffset", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "LabelOffset" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "LabelOffset", + "name": "SetLabelOffset", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Labels", + "+", + "Value - LabelOffset" + ] + }, + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "LabelOffset", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } ], - "subInstructions": [] + "objectGroups": [] } ], - "conditions": [], - "actions": [ + "propertyDescriptors": [ { - "type": { - "inverted": false, - "value": "ModVarScene" - }, - "parameters": [ - "num", - "=", - "Random(61)" + "value": "", + "type": "MultilineString", + "label": "Label", + "name": "LabelText" + }, + { + "value": "0.25", + "type": "Number", + "unit": "Second", + "label": "Hovered fade out duration", + "group": "States", + "name": "HoveredFadeOutDuration" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Label offset on Y axis when pressed", + "group": "States", + "name": "PressedLabelOffsetY" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "", + "hidden": true, + "name": "LabelOffset" + }, + { + "value": "", + "type": "Choice", + "label": "", + "extraInformation": [ + "Label.Text=LabelText", + "BitmapLabel.Text=LabelText" ], - "subInstructions": [] + "hidden": true, + "name": "_PropertyMapping" } ], - "events": [] - }, - { - "disabled": false, - "folded": false, - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Get a random person and planet from SWAPI using the random number we generated", - "comment2": "" - }, - { - "disabled": false, - "folded": false, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "variants": [ { - "type": { - "inverted": false, - "value": "SendRequest" + "areaMaxX": 256, + "areaMaxY": 128, + "areaMaxZ": 64, + "areaMinX": 0, + "areaMinY": 0, + "areaMinZ": 0, + "name": "Small Orange Bubble Button", + "objects": [ + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Label", + "smoothed": true, + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 2, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 1, + "useLegacyBottomAndRightAnchors": false + } + ], + "string": "Button", + "font": "Poppins-Medium.ttf", + "textAlignment": "center", + "characterSize": 30, + "color": { + "b": 0, + "g": 42, + "r": 117 + }, + "content": { + "bold": false, + "isOutlineEnabled": false, + "isShadowEnabled": false, + "italic": false, + "outlineColor": "255;255;255", + "outlineThickness": 2, + "shadowAngle": 90, + "shadowBlurRadius": 2, + "shadowColor": "0;0;0", + "shadowDistance": 4, + "shadowOpacity": 127, + "smoothed": true, + "underlined": false, + "text": "Button", + "font": "Poppins-Medium.ttf", + "textAlignment": "center", + "verticalTextAlignment": "center", + "characterSize": 30, + "lineHeight": 0, + "color": "117;42;0" + } + }, + { + "assetStoreId": "", + "bottomMargin": 35, + "height": 128, + "leftMargin": 56, + "name": "Idle", + "rightMargin": 35, + "texture": "Orange Bubble Button_Idle.png", + "tiled": false, + "topMargin": 35, + "type": "PanelSpriteObject::PanelSprite", + "width": 256, + "variables": [ + { + "folded": true, + "name": "State", + "type": "string", + "value": "Idle" + } + ], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 2, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 1, + "useLegacyBottomAndRightAnchors": false + }, + { + "name": "ButtonFSM", + "type": "PanelSpriteButton::ButtonFSM", + "serializedBehavior": { + "name": "ButtonFSM", + "type": "PanelSpriteButton::ButtonFSM", + "ShouldCheckHovering": true + } + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 35, + "height": 128, + "leftMargin": 56, + "name": "Hovered", + "rightMargin": 35, + "texture": "Orange Bubble Button_Hovered.png", + "tiled": false, + "topMargin": 35, + "type": "PanelSpriteObject::PanelSprite", + "width": 256, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 2, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 1, + "useLegacyBottomAndRightAnchors": false + }, + { + "name": "Tween", + "type": "Tween::TweenBehavior", + "serializedBehavior": { + "name": "Tween", + "type": "Tween::TweenBehavior" + } + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 35, + "height": 128, + "leftMargin": 35, + "name": "Pressed", + "rightMargin": 35, + "texture": "Orange Bubble Button_Pressed.png", + "tiled": false, + "topMargin": 35, + "type": "PanelSpriteObject::PanelSprite", + "width": 256, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 2, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 1, + "useLegacyBottomAndRightAnchors": false + } + ] + }, + { + "assetStoreId": "", + "name": "BitmapLabel", + "type": "BitmapText::BitmapTextObject", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 4, + "topEdgeAnchor": 4, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "useLegacyBottomAndRightAnchors": false + } + ], + "content": { + "text": "Text", + "opacity": 255, + "scale": 1, + "fontSize": 20, + "tint": "255;255;255", + "bitmapFontResourceName": "", + "textureAtlasResourceName": "", + "align": "center", + "verticalTextAlignment": "center" + } + } + ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "Label" + }, + { + "objectName": "Idle" + }, + { + "objectName": "Hovered" + }, + { + "objectName": "Pressed" + }, + { + "objectName": "BitmapLabel" + } + ] }, - "parameters": [ - "\"https://swapi.dev/\"", - "\"api/people/\" + ToString(Variable(num)) + \"/\"", - "\"person\"", - "\"GET\"", - "", - "person_json" + "objectsGroups": [ + { + "name": "Background", + "objects": [ + { + "name": "Idle" + }, + { + "name": "Hovered" + }, + { + "name": "Pressed" + } + ] + }, + { + "name": "Labels", + "objects": [ + { + "name": "Label" + }, + { + "name": "BitmapLabel" + } + ] + } ], - "subInstructions": [] + "layers": [ + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "", + "renderingType": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "instances": [ + { + "angle": 0, + "customSize": false, + "depth": 1, + "height": 64, + "layer": "", + "name": "Idle", + "persistentUuid": "24882334-eec8-403e-8bf1-70fc928a46e6", + "width": 64, + "x": 0, + "y": 0, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1, + "height": 110, + "keepRatio": true, + "layer": "", + "name": "Label", + "persistentUuid": "8aabdbe2-ad4d-4746-839b-9f769bc07c5e", + "width": 238, + "x": 9, + "y": 64, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ] }, { - "type": { - "inverted": false, - "value": "SendRequest" + "areaMaxX": 256, + "areaMaxY": 128, + "areaMaxZ": 64, + "areaMinX": 0, + "areaMinY": 0, + "areaMinZ": 0, + "assetStoreAssetId": "72c8adcfb9187ebb5fcfbcd75bc18c74d6af5507e7c482cadcfad28f8011b387", + "assetStoreOriginalName": "Orange Bubble Button", + "name": "Orange Bubble Button", + "objects": [ + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Label", + "smoothed": true, + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 2, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 1, + "useLegacyBottomAndRightAnchors": false + } + ], + "string": "Button", + "font": "Poppins-Medium.ttf", + "textAlignment": "center", + "characterSize": 60, + "color": { + "b": 0, + "g": 42, + "r": 117 + }, + "content": { + "bold": false, + "isOutlineEnabled": false, + "isShadowEnabled": false, + "italic": false, + "outlineColor": "255;255;255", + "outlineThickness": 2, + "shadowAngle": 90, + "shadowBlurRadius": 2, + "shadowColor": "0;0;0", + "shadowDistance": 4, + "shadowOpacity": 127, + "smoothed": true, + "underlined": false, + "text": "Button", + "font": "Poppins-Medium.ttf", + "textAlignment": "center", + "verticalTextAlignment": "center", + "characterSize": 60, + "lineHeight": 0, + "color": "117;42;0" + } + }, + { + "assetStoreId": "", + "bottomMargin": 35, + "height": 128, + "leftMargin": 56, + "name": "Idle", + "rightMargin": 35, + "texture": "Orange Bubble Button_Idle.png", + "tiled": false, + "topMargin": 35, + "type": "PanelSpriteObject::PanelSprite", + "width": 256, + "variables": [ + { + "folded": true, + "name": "State", + "type": "string", + "value": "Idle" + } + ], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 2, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 1, + "useLegacyBottomAndRightAnchors": false + }, + { + "name": "ButtonFSM", + "type": "PanelSpriteButton::ButtonFSM", + "serializedBehavior": { + "name": "ButtonFSM", + "type": "PanelSpriteButton::ButtonFSM", + "ShouldCheckHovering": true + } + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 35, + "height": 128, + "leftMargin": 56, + "name": "Hovered", + "rightMargin": 35, + "texture": "Orange Bubble Button_Hovered.png", + "tiled": false, + "topMargin": 35, + "type": "PanelSpriteObject::PanelSprite", + "width": 256, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 2, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 1, + "useLegacyBottomAndRightAnchors": false + }, + { + "name": "Tween", + "type": "Tween::TweenBehavior", + "serializedBehavior": { + "name": "Tween", + "type": "Tween::TweenBehavior" + } + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 35, + "height": 128, + "leftMargin": 35, + "name": "Pressed", + "rightMargin": 35, + "texture": "Orange Bubble Button_Pressed.png", + "tiled": false, + "topMargin": 35, + "type": "PanelSpriteObject::PanelSprite", + "width": 256, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 2, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 1, + "useLegacyBottomAndRightAnchors": false + } + ] + }, + { + "assetStoreId": "", + "name": "BitmapLabel", + "type": "BitmapText::BitmapTextObject", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 4, + "topEdgeAnchor": 4, + "leftEdgeAnchor": 1, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "useLegacyBottomAndRightAnchors": false + } + ], + "content": { + "text": "Text", + "opacity": 255, + "scale": 1, + "fontSize": 20, + "tint": "255;255;255", + "bitmapFontResourceName": "", + "textureAtlasResourceName": "", + "align": "center", + "verticalTextAlignment": "center" + } + } + ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "Label" + }, + { + "objectName": "Idle" + }, + { + "objectName": "Hovered" + }, + { + "objectName": "Pressed" + }, + { + "objectName": "BitmapLabel" + } + ] }, - "parameters": [ - "\"https://swapi.dev/\"", - "\"api/planets/\" + ToString(Variable(num)) + \"/\"", - "\"planet\"", - "\"GET\"", - "", - "planet_json" + "objectsGroups": [ + { + "name": "Background", + "objects": [ + { + "name": "Idle" + }, + { + "name": "Hovered" + }, + { + "name": "Pressed" + } + ] + }, + { + "name": "Labels", + "objects": [ + { + "name": "Label" + }, + { + "name": "BitmapLabel" + } + ] + } ], - "subInstructions": [] + "layers": [ + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "", + "renderingType": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "instances": [ + { + "angle": 0, + "customSize": false, + "depth": 1, + "height": 64, + "layer": "", + "name": "Idle", + "persistentUuid": "24882334-eec8-403e-8bf1-70fc928a46e6", + "width": 64, + "x": 0, + "y": 0, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1, + "height": 110, + "keepRatio": true, + "layer": "", + "name": "Label", + "persistentUuid": "8aabdbe2-ad4d-4746-839b-9f769bc07c5e", + "width": 238, + "x": 9, + "y": 64, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ] } - ], - "events": [] + ] + } + ] + }, + { + "author": "", + "category": "", + "extensionNamespace": "", + "fullName": "", + "gdevelopVersion": "", + "helpPath": "", + "iconUrl": "", + "name": "MyExtensionForRequests", + "previewIconUrl": "", + "shortDescription": "", + "version": "", + "description": "", + "tags": [], + "authorIds": [], + "dependencies": [], + "globalVariables": [], + "sceneVariables": [ + { + "name": "Response", + "type": "string", + "value": "0" }, { - "disabled": false, - "folded": false, - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Parse the JSON we got from SWAPI in to variables and update the text to display name and genre of person and name of planet", - "comment2": "" + "name": "Error", + "type": "string", + "value": "0" }, { - "disabled": false, - "folded": false, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "name": "Person", + "type": "structure", + "children": [] + } + ], + "eventsFunctions": [ + { + "async": true, + "fullName": "Request a random Star Wars person", + "functionType": "Action", + "name": "GetRandomPerson", + "sentence": "Send a request for a random Star Wars person and store it in _PARAM1_ (and error in _PARAM2_ if any)", + "events": [ { - "type": { - "inverted": false, - "value": "JSONToVariableStructure" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "VariableString(person_json)", - "person" - ], - "subInstructions": [] + "comment": "This sends the request for a random person, then convert the JSON returned into a structure.\n\nFinally, the structure (and the error, if any was returned) are copied back to the variables passed as parameter.\n\nThis action is \"asynchronous\", so we mark it as finished at the end." }, { - "type": { - "inverted": false, - "value": "JSONToVariableStructure" - }, - "parameters": [ - "VariableString(planet_json)", - "planet" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "num", + "=", + "Random(61)" + ] + }, + { + "type": { + "await": true, + "value": "SendAsyncRequest" + }, + "parameters": [ + "\"https://swapi.info/api/people/\" + num", + "\"\"", + "\"GET\"", + "", + "Response", + "Error" + ] + }, + { + "type": { + "value": "JSONToVariableStructure" + }, + "parameters": [ + "Response", + "Person" + ] + }, + { + "type": { + "value": "CopyVariableToArgument2" + }, + "parameters": [ + "\"ResultVariable\"", + "Person" + ] + }, + { + "type": { + "value": "CopyVariableToArgument2" + }, + "parameters": [ + "\"ErrorVariable\"", + "Error" + ] + }, + { + "type": { + "value": "BuiltinAsync::ResolveAsyncEventsFunction" + }, + "parameters": [ + "" + ] + } ], - "subInstructions": [] + "variables": [ + { + "name": "num", + "type": "number", + "value": 0 + } + ] + } + ], + "parameters": [ + { + "description": "Variable for result", + "name": "ResultVariable", + "type": "variable" }, { - "type": { - "inverted": false, - "value": "TextObject::String" - }, - "parameters": [ - "person", - "=", - "\"NAME: \" + VariableString(person.name) + NewLine() + \"GENDER: \" + VariableString(person.gender) + NewLine() + \"HOMEWORLD: \" + VariableString(planet.name)" - ], - "subInstructions": [] + "description": "", + "name": "ErrorVariable", + "type": "variable" } ], - "events": [] + "objectGroups": [] } - ] + ], + "eventsBasedBehaviors": [], + "eventsBasedObjects": [] } ], - "eventsFunctionsExtensions": [], - "externalLayouts": [], - "externalSourceFiles": [] + "externalLayouts": [] } \ No newline at end of file From 879f94aef46432bb1051ac3bccf9d71895d3a46e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 3 Sep 2025 22:51:12 +0000 Subject: [PATCH 2/5] Optimised images with calibre/image-actions --- .../assets/Orange Bubble Button_Hovered.png | Bin 9194 -> 2069 bytes .../assets/Orange Bubble Button_Idle.png | Bin 9160 -> 2107 bytes .../assets/Orange Bubble Button_Pressed.png | Bin 9109 -> 1916 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/parse-json-from-api/assets/Orange Bubble Button_Hovered.png b/examples/parse-json-from-api/assets/Orange Bubble Button_Hovered.png index e2e5f89f649931bf049bfb3a809ef183b1ef30ed..c66b0aace2b1e8696d3cfe2b68883ae580b9b475 100644 GIT binary patch delta 2047 zcmVrY|H6R%qc{J-$qF;I#VE!|3{A>5B>v~71>qi-^VGz!4 z29O_?t7kpF%q{UKg(a-8BQW@If4qP2{7IIrGXCqN=V1UdM9WA*XT(ZL4`&@8L?Hi6-x#wDJhe<0)wW_U;*o23!Yf%;(IW$CqOK~DpvV-S5QAfAckkPKFZ<^sKvN^f8Ct_F#_3N znuM7#0H>p|0IuhMYzlB0z$DD|05tHCyk-4;XA!z5;i86MPAl+yYyLWW7=B|8!30-; z9)Q8*4?jHPh(j=u-vFVWec#XU7)~x6e143~S5HJ&uyCt#^0k$W)F8gPl}P+SGq8gJ z@Fi+@Zr`V~i%eZw&Hdhfe=1&t9eoZb_#+T%2lFFT!!Mx!3IzB;hB=@aDCM))$YBME zGyjEX=vNV!z)1{;9{ZI)3f3a&34Rc!_zoPQjYoYP0=^jb8eYUH{thQF@Z%DoMKI+x z2ruDkTmonOhsgxK!>|UIdJ2~QQox56lt`EG)t!!(2le3y(!~lOe{sN7IAa1|&_s(c zvobj-+zel{a#+8ZfOr+edL%#i7jU*53nDGNhX#R>@k`*f1mZgh#MC8T#&E_<(ou@l zO-3biY~(Ub@~T_oSn0A?46q5r=%%lfH&%RN3rl@pcCBs4CA+DRM8rX$9lx7$spVyF z!nWDX&p`l@#sf%ue_GNT`gWpN1kyBx_EaJ^t|nr>z!^gq%S6^VWuuHq3JP(ox~FXd zcDh*IyDSC}r%vY17##v*<9|$G{T%}9blpK}UNJI@YvrBNU&_sFWLN1&l&r9zTLc`5 z`}N!4d?KSU?I$o2ehK^%Xc5?ma|0&;gbm6YR;9Qm%SO4Ae;an!x3vn!PUuDf`LeMI zkX?mTSnHOxVUd(J8^eFy>MWmQEoFX6i8g`J@k_uW@Wt4C-Gj|TjZOk%;%5=~`w#F- zz#?$?2l!zG%EO^#2)Qh^QnKxE&@x&M+V^lc98_DWF3L(_SeLRzz{;pI_o3f%2YLvM z2aCXVTbAN)e+xhf#S&XeQnpet%(4rcwr!MJC=IDZwMC%a#Tlq{1-IImvn82447dr5 z2%EqsA6s>Y3*Py9<+x)o0%@DLmXa%Ie=mRrq* z=|HAj-P?Anciu|SCXgeFT%wR#VKwKbL(y(i$obDeu5@k4>CDM)bugWBJ4nvX4g#a&XAwyD`(&R;?CBy70aW3>C(SgI zx3VYff6X4sd#`ouM6qlFMsgLQ2m1jn>FvAkNIe9`!!H4gKoDS?yh)!xyDLjzXn`}b zbPf0#B*85N0ty}gpbrTNsi@0X)SMVzfs|TE3`u&cHYPy-eeZQUafeR7cCy4yVNgq2 zsqL7awSOQCMn}j5XbVR)K7ok0a7<|{-S`A(e>d3_c5>B7z&s}*kJnaYh!-sq4U znRqK#S+Sne39mlrPbqITXhm?>uxX<3KeZ5uKhS%1- ze~yFaG<&^aNUo^bWNvKjhQ0NX^6;!~o->Fym_o(z96=&l0W)iJdq9&g3b@K*-r3$? zjg!CXZ0}bE4$L5ur=hhG8J0*lIWO9s^LGjyu*9Sx29eG$#7OESN4ib=8IHO=v{b`A z!u*$R$(Jm0sdV@#l5tRpjHm_;lM_jje`%yUYdxymMJ{h2vdpLAbR3-|rRj^bhDHLj zRrL?84wWqP=`VD8j~tyNJA0d=Qq8B09K_!H3!R9;<(&qhg)q8?@D>Z!yEVhbW>o7} zMX$j7aIu>#_oMQ}r&Fl#$%3JBKUr{DGllBe+3E5BOh1MyUa{n};gZh^@L+0@QCvp5 zoQ4Z7&7#-(`0S!rPCr@PT=si@X4!AE`$pxl7>CO<3ZI)h3!i^L={Hs0KezaOaOwAw dn2u2X{~s0=_>}fQ-S_|i002ovPDHLkV1iZZ1H}LU literal 9194 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 Q)Bpeg07*qoM6N<$g2g}xssI20 literal 9160 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 S;ufX=0000T>yRY%n==3G?*HuV>yan_ z?e72X@Bi%W`=~4b?CtQEFZZB8_ntTFjv@Dy9A&uRi|Ing8O^{lt6xxmqVe+I-!L_t(|+U;BG zn&Kb~-GZX-^rqwG{oiyIayg+;b-e8SFs(F@kaGxB=i7xpf9kT{EElWQ*F&;eEtZ@0 zpZjHf#{PPmtQL2Y*et%DE{o0W@T;$v$ZB&h{9%7QoxcA*Am69cet)=!!djAlI6eez zXdH#Z;>ucB^6>Xhe?un@oQK&Ytd}o>H)&Yb@mH^dPg$TOtY`5LC+O34msW$fFhO3!ht3@rYW;gQ0z%pk4*)3cLrmIDPpmEMI7j=$T! zNIJ~Ha=HNajDJbM^OG=cM`U0oVPWved)(r+g%ax4Wh)M#e~mDh4p!nKn}9=l|GF^> zM^y!&OaYbDQS@zQx-@n0eXy}_fa04TBg7p`1y+CtTXOE5F2t2dK$?Kw0&kH6Y7^Pc zv|C%RldypV&;*Qk$#(pS=p?Kl0mmQU|4_O-1q(?)f353J;HFKzq#(WsYh3}|#h(hi zP?>tvD*Twnf72AKc?MDfl0Tv)m5QizQ+u-M-F4VPDiOKVCkT2vFEdiPVD<^T^}RH+&jb++@Q9E( z0TpsI8V67h3JjJ`b?u(fOl>6sIbA@s2p!V0xv><$+fwbWWgyQ+u9fR`<0KvT5O|Gz z2vi98e|VEjG_R%4ojjU-s)`y*yvhW8^}5ZZ4^uVG(q15NF`XqAUMhW5C`2;%VkYMV z!X|ED-Gh7YxqFEK2!_|ED)VxSTQLLKF!a$Q2gwN6fM*ZAGLPQNWckVz{A?)mz507H z@K*T{s1Rr`cgqjfxiZsUx@I3m0x6~^CaShxf8o8?5}Znc&XY%pfT1`U>11psV>1~j z#wrnL&*Ix8{6vXSpjMHp!AgaI#VZH%;BbwC2JzA%J<0@ptL}L;uU62ejeg3*7cw)K z0S$=kODQO~`F1i@e$run3VeN1{T=h|A6f%1mJfjnfhOKoqZ;aDY>ZozyG~qKYbpd9 ze{q+td}&dDH%@uo_&{TUKr%L$N0XFTHq?*WqSgpW2I9`#i5eU7qp%#MDHCW6vVfDc z*~duB4?{vtqDuH8feZn{wcKiqE!Z?)kUbg+HZa#RfmR9IF~I;T8E8!^$~tDal7R=M zoh4-CVFK-gTwjxc4}lMXM+t;z3hEWOe+Z`Y#4lDt2`7}>LNx=9W5t`1q@s)n(OIHS zKTfPgb|nG|D2O4(2$F`N(E|B9;RuX)Fz1icnv?NWGZ5m~0zhVb0_KAVy9T%;6va;;1?43PJa=F z;LPpFIX#`rVu%CU9W}cY>o}}qQF6{P2PgP~ z9W+)`*gw!Z2pB_2bRd>O12~0Dz{=kY#>p7C-YS6w@8a>;tt4T_W|C20n1}Yfhhzbp zSlk;0HnD7E8&7yQfkPyq8=2bo;kU4n3AS>*4S&F`T(Ft#Z3KeZ%(i^{e;n+*%)rKO zXngxS5H~cYUCrO-tKc08kS(3KtG9Vy0*=T~aa%8@z{hYDRKpI=)VM_jS!#E3A|plg(~Zq31?g--DC6xAV z9>O0H=`OvvwcsL99VHt3A2)qn1d>6Lc%XoNr748w-69=H*UcV3w{!+NQ0Qcbp z0ACNEf5pcRUxyQh6LkQ(cI{#aYcGY7eh%)#$pgaGFjc&ak3Dt?P6$rK0j3eZ8D8r# zJl%c^;CEMmZvJ$>9zS>93)gSL2MO@tDS-Xc00&P3o_RWaJ_&gGX@Ccx>}Y&)j&N5F z5a#%Eu%p+OLOop%27mhp!BKwrfiv`K2oA70`z+u`o&!8Qzl41WwwsslCPz571JFCy zzY>y^uU8YhFsg@Ne|!3j*Z1KVFgn90zBD;RBQo3w)_C!_(O|U$%$Yred4Bk+i*VoY zCl6t&*gW|hY(Dlv-4O_0!N(tc5mv$~2be&52Z+Z1zMJUXdJA^{^NoP>MjtJDD0~hAxl`fpAbhsrelH4yfrS;0M5&Kq zyF=_6b1fMhRNsXUmj_%KJU|CS@@6+4mO)x;r@2`{2sa>IKtj%{@ITPV}iKZ ze6H6Cx*VWo{N7PN8hzM3628xb502g%H8iUU!#xqP@>r+vY!5Ioh%^M(gjBvL831N} zuJKE=$pMlWq?`<;n6ntt=}I3IuOv%uI9?8bo15YDZWzc5&aiiSjt1kjpkaj*EIL5b z`2YJaF#PJC)v+ol7ArQSEaZ2#y-{|IpNXO%{KaCGz+;rl^2rhZ(g1?r}e)V)8;Hz$EA&ECGP zq3yNH_rVeN_I?vC?)dm&BWe5DZ`q24)j`z(rfpro*K~PnU*G9Y4sG& zr&DtR0L!l>!Cc6W(wpIKpGTO-5S{_`Ikf@9bZj&<~*74vP003Kwg*P|l-&)ZIAY44x|P~rAZLlP6kh{Ws! zOJZ<&u_|}uxDYis?q)AUcPA&n!)Iap*RSd(SMkwDKhBFp1eiv@GX9kCxyFAa82=H_ zqmRV>BzawDa_p=#e&@?4Onel@k-| zr@kiPV36qp(@$~wGGKN`XC|9yaCc~xjk5y;&v+j6=pPdbXY?Q4c^p!fGIufwBu8XX zgdPn8!m1 zNw}1rkN1>D4wTVDDJ1hU0LYVvVE$T?!O|Cg z@AY*M_(VhQUzUYRM9B4-E(rdq4dp(jHqogvKgj(VcKcx&{;;*zubjv7xP2*GePTJT z`+=Sp4R5^RKHwRSPDi`RId~EV`P?;+GK$9JnSCB1G!%s=kI(ZTWP_%T3qFvNuR+x3 zks8Z&o{;WSXrJW*&=CUw*j&xqmX(BbwzBHT5s`|M&G-XL{&+N?GODA|rxg=2)GSky zJJB!q!O5!VA0jWKdHf4ChGAKE#**c>y+E(Pm799Z77b4kj8S`bkEJH1ysnCx&!#GGa zgeYLnY9LNFkEx?P)Jeawb3cuTH)x*w+dyu=7J)kJdT43rS@f>~>L_gS?3U#iiVRU; zv=wgNm&I@YaM~MSCDRk$O_&SD3%Tuk!=CJ+-2wPs|7Y+aTHof+k!So2ldU8S*M6Xj z&W^9@g=e?J1>kG1G4#6|KMz0-U!Eg+8{4KQe20_T(I7=SOm`k=i3fw5e0RW%ju0+m3kNLnR zK^-tNmJOi|YmU|E5y9JeBznjinho6J@SqAFHDpQOi@Iy$(Xbct0Cjle-C*0NI1-%; zSaenp@lN^-OAbIvDki7*;3F$Wl{cTS!rg%vQfmfUO?!nSyZG$BmyE%a9i(Avo7{d& z%kj);*|QSKzPd%!JJFHTw$V;2B3}DX%N8cSrG$W5IL84-iwOE?Cs{PUa)vy;b%eZAw|w4!s}FdBbw+xbpI3%r&hlovC-jIM{CrU?xhYlf~l_|U1w zdejxw9FA`4l5^$}lIJBfw9@E!oxD~)FbA`8$k!1Uq7$St(T?%sPJyJvK&LI|sqvXX zL=>t`NvLo=XKKtZt>7i(RXR>`b36kiX(U|{TGU%!1n2^#AQ7U{0f(WW@cLFb%eaFr z&!JKv0wbyn%)+a1!o=TGCR*MZSY4taXmeSN@QRMp|9tj~Pb0j(HdQ#zo>?a+sOZ~) zP6x;wKq?I*-vP=omO&aLE@)88xoWgFnmRrU6bW6x>R#yUdQFu&OfO3*x;=P8BDsHOR3lXYaM_K17POEjAlo- ze3c5oHv}jn4T`Vl2%vbOk(Kmlsz#a8UY@e zs63ttbiIeq9n|~wXtnAze>dSObX=5H8d9M(AMoH66}|wfpY`x;X*OuXvWz{jE&|Bu z#^!h}r`Bc6r}BygRXJ7Y^bYjeRPVK`^?}o2Ji7L&$SH3aX3b_|6IRe!u?iq&E#;|e z1Xtc!T_N7BGODAXQqkfkq7TCAE$kD1%@|j_53vMY4ltik#W;dwQd87v1xmlkK|H=D zKZ?mr;Q@kXDJMop^5HL~f!m&K7UDNFGpqlVE25|9xa}xn>PQ_Xjjyly z313!67LO~8o0Xs_lqzyo`%NTAZIqdGLoq$^mp)9j;YnmAkh)7Jo^^I;`$yKlZBEiMNjbf5F-pG*(79GT%Ss=dL1p6A*;+IGTl2X7)pX7 zV;JwXobEDC_yRGS;OfbROvCAT1=cMCN6_z3bLNZ1Is@c1Qz+vE%Cx~lo_RW%5g5_@ zTQPc#mv9sf-Y=76q4X-^v;oA!F96kX#hW}?3Lg@E)HJ+y+#9(p&;^}IAXJ3WVj)n| zS1WZC6E3n8%S$4bjx-?|nz~#{SHlOVkF|U4B-*&F&V*)17sUHj*Yo^R45}%o(VqsK z%x}3w_IbaZ%hha9K2$DZJtIPXTVZ4G+QX-Y9GaKchbkW~tLh7{YuLmP>0}O_8M9W}H$lem8-U6FL*lz;&kRu|D@e=PIE5D@I1)49UpFMWp){1EatL zAcLEXqov^5DZG)%LsjXE4B*HZ9i%cZmv5@dBg-{l6DOMyB_6qRf0CBKT}`C=&M9DZ z1aJ%VU?5puv{Otnk0XB%>P2HT#LOr&V% z(66Vqj10a7jQ7bZEx)GcCBg|uOfg=08#?y^ilT^*V&Jne3;&c#YEqC=QMuz=uz5=~ zM-AzSGY+2)%0z%}3?Yy|ek)?krI`oN#o{{6Rkm-U6)3sFj?{uJZKFKTBOfipQ_x!t>Z}@Rk>O{ zdOu91uWQmS!Cfo^Nqu6eyEX&Rqt3&ty+9%zrN*C{JnRoowP@)&echr{`_?klT|mk% z`_F&y!l&2jr-jZ4z~*%a_}q+fM~#QOj2DOVOs^~x@J-* z>N9ry)>Ht@{=T6t`OG;7@uCv;biiQFVE8&COS@<>j+I=KCRroPYI2xmQk_PUPeuY# ze6$p6&A;MlApg{qOi`$IaP!;QassIu0ICsTa;@j#Q}XU~pq;*(@<8qdbsDGU8q}m; zuU~@o4}+itF2QEHWqChF@yT%l{`{KnA@FrKAL(hD$PbJnC6voEoBxBzphya<$`ZOv zvOqa>dAe5~US)kCi4Ku^l0~}HK;T6jVrK(@O>-tXaD4$kN6>5jRY$_S(8z$~MNeeOOodM|3VAuICx#?lh|}bh zxMcFry3P27o0P9K)8#U37oL)rl_>R_oM0q#dw!@CymHkCk^ZSRsxy_g8qbGS4};{x z63ZahEB?YM`G8P{FcecFsFK4RYk@gdV-3&gWmEzkxNJXo9ph_E;Lx#$mXx#QfJdMQ zxlCdu9scIL8HYk&&;{K)fm03}=V$)ZihwQHX#VK>jFk+uC>(PnAeoG%POAuK{n1%^ zMcMK?onjf6G4UV(os1PM<$Oepqun!*GAUW0=v2@}CL?d3S(2hk+=GBRJz(|IKp|x5 z4f~(DpZrpaTbRpK9hYFfah6YlmgMP|k!j0wf}Zygys6D=Q`*jLaRxwTYB$)L)LthIho&dUrg zrqL>A5Y+7}v_U(Lsx3m3$z3HMsV}bNfw{vHtU45`r#c?afMwJoX(d+1?m^shV55tj zzAZGp$lxg)foIM+H6#$Sdc7q;&}*?gtC5Tna`Q=>qPVk6PBH(VCCohdyZ@yvG1(Bn z;pgdP8CJa;s7xtf9<59?^7?Q!k9b}p$AO508q;+!?r8NvVWBe#EQ%#%w2YCH7&Pq?CN`B-lA>AyqsLD% zCV?Jz_KBZ7WTM+FK|Q28g8}3$jONP9R;R0Vs_9C7CY|(70jtgfcwUSZ9Pbbbtq{z1 zS|@S7;u8kc^>4yUziLAC0o3&F*hQ z<({W5Iyw}Oo>xFagC23_Ow96US~3Fh5y3}Gi++)obX)SHj&4~8?TCyUS-r?>GA*TR z4^oF6(3Jzo9lOGqiw11IO$Rn|Va}!W0~TkFi&=L0n|$f5U9_z8b;L_Wq-E37Q6QV(+6h0%u6d>Gz3I`&D&U9{^oKD#q#|HE~7F6C^{b0 z95@vq=Eu)m1~G=XV~JEG%{4I zE1fSJv&i0{&_0-U_S6Hf(za;X8w?F$n)UV!<9sdeBj3zlCACX@6m&TN=Fyz)8BdU- zwW*Mb5zuCm9Wo`}>pHv!UH3&tr8+%ZD5IBO=gLqiCp{RC3EhW6;}zIZZE@3*i_}w+ zv~s7~VGjUysFa1fJPqhgA`tZLlu`-dX(8!E5B_v9rUzMi-WJr{FTcUu6OWEgpX|@p zL|uUo_5iFW%Q77Eha#CEa|WdzPWZSMdgjnL&jTn0k)u4Xt&mjUd46njY>Q#9se(-l z*UmEq^F2$gH+ZZgX-DmYyM8^K%=|Q$7Vt)@oZmXRpZeWzfkl?R&58o*DPx#wXuS_m0#cOwD;V# zmgp?IxrFYm;CZz{DqBs}6cbRVo=>R2J3{P>#7B(hNHa2kvMI&uK!$gaHW<(_(caDrp}P$U=50;1kfVU4tcYzn}5 zsbrJXEXU_SQf`A>!CD!dCINeCFt#nU6CeMF8Hrs*I+>Sp0&xydk?{T~gisw?eP|x; z&%*V2K<7Sy`WB!veR32|4tiEJEijc?H|BOwHk!0D*x0Rx{j!c!vf5Fak6FcXciAfX zUDnG<-m;7)*(WpN6>GAWmVj!GclgL4Z9XW!JUo(AMFxFsanSGswPjtC zOVUZ@sjb~s_6I>%--%4Q-d49pB~zdNH2vap2nDN_fn1@;1o5-}dfsZ6hF(}eXe-g9 zONz3kr?+>(m7AEHr97>@<-;Zv{K4&`uJ`InxqR@ZjVkMGUuKzlBf*LTA##CHyY`;R z&-1j%AOWjN;D#)#T0YmK>p(LPa-GS8n&Z_*p2S7ayg8oAO9UWTzUbVyMzX}Sk(oNC zsToe}cLJF>>@JGqge7u~sq2f=xyPUd@0!AT9l~kpDzTWJ^YEjfOSPkH$?*D~=UnUh zx#~!me_cidiF>NxYSrmKC}r`m+TL@D^@i?=239`JzeU&9VuMzTB2?P7^Rqhi9}7>* zFaBx@q-!vbE2lg08Vd`3i56#|%J{F2m~M%6ZxW8zrz)zHLs?_v9EJ2eJMU*8$mhu9 zL~W%LzCTeq%le6t498=A(0T?G?d0r|TjBBPb>odgDd+g-Zw42-z|D?pUOc9%JSN^AWLBMIfUq7TxMU zn~Ewrkz*iq#D~IH)ak&&b<(GI1*F=sesV+47mf_XoL{zE0^EQ> z@V&l9o2Z3r6&)o|_bomiJ?X68dA$<)y^(FdYiA98N31xf+a63C_vo39?g%$FVZOW~ z3Y{>q-Rnseq{8jmp9GeKWhc<|^)HTFI=u$3@$7I`cAE}(EWHziRcG;9c`}iTh<-o! zPFX5==4nL|g98BlQXrjv+BDqm$It~W=u`Od&C(hLe;V+1LzmtO>XCX0hZdd;j-Tzm zGibE~0R4D$01*N3@LAJt^d|n|1sBuL+*@JHdrPNxdTB)zhZp&6O1sJ^cXI>>&(N(+ z2jtXgS;;R?*QDRh(y~I?j6**HY)*etixzT#?bb{I-b!HqfUPyN9C53bw9+FUMX{*h z&*)U{f!7g;vmB6^!lRY2PLnE zpZ7hWJS5_OQ3Wmj{(&?4AAHJA@3gtR!NbGR0dDYeeB$p+`%@2Y!QEsKielx?feTEV zH>_`huYSn^(%gz57RD*giCm4?dLMm9M2BhONAfm*XV$tuksr&*acTFBi6?0B)sk88 zsDYIu0w2bmG1^LTQHmH6vK?3+O-Kvptj5q2aA!Ys|zg)lqnqDguOnj(!68 zk>@n+{}{hE@#eb%dCUWx{eTA^-Y|yjL$%@K^p9p_{T#P0T5mvzh;Z>Z7%6Hn~%O= z=sfVyUWfvPLirZ%2%ZtE9Z?Qbt_yv;aZ>Q)`Wzhknh!Wj)U-iU8@>ooUAuGoI(Y!7 zA07eFzmsTX_w=Y~6`3|$@WcNnE}F6sDlSiTQ`5u4kOSal(dc6@m?$tB|6uYk+fjQh zg=VS*5pI;3|+sFX|Fvxy1bYh)dF9pgEP*<-M!Oc{#Prz z5b=Y}ua1``U8LR1rlA)F9^P~2m^Fs4Bw^;By6W#niS9$8g*GRHb2s4AAGdzp(f`zQ zHv31olQ($ZK43##zod*QV3f807);IS6D$Zxu;4R)g z;T)i@r&b><|IrqwA3bHt$GLy9p+JVK_}F8wr(3yTB(hQ96JIiPM{he2$ws3i#OjG{ zmFBrG;qiNqF66d$^9Ni!qr|iq?G++&RaFLej_@D zXesF!?N^W!_|td1F*Gy}tUFXf7n?v!&fv6-4tH>7-=F)#=->OBf75NR;-im#oEOV_VQTML#_s_uIXI^#Mst6C>fsip5P%DBljCfPQ2xC5Q>cOR> zh0gruItDMF@rX3;0L4*gK8%45KfcsM0Ds=)m*lJhsGuR#m!o1Ndj=h3e>mOLhA(E6 zT%PQs@kiZzu=)5!@2T#kF!x_FxGse)j@B02!{ds;Boq-wLB>!7;3!apH*fgq&ZRJ` zhd!?d5IF;9(=-sH50ada5%rpVb||@KXCD)#H2qp+Q8`GCVk$bQN8bl$PSuSc2C9?z z-GJ@pWf$KooYsg4HeCGWm*-`L17j$9@I$Ad{{CPsp7C#nOKN1~I;ylMP)B9}sv9<} zy%=TOxjbhDsLXRj%>yySBuHPMS{-LIiB>4kRJuDuda zzM{)_Kl&%2n?H5i3_F7NuKgi=4~&KC*;0~JO^A4TXVTP7yQdA03diMtJlK0+8%F&p z|ESjpXFdsgpZ%6oL9d3;|5d0!+X1d$KMMnWKN!nAN*aFh4H(}1UbXG}zu&>_o9{I+nOdN`KeX!r+C2g8Sz zR%>-Kwu;c{QBFo6Wn>PN#p1bJ9z)r5!|`81NTqBh;OCT zT*exBQ%KD=YV9oW#eB`mQc~7*HZ31nK_)tFhcAC@Ycn0@7&H7aAyv5bW*4o|8FqJQ`W~HOj1I%mU~>aKn9b{1s1m=iu99D=X_(G#WcxPIE3aSrgVG5(Cc0%j+m z?|3=E2xCq#{QOe4Bix6T&>Hn4ggHML{|mjwpPL*5YO8|@LNu7Bg*X2_Oba*RKAZrI zhX3f_&rfHa9oZS^)$ok}>+_@iemHi@9h~4|X#UM`dDcZ39pT0s_anmHK#$?aO`c(R zIqcxR0>^;6T60ZP!kyjMVS`_6<6QyzO_&~TT)FQI3oyQ!HJ-^F59XRAHv+zjqt!V{8w?9~pF};E}j_QN?7(RxL9Qg2g z_ej2N91^|o&~AQibC+_!3BoEzxDV@LG<hw)v{XPu849{lA?<@Gk6Y_PvdkFsz;XBCL T?oWzT00000NkvXXu0mjfzf_^d From 7784a299741aa48e0284c3871f5710befb4f0d64 Mon Sep 17 00:00:00 2001 From: Florian Rival Date: Thu, 4 Sep 2025 11:15:43 +0200 Subject: [PATCH 3/5] Move JS into the extension --- .../parse-json-from-api.json | 146 ++++++++++++------ 1 file changed, 98 insertions(+), 48 deletions(-) diff --git a/examples/parse-json-from-api/parse-json-from-api.json b/examples/parse-json-from-api/parse-json-from-api.json index 43d5eec72..2f81858a0 100755 --- a/examples/parse-json-from-api/parse-json-from-api.json +++ b/examples/parse-json-from-api/parse-json-from-api.json @@ -625,7 +625,7 @@ }, { "type": { - "value": "JSONToVariableStructure" + "value": "JSONToVariableStructure2" }, "parameters": [ "PersonJson", @@ -659,7 +659,7 @@ "textG": 0, "textR": 0 }, - "comment": "This second version is the same, but using JavaScript \"fetch\" method to send a request. As it's asynchronous, you must use \"then()\" and \"catch()\" to do work once the request is finished." + "comment": "Second version: this is the same as the first one, but the variable, request and JSON conversion was moved into a custom action inside an extension.\nThis is useful to keep your events sheet very clean." }, { "type": "BuiltinCommonInstructions::Standard", @@ -669,54 +669,39 @@ "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" }, "parameters": [ - "RequestWithJS", + "RequestWithCustomAction", "" ] } ], - "actions": [], - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [] + "type": { + "value": "Montre" + }, + "parameters": [ + "LoadingText", + "" + ] }, { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const num = Math.floor(Math.random() * 61);", - "", - "runtimeScene.getObjects(\"LoadingText\")[0].hide(false);", + "type": { + "value": "MyExtensionForRequests::GetRandomPerson" + }, + "parameters": [ "", - "fetch(\"https://swapi.info/api/people/\" + num, {", - " method: \"GET\"", - "}).then((response) => {", - " return response.text();", - "}).then((result) => {", - " // The result can be converted from a JSON string (result) into a variable", - " // with `fromJSON`, which is a method available on variables:", - " runtimeScene.getVariables().get(\"Person\").fromJSON(result);", - "}).catch((error) => {", - " runtimeScene.getVariables().get(\"Error\").setString(error.message);", - "}).then(() => {", - " runtimeScene.getObjects(\"LoadingText\")[0].hide();", - "});" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false + "Person", + "Error", + "" + ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [] - } - ], - "variables": [ - { - "name": "num", - "type": "number", - "value": 0 + "type": { + "value": "Cache" + }, + "parameters": [ + "LoadingText" + ] } ] }, @@ -730,7 +715,7 @@ "textG": 0, "textR": 0 }, - "comment": "Third version: this is the same as the first one, but the variable, request and JSON conversion was moved into a custom action inside an action.\nThis is useful to keep your events sheet very clean." + "comment": "This third version is the same, but using JavaScript \"fetch\" method to send a request. This was also put into a custom action to make it simpler to read in the events sheet." }, { "type": "BuiltinCommonInstructions::Standard", @@ -740,7 +725,7 @@ "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" }, "parameters": [ - "RequestWithCustomAction", + "RequestWithJS", "" ] } @@ -757,7 +742,7 @@ }, { "type": { - "value": "MyExtensionForRequests::GetRandomPerson" + "value": "MyExtensionForRequests::GetRandomPersonJavaScript" }, "parameters": [ "", @@ -805,10 +790,11 @@ }, { "type": { - "value": "TextObject::String" + "value": "TextContainerCapability::TextContainerBehavior::SetValue" }, "parameters": [ "Information", + "Text", "=", "\"NAME: \" + Person.name + NewLine() + \"GENDER: \" + Person.gender + NewLine()" ] @@ -4204,13 +4190,13 @@ "author": "", "category": "", "extensionNamespace": "", - "fullName": "", + "fullName": "Example Extension for Requests", "gdevelopVersion": "", "helpPath": "", "iconUrl": "", "name": "MyExtensionForRequests", "previewIconUrl": "", - "shortDescription": "", + "shortDescription": "This is an example of an extension specially made for this game and containing actions doing network requests.", "version": "", "description": "", "tags": [], @@ -4284,7 +4270,7 @@ }, { "type": { - "value": "JSONToVariableStructure" + "value": "JSONToVariableStructure2" }, "parameters": [ "Response", @@ -4334,7 +4320,71 @@ "type": "variable" }, { - "description": "", + "description": "Variable in case of error", + "name": "ErrorVariable", + "type": "variable" + } + ], + "objectGroups": [] + }, + { + "async": true, + "fullName": "Request a random Star Wars person (JavaScript)", + "functionType": "Action", + "name": "GetRandomPersonJavaScript", + "sentence": "Send a request using JavaScript for a random Star Wars person and store it in _PARAM1_ (and error in _PARAM2_ if any)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "// Find the number of a random person to load.", + "const num = Math.floor(Math.random() * 61);", + "", + "// Wrap the code inside a \"async IIFE\" (see https://developer.mozilla.org/en-US/docs/Glossary/IIFE)", + "// to allow to use `await` in the JavaScript code.", + "(async () => {", + " try {", + " // Launch the request using JavaScript.", + " // Note that you could use `body` and other parameters.", + " // See https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch", + " const response = await fetch(\"https://swapi.info/api/people/\" + num, {", + " method: \"GET\"", + " });", + " const result = await response.text();", + "", + " // The variable to fill is the one passed as a parameter.", + " /** @type {gdjs.Variable} */", + " const resultVariable = eventsFunctionContext.getArgument(\"ResultVariable\");", + "", + " // The result can be converted from a JSON string (result) into a variable", + " // with `fromJSON`, which is a method available on variables.", + " resultVariable.fromJSON(result);", + " } catch (error) {", + " // The error variable to fill is also one passed as a parameter.", + " /** @type {gdjs.Variable} */", + " const errorVariable = eventsFunctionContext.getArgument(\"Error\");", + "", + " errorVariable.setString(error.message);", + " }", + " // Whatever the result (error or not), be sure to call ", + " // `resolve` on the task so the action is considered as finished.", + " eventsFunctionContext.task.resolve();", + "", + "})();" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Variable for result", + "name": "ResultVariable", + "type": "variable" + }, + { + "description": "Variable in case of error", "name": "ErrorVariable", "type": "variable" } From c57ff3c3754dcd045b4527910650f1e875d9c678 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 09:16:20 +0000 Subject: [PATCH 4/5] Optimised images with calibre/image-actions --- .../assets/Orange Bubble Button_Hovered.png | Bin 2069 -> 1826 bytes .../assets/Orange Bubble Button_Idle.png | Bin 2107 -> 1635 bytes .../assets/Orange Bubble Button_Pressed.png | Bin 1916 -> 1760 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/parse-json-from-api/assets/Orange Bubble Button_Hovered.png b/examples/parse-json-from-api/assets/Orange Bubble Button_Hovered.png index c66b0aace2b1e8696d3cfe2b68883ae580b9b475..78a91aaa26b3645e1c5eb000412739acab7e375c 100644 GIT binary patch delta 1811 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 diff --git a/examples/parse-json-from-api/assets/Orange Bubble Button_Idle.png b/examples/parse-json-from-api/assets/Orange Bubble Button_Idle.png index 93e1bedac7e4c124fb3b6b81425364b486f229f9..6cf150c5718093025788f5333fa916c974db7df5 100644 GIT binary patch delta 1598 zcmV-E2EqBe5aSGxBwIXCOjJcoX>tCjJpZve|LpDm?Ct-uK>w~k|LyMo?e72X?&*#P z{;NL!zij`vQvbC{|GHiK*s$=NCi~5m{o>SIh9?gI000VfQchC<|NsAG|NpV%Cz(zV z#gUyCe+9QmL_t(|+U;A5mZKmH9UMVB2p0PP|GFxHgqPa2y0hmPrphBBmk_LTntXlL z>Ctvw-+v#XzU#X7@%27U$`7iJVY~_A(S3iMy8RH^{`(Z_+kLA?^)EXpV}1^hF>0`{ zcOangpTi;55e)U*yAj^{ui@vjWV{_#jo_F6e{uB-4FI9r)Ng;zA!FCK0le?UhzL{T zaEO#*#FdOQLjPFNZ;9&+A0mYqY!w0M54+EXk5Ygz)DXD+S0(lKX`eG$djP@cA*iw+ zIQ@YMl{?)?2O#*ZEuDpyuHTTg7swvn2WNvecYp!SKUUQjwqom`jPu`I21fiKa)XZe zf4|t$?~E{p64l475QyU-$XV!;4S1pc4fV-3jO)e#5O4zo%kuzD(4zw~U|rXr*x;SQ z&<*;?0B!@!I8I#Srv9gmrmZ*fE`yuU5(B(k|8D&g7gE$nT6qs{0+`@|CqOxt{rZQJ zK2%v8(|8gd;Rw9K2Fzlc=08Rzn4k*=f3SNEVC^s-B^8^X4M$)yfSSr!)jcU!j^|i$ zCh%@J@4$2E(P|o<$QGY{<1)JZy;t(8Gr<$~p!Z(_MgfsMu%J2&0me6IEL4r(gC1O9 z>0nCD-@JC_gooI>8rC={8w=lxkHrOEumjHh2X#8>a1PqV1uX0Uymy=r!0mxuf1IH6 zPa&hg{U-n#iVAl{JFy-HRosY&byk8CH~@wJ-8jv=TiXiy#R2BV4~?Abg1j+rQv3C}_V zz=1T6NYkngH;tn@++rzRn#zloe*kC@(NW=~7G~8r6HyA+6pQFg@w*U;|<(8RT7 zYqDmw+7u@(0BA0y8^8@<7XX>{u;iY1)FiOVRscvCXQdffb!Hhl(oZyiOOiV*Amghn z8Afi|S-!mma#dQ=B{U^$xm1Q$)&YoS_tG*Fc}viih}gvH7KnH%;d^*Ce?M^YGKzzz zKydd-Xnv4Kt)SlZPam%w)FQ5flL-?m7A^4a-v^ot3%@OJTi}}b;AnB52#Rv9TK$a}vem%d^0vN+Ve!egIZ>kEaH479^UcMg5@aKCBqLKL_mch&D zv6hJ&%96(ho5=L|f6gD{0~lxshXfKbstMXF$Y{n6Es^sIa$mZW5Dtq^qRPBG=nVnz zK^Me=VLa?F6u%AA5hGzd7|3MgWn@So)8d6Ln(#9H%wP}=4Q6AP0f>Ux+VCtimm0wM za6S^z$(Wq1FkNP%*SQjE8A%vlCeNf~%E=gpwLX%NPPRdke=%85zL$VG3F(YYa0R77 ztuCzh=Q0GCYta`1o6px@2yAwt-Rc?y26GI0jP57F?dA&oF1WodhxeNc^rzwdae{+6 zU4Ne7kfeB=tiO=rktVsEc>XF$E_*c4%t`rvb~EepnuN#4o|MmzTVZ(Z%X=kBuj+G2ufy|=?Bn*# wwBN`7kof!yQonye@;j#gABEBP8|nXl0HDd9|0XR%T>t<807*qoM6N<$f>gv5SO5S3 delta 2080 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

    Z4j^& zPF>T*j|#j9%G)9aj1>aGY40x^6#ulbU$lA663GOVI;T$2Xk%PVo3hwC0V|LRJb#MH zzJ#ds5+v9~Dy6Ry$Pgf%N><@i;NyBh_2Nj-khs2V7$w4lt~XGIu~)iVQM(0ZZpja7;z^gYA_>%%mh)xd`z2N zjQ|4@qRG-3&SoShQ`X8@9t5WJ?|()Gj31j3BgpswF{qG%VH#NFg-X>INC5r(;#50Jq={HFlwTh zU-`(h8U*S!0?^AA=}nfyh(#eFBzY_t#I&YB4%+5JHnV+T1`c97 z-(GWY)?zy!Y-rs5GvGHg!hfb-y=MV>H#Ub7gzp84QbP7Y zO5QHTG(vC9@OScGxw{=Vx2p#^%?#WVqNsh6E9;OX^_w#P?C$^U?dy>z|LyMo?(hHX?fa-J z|LpDXmoN9AK=+y9D!p-A_lPwS2#{I5R#&zb+?(f!1G{JB~+GF9&Y000VfQchC< z|NsBBga6yzKli ztu&C3a|l%D+l4=W>ayM}7pv9RL$X>emYemT`(=H`{(73M7I%`^EWVyDi_PuutFM>H zYI86AVShZGzW+WT->1`lf4GOjT9SV_J_K!O9EHQ;%34_R@b^zceA*<0pTBI?AxbG&vB~^ zEdG<>k;1XeAg%w?vy*R@0|h^o-h~a0zuUe@I?Taxx&Zc!e@VdelQ3>aWMC#?VerX& z+~T!`66)4vD-NKIe=wL1R^lR?fJ1u!x-kkzRRy3-0hQEI^lfIkG{71dMmdcKnIxB&;9-#~;(2p9;KCnR?VJ{Fuhme-x~F22ui&KcXd-il}r` zd$Q@>b=X2G5xLYT1^jgwXMleES)!vslc3n31vo*IICNZ4EyD2}taJ%x!LumS7GtuE zt!Ms_FXR<10h$3TBb3rot&ZJ2B6F~gzr*{~5^j7b)rmj$*fi%uN|01mnfj+ye+I90T^H=7p1mGpO@4|@pFj4~X zHHZY#FL5-G8)}or%bh~?y)?7W1Q87Ih>$q}6>>Bh2T%_R43+$q3hgXAiwHkKW5<`N|ahY$)@+`g=0)R{0R95NI!V%MaGMGSgnVW*J_*M zf2Q-qFIGYcCzRVlH3N=g#ha0&qKpX9S)xuqPOL?CB?1a4h#|%Zl7^ts0{J`P2#k0z z=a18xlkrtE5aQSZKxTXb=7R{k2D+qrXqb8Q4Kg?hQCR~a2n=-#A*DOeO=|pb8zn9X zl=PB@=pIu48iC{x8VL_XLcn+u48wx~e?`56atsv$O|fTy=nafoDCSo_@+=35dWit^ zY9`@B79*HNVIVAdOc?moroaxm$>THumjIe{`VDuJFtA)9Fd0j6dLg9(9OfNWu4kYY zrnwztPJT?_3DW#;0^vj8L*PT;7ZUhRe-VY?%7#sHsyYhmIILq)a?UXaC-{OLG*(mCKhQb|7(+>PAeKS{IE75W%HIse z$r!laDuD&>;_=w6Bw@y8l2KrohxWXOWC5F4+#3Zpv20`;Pk1+hLnNRZncDZ^x3G~3 zwsO4`1cKSjwtV{>f9$->z{YN9eET~PH#DYQ&EMv$;2jB&EuFZlw|QRz zj8+0;E#84wF)0_raJi`qH%Dbiw%9rh9FOsFTQ8=-$8Z!>!w$~WxJ3n7 zYIkxXBSrMnjm;?q>1;tOAtCx;C9hA#Rb0>2^zY=~W^1?E+}>V^>1N<=e~`Agx!r8< zZ->{(t}Soxrvnbhmoq?od&*>qM?Czi#_#cn$7b%3i+crrGk3@(KW60JPIwQyXAYl_ z`BV>D{S^ukdv`|P#WFI9YHA{O7d=*!WhbU+;BGwo)ni7*qh4*q+fno#5!#tXBEv2_ zt|)m#pF8TMhu!e3U3>m@W)RpxqYJ)*n>NnL`HvqD;ZBEJj@$jW<9_lkJoB_?;mqZ7 zeZz^@!|RTGE`Rr-*ZkP;{_$hK$NP@`{(^(gzu@S1I(h%x!|%(Voxp#?@&A8GaU|{b SX%dM50000 Date: Thu, 4 Sep 2025 11:29:06 +0200 Subject: [PATCH 5/5] Add example of a POST request --- .../parse-json-from-api.json | 127 +++++++++++++++++- 1 file changed, 125 insertions(+), 2 deletions(-) diff --git a/examples/parse-json-from-api/parse-json-from-api.json b/examples/parse-json-from-api/parse-json-from-api.json index 2f81858a0..67dc64222 100755 --- a/examples/parse-json-from-api/parse-json-from-api.json +++ b/examples/parse-json-from-api/parse-json-from-api.json @@ -19,7 +19,7 @@ "sizeOnStartupMode": "", "templateSlug": "", "version": "1.0.0", - "name": "Parse JSON from API", + "name": "Network Requests to an API and using JSON", "description": "", "author": "gametemplates.itch.io", "windowWidth": 800, @@ -28,7 +28,35 @@ "maxFPS": 60, "minFPS": 10, "verticalSync": false, - "platformSpecificAssets": {}, + "platformSpecificAssets": { + "android-icon-144": "", + "android-icon-192": "", + "android-icon-36": "", + "android-icon-48": "", + "android-icon-72": "", + "android-icon-96": "", + "android-windowSplashScreenAnimatedIcon": "", + "desktop-icon-512": "", + "ios-icon-100": "", + "ios-icon-1024": "", + "ios-icon-114": "", + "ios-icon-120": "", + "ios-icon-144": "", + "ios-icon-152": "", + "ios-icon-167": "", + "ios-icon-180": "", + "ios-icon-20": "", + "ios-icon-29": "", + "ios-icon-40": "", + "ios-icon-50": "", + "ios-icon-57": "", + "ios-icon-58": "", + "ios-icon-60": "", + "ios-icon-72": "", + "ios-icon-76": "", + "ios-icon-80": "", + "ios-icon-87": "" + }, "loadingScreen": { "backgroundColor": 0, "backgroundFadeInDuration": 0.2, @@ -298,6 +326,22 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "keepRatio": true, + "layer": "", + "name": "NewText", + "persistentUuid": "a45272ab-d358-44b5-a33e-bedcfc207a9d", + "width": 0, + "x": 16, + "y": 11, + "zOrder": 9, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -521,6 +565,49 @@ "PressedLabelOffsetY": 2, "LabelText": "Request with custom action" } + }, + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "NewText", + "smoothed": true, + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "This is an example of doing network requests in a GDevelop game.", + "font": "", + "textAlignment": "left", + "characterSize": 20, + "color": { + "b": 255, + "g": 255, + "r": 255 + }, + "content": { + "bold": false, + "isOutlineEnabled": false, + "isShadowEnabled": false, + "italic": false, + "outlineColor": "255;255;255", + "outlineThickness": 2, + "shadowAngle": 90, + "shadowBlurRadius": 2, + "shadowColor": "0;0;0", + "shadowDistance": 4, + "shadowOpacity": 127, + "smoothed": true, + "underlined": false, + "text": "This is an example of doing network requests in a GDevelop game.", + "font": "", + "textAlignment": "left", + "verticalTextAlignment": "top", + "characterSize": 20, + "lineHeight": 0, + "color": "255;255;255" + } } ], "objectsFolderStructure": { @@ -546,6 +633,9 @@ }, { "objectName": "LoadingText" + }, + { + "objectName": "NewText" } ] }, @@ -649,6 +739,39 @@ } ] }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Side note: this disabled action shows an example of sending another type of request (\"POST\") using the content of a variable that is converted to JSON" + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "await": true, + "value": "SendAsyncRequest" + }, + "parameters": [ + "\"https://api.restful-api.dev/objects\"", + "ToJSON(Person)", + "\"POST\"", + "\"application/json\"", + "ResultVariable", + "ErrorVariable" + ] + } + ] + }, { "type": "BuiltinCommonInstructions::Comment", "color": {