From f329ecff4e2e1fa7be01105d917ddefbad28e3ac Mon Sep 17 00:00:00 2001 From: Mateo Miccino Date: Mon, 19 Feb 2024 08:24:16 -0300 Subject: [PATCH] feat: emote wheel editor (#271) * wip * wip * feat: emote editor working * apply feedback --- godot/.godot/global_script_class_cache.cfg | 18 ++ ....svg-7073de1c070b028b73065889b028e0de.ctex | Bin 0 -> 4344 bytes ...k.svg-7073de1c070b028b73065889b028e0de.md5 | 3 + ...-f02f121f4817604db9dfb97bcd3c29aa.fontdata | Bin 174944 -> 174943 bytes ...d.ttf-f02f121f4817604db9dfb97bcd3c29aa.md5 | 2 +- ....svg-e1742c7495accc578c8dc4c15bc4e4d5.ctex | Bin 0 -> 2442 bytes ...s.svg-e1742c7495accc578c8dc4c15bc4e4d5.md5 | 3 + godot/assets/ui/EmoteWheelDeck.svg | 12 + godot/assets/ui/EmoteWheelDeck.svg.import | 37 +++ godot/assets/ui/outfits.svg | 4 + godot/assets/ui/outfits.svg.import | 37 +++ .../avatar/avatar.tscn | 100 +++---- godot/src/test/avatar/emote_editor_test.gd | 22 ++ godot/src/test/avatar/emote_editor_test.tscn | 39 +++ godot/src/ui/components/auth/lobby.gd | 2 +- godot/src/ui/components/auth/lobby.tscn | 1 + .../components/backpack/avatar_preview.tscn | 3 +- godot/src/ui/components/backpack/backpack.gd | 31 ++- .../src/ui/components/backpack/backpack.tscn | 254 ++++++++++++------ .../ui/components/debug_panel/debug_panel.gd | 3 + .../components/emote_editor/emote_editor.gd | 78 ++++++ .../components/emote_editor/emote_editor.tscn | 118 ++++++++ .../emote_editor/emote_editor_item.gd | 31 +++ .../emote_editor/emote_editor_item.tscn | 96 +++++++ .../{emote_wheel_item.gd => emote_item_ui.gd} | 69 +++-- .../components/emotes/emote_square_item.tscn | 176 ++++++++++++ godot/src/ui/components/emotes/emote_wheel.gd | 50 +--- .../src/ui/components/emotes/emote_wheel.tscn | 10 - .../components/emotes/emote_wheel_item.tscn | 7 +- godot/src/ui/components/emotes/emotes.gd | 19 ++ 30 files changed, 1010 insertions(+), 215 deletions(-) create mode 100644 godot/.godot/imported/EmoteWheelDeck.svg-7073de1c070b028b73065889b028e0de.ctex create mode 100644 godot/.godot/imported/EmoteWheelDeck.svg-7073de1c070b028b73065889b028e0de.md5 create mode 100644 godot/.godot/imported/outfits.svg-e1742c7495accc578c8dc4c15bc4e4d5.ctex create mode 100644 godot/.godot/imported/outfits.svg-e1742c7495accc578c8dc4c15bc4e4d5.md5 create mode 100644 godot/assets/ui/EmoteWheelDeck.svg create mode 100644 godot/assets/ui/EmoteWheelDeck.svg.import create mode 100644 godot/assets/ui/outfits.svg create mode 100644 godot/assets/ui/outfits.svg.import create mode 100644 godot/src/test/avatar/emote_editor_test.gd create mode 100644 godot/src/test/avatar/emote_editor_test.tscn create mode 100644 godot/src/ui/components/emote_editor/emote_editor.gd create mode 100644 godot/src/ui/components/emote_editor/emote_editor.tscn create mode 100644 godot/src/ui/components/emote_editor/emote_editor_item.gd create mode 100644 godot/src/ui/components/emote_editor/emote_editor_item.tscn rename godot/src/ui/components/emotes/{emote_wheel_item.gd => emote_item_ui.gd} (56%) create mode 100644 godot/src/ui/components/emotes/emote_square_item.tscn create mode 100644 godot/src/ui/components/emotes/emotes.gd diff --git a/godot/.godot/global_script_class_cache.cfg b/godot/.godot/global_script_class_cache.cfg index 130a6a6f..f1c67e3e 100644 --- a/godot/.godot/global_script_class_cache.cfg +++ b/godot/.godot/global_script_class_cache.cfg @@ -83,6 +83,18 @@ list=Array[Dictionary]([{ "language": &"GDScript", "path": "res://src/ui/components/discover/discover.gd" }, { +"base": &"BaseButton", +"class": &"EmoteEditorItem", +"icon": "", +"language": &"GDScript", +"path": "res://src/ui/components/emote_editor/emote_editor_item.gd" +}, { +"base": &"BaseButton", +"class": &"EmoteItemUi", +"icon": "", +"language": &"GDScript", +"path": "res://src/ui/components/emotes/emote_item_ui.gd" +}, { "base": &"Control", "class": &"EmoteWheelItem", "icon": "", @@ -90,6 +102,12 @@ list=Array[Dictionary]([{ "path": "res://src/ui/components/emotes/emote_wheel_item.gd" }, { "base": &"RefCounted", +"class": &"Emotes", +"icon": "", +"language": &"GDScript", +"path": "res://src/ui/components/emotes/emotes.gd" +}, { +"base": &"RefCounted", "class": &"Erc20", "icon": "", "language": &"GDScript", diff --git a/godot/.godot/imported/EmoteWheelDeck.svg-7073de1c070b028b73065889b028e0de.ctex b/godot/.godot/imported/EmoteWheelDeck.svg-7073de1c070b028b73065889b028e0de.ctex new file mode 100644 index 0000000000000000000000000000000000000000..6935b59a749e5f3807aea09910c4673bd6653fa7 GIT binary patch literal 4344 zcmV1I^K zViw$40y_B+;d$Hk^9{FcTR-1#&=f)2piP=osZ*vgzUOatF6a0hTO->e+nV`2{{WvO z+qP|7W+1q2BT1r@o!V=*x~HeQ_6ztgB;ic@y{0+5y`1?o?al-dn zdvR~Zxw;xVnT^KnsAc7ElZ)tGcsJUqdQPg*K)G+M=i|(uVAGsMOp~#bCDFaYF#5O# z{23Y|Zk?=(OT+VieEdN+ebA1bEW_dO+`TT?#WnFTFJmrj6l=Z??aS*JT>6dvzW?UW zf1diuXL%sg`aHt_;l&yM!!M@+z%qNzn%FegBv0a1S%~e659SAX zF~m0yVb1;_rH7nk{b*bg|I^ZEFA#NPzL&@&jIc%jaX9_wMdrhn`%NxI51TCuDl}qzjwQGU|=@Uo*e?D=+-Nexo;1 z-+dsb(6vlE8_tD>N{8g1o_|}*aEdXG{W~uv;=g{L@JZVP3aQ@VU1xG}GNKb9?W9lt z(#%(3=K@nN=Hl=9!55>O4`VIvuFrm@;ZL!d`{Uy#a#64Cn*r>4_T~y2D@cBH@b?$+!awHd?3<8WM>zJJ6lkUl277J= zIvB#a7fa&5I>~(tsaj~qwR6JWKt$aID3AXVd|tSQ7yj?h!*0?cS445)q(&2^Fob5E z21F<8@t3_=mCsXd(M?E2itBY-HByYKG*V7R{^v4YFuH|QN-elbHByxQ^UuFp4fA%U zoQP!3d$Eq+_xsK2TP`B5oh%4jX>{i5uApIDb9x-mpyG9xTyWm2&bvhU-xdwFw=zpj zBfSzw{=+){-p_5`QbmXhCo4oJ^qe*uWvRy%H*v)Y4Huo3fWvU@TH3*GHchTH7r$#A z|BJ)VrMmb-)gM+6k<=R?AONr=7qX#{LdXBPj6Y#Nmx?_nYcL}K$UVZe217oNU*_}t zpWnGQXT2Lv7U4e6bVknL;=hi3@A5GBcPcGkqe>~VWovd;k9(r(QFrUjdbMf;+ z|8>Pqf(zgVw_pYJSJC81Cl^`O_VMAh&(r<;D*vuGfS;qXsx|BX19U&=GtPaU?7x@z zrySrOXfC3W@|!b@KiDaUir?=4pXcvT$4$cC8XPMnqt#!^0OQu5ndL9Bi7bThW2~=0 z-z7j&VSRF+arAkr|7(gr?mWi)nkZ;g*V@DYF!;$}`~!6S^$DL3IA>RWTGFE;vm#9? zH_b3djQQEqIqR2y<@bKlA9h(0DAHt?8u8Ec8<%D!y4Nx=?hAe_EjWIt|LvOJ;@Cbu zvd~2_?$YZ;i|`YhGg?-+pq(ie+@d~mn{n-5T=7dB%&v;)VxeO{#&|TF-`Yp z8_pCJCQhz!MSuu?p!Y$PjjIWoQ`zlO$!%)5w7tsg^Q6zC89D=;m3O(s9Dh4vZ{&+_ z)o`l$TdR2g2xK+|^?BipYL%vyQRXr!)sILf1G~eJ9!fvNL{V%A!yyU{& z1Kso3eI}XnUkES zJT;o;Urp1?S0dFN^9@CYvwN35I+UG7psGQiW!$nw7+3SIY5w^~IW7~8y$%d@-!#Qt zzUEpwEb&hZ?QGm8XoG;}^!9f4KY&+{ecH6Wp-6E1;B-mW}g zC_NgKFeIvZN#}=)?~~Q|-FQdI+uLc#6KLq96smOxXQyVXK4n7h^t4Z+evP^cQu5LV z$KK?8xgr0o#-Zmpta0KJie40HG<~mlZ@=Mbj@2Sg%U+ejjM;vg5Ta9~sbUnvRe{Ee zA0_m}O7Vemk<+Cav-LDh(@ttQFQQh$KAx1&^t7yIC7LO9+DzlTgp+#Vz6C&#<0odA8yv zvfOo?0avJUTaCW+XYNbGd#LNsv~_I#;s=G|5=C&HVZxL z;T6u(hQ?0j!YR>Y?F#Vd4?SAe%*kxno7|$#dwfEK!UjikEn`hy&fpJ-mz@+sW7T<+ zKLYg%_DdRw{4qGL*ju}vi8nw9;VXN-&=c1cR525|WSN4OUd30HO^QU1COsNdP@FpB zk}6Sf=2duAX>rUIea+J(8B!)biB@?@d5Fu_0GksN_D)hun z1sAisAr~t%ZKqAo6YX}QpjpLnaOjz_w<$tFJsg!L%hpqIQNjk! zOrcs5*C9O3;iQb_CC(UTL$<_;vv?$SoK(=SY|b?(q4hk6gD9w1!XXObq(mb{X#swg zg9}bdC{|Fd&6nyE9fu{FD3StFnw4-zKnOveBlN^w38yH9^V)-p;aQ|dvl7ZRlxyN9 zLJ+}|6xTb=N!1W*S}Sk#eptAy;1b1fTBCb~bVGR()_=IKVWY+gwZ|b89yBGcz8Ms0 zQlq|t91f2HqINcoHcFbF)-FD{aCn-g1!@c@u~OG^MaTZrGz~yZOVg<(JA|t8t?M{^ zgts$ja;MEUZRX!m0cy}gp@w}tBNs4)WiGzam}r3z;@@i-C)A_w{Xs1)*F) zkMMxaT&k?O6e3X3;Od!=?3%X~fqr3Y%gQr0rQJLGZgA3$Xp!mUVm^Q(b~MSDvk9zO z9;i>#NO`&acXJUqNQcR+wOcIXC7xGBrP))zi%xzOS0I{wh)ZQeq}yyZ_Z_E-IIhMc zRZpwqWH3a*Ip-XQko@f1n$w67q}PRW5_cQ}5y$n_!7`&x`1T))m{}NV1p?PIJ0Y!| zM<;?yHysnv`EtC`iL~H{z}k21M6m!EW}e9HNUjKR{(Uh}2|)N}-JogO$rqZws!fwl zm!yernQfCM+pH-JEjJqyapq(q>=A_@9b(hdvP>_ zoSsOzX!e<4IVz0oyqC&~zbQ<}Z9>Rlg| zdRk8X^RJ%HAvMjMRHB};KU&X1kFzxP=DV)!@Ylj-BLa|P@O6VkIgfWezkZMwwPPp6 zsHgPLIsm)3x29>vdzA>Qj3y4Nowk%9lOGSYqOOy2IQm_mawQw6pvlx>X{gdqA76$# zqGMNcCv}=A`o*pCo42=Al$cJx_sRTl{E|y~-8)$lubLTtk-_l5vZj_HsUCM;qBFnw1PF6Yg z4?RDX&ImhB7DPR&gx*zeXTF^TA_l8yc%<(@C@^1hh;b9SYVVpL6TGsj8EaW?LA_N6 zsi~H~v|VS4oY-9TL*yayYi8z*lVwp?(Qsx8?206m*3g{wG|%7j`Z`W1k8kA(mO1?{ zy&K0K2h_>t(*ZyfYrX{4@r3`HR~Bl=P17`xT+X`S4R5&M6=xkgcFJjIob@W})b>_u z$CXCI{5T;_muKjS%N1zg77-Cenytgt#ax9|&Wl&RQinkl7hn(faOgP>*5L$WsifJ0 z+tAzFDMH+q?M>Xs5yjOqv@k@=^-D)HWzW6VieF|Ys@wntjTbo9Mr=D-5w->Z^=WaZB{|(D#hk3-^0O3Sn<*KCiXUOJdUS)V+I`-!5L| zdIF^jUU9N4E{^YH5p({$M`+egl?6iR?p~1G4G5Gq___sCBp5<wo>>l2a>P7zz`P5rBI=s6D8p$lN_5X?-PT;UO;s~1UO+l-qF8WQ6oT(6_aa69aM z>4Dj7g7chb>S;x;FkXil0XgBy69=0PaE?RuH0Fw?Vv$_Zqv<+v6~f%5`$Si3j`aEg zwtzojbm^)>Ph2d+8UC1DJP!s@Ttu_ukob=R3;wKiy`7|I7mjV~W%O literal 0 HcmV?d00001 diff --git a/godot/.godot/imported/EmoteWheelDeck.svg-7073de1c070b028b73065889b028e0de.md5 b/godot/.godot/imported/EmoteWheelDeck.svg-7073de1c070b028b73065889b028e0de.md5 new file mode 100644 index 00000000..61702de5 --- /dev/null +++ b/godot/.godot/imported/EmoteWheelDeck.svg-7073de1c070b028b73065889b028e0de.md5 @@ -0,0 +1,3 @@ +source_md5="054963e6df61332c34fc042a31b51df7" +dest_md5="4061ce937f6ab1d17a2d6a283737ac53" + diff --git a/godot/.godot/imported/Inter-Bold.ttf-f02f121f4817604db9dfb97bcd3c29aa.fontdata b/godot/.godot/imported/Inter-Bold.ttf-f02f121f4817604db9dfb97bcd3c29aa.fontdata index 625ba2133e65a799945d80d660965faff0760fce..b476802d7a55144c66e91db976d7f4155a45a962 100644 GIT binary patch delta 1824 zcmV+*2jBSM)(YR&3K3FMLqh@p0000G001)C1OOhf5k3KbrAPoOmiQb?FdlN!7$d`_ zZ_G!##ju=v2Ar=v+CvWct;q3VM^fo0GC2%HT3b`qqD3QX5IxuL;OO%Rmna$34AK+U z>d6{>@wpF#$X;UiCNc%n0lopV0Y5?jZ<2T)4A#KEWgiBw%oCUQ!B8+@`^gg9c0eE` z&r2%yRQG9rqW6U4`#eW>F(mNN2hEeUl72G#RMfEJPLl;qOj~|B`$%CMCJG!eVTsD} zZD@I>m=g_66XIapq)X z+H7P!g<#90i9^e3vzHipwNdEsbH!#(vM=g$g&^x|c`pDKztIapS8XN59rH5#>$PtTLD+1B@@6lV>>EWXk@aO3ixK^S0mYNy0v3Nypva1SVd%kH;249F z{Y=6cID+Dg#)^GWAk7J?$gtM<)kfG8_0&8G*3nY zWvp-XYG3$0{Y3Ug&n0$gc}}sI_xgMOWL_xbFZ@~}Yc{fCUTYR(eXSbQO#Ev9k)MF4 ze)$&zmBw(U^mjVH>fiqP0k@fL=Dx*LGj}Ye6?2zj0x|b8bIjadm@dp+g&CVWm&r7D z52ls5V=$NIUS%fD9cd!Xy_2v5B!8Jl?s%jda%V%bA$K~Gj@;+SIdYdH;mBPKd4=4o zkW|QB3OPpZF-R%7L&;I@C&(*u&p=j@JCdBU?Q*s-w*8Ck&9=MQy4ZFuHa6R?W(#85 z&unM5z03x~wu{+X+wN^3YF4%SpwmiGz****r&@ z@tffaplY@R=={}eN$^a)+q--|^d7Wh7!!ZUjx&^v@N++e0E9w5IyPayM?saONx_^^V$Eb2Q)lJ>G zs9aPzo64r{YwDW1XHm1LI~8?`x+_uB)cuHRMBRs|J5+g?8m8_nR2HfnOa)VSsVY_F zQ8lXWwOXrtm&&E?ullO;EtOSwEmcdEmrzNlax4`~-8HBh)P1Qc)jg>q)%}6`K;5U* zDRn=pQ0k6AJ)rJPDu0u@8`V|ak<byCg{EdRf6tG&?M-7hMu8&8A^ukK2RU%&I9Fv?m5sJ=zl%~oq_H$P#NehhO$6+ z7G=@B1bPA8o6sh7H=>p9M{q@Oaxq*OPM!h>hTEk$DNY{6ec|?y3%R`u*M-|*9E{sv z+y~rlg|ou#R5&W!{)BtN?FVoNaJvy_#O*;`5Vymjfe7GZ74I zaRi~9mhCMLo;0hyq6Qbg5X+S>&%SbOaL-Gt<}}o^U9V(I;dpEdehq@J{ucLc4dvS3 zv}tGgTTO%VsB~?pX^XFheR=iLEAVmJ-WTk>TI%oGvwz3Mq5K{DiRn9p$3v!YaM(@b zu%8CMat-RIzdw)-HMr~V4Zvl8Gr5jE8)@&_<55>>4IbNjJcCzvxwUs}q$PXgo{e_N zt5=J(&;xAKL@U`OTvl??n1dF8%t%H8#Xkq2#Xlc;vyhFX@sWw}xaT5(yyT&x9U6cr zOSF*E)_;j`ussKfus;uRt&)X=Spx=2vqk@`7n{I7%f~8k&la#XxmzpSlk0lfgr+-Y z3z}Opo6xFFvmtqI7n{;@dt?M}nQzY9 zG<~Ut=D?^LSoMTz=-Gt|f#n^l`i4i<^Kv>&El8UJ|E@=uN4MYU?&$V8x;eVtPS-{! zU!zl_lcUj<(aFQ;!07fZIxRZ6n(m5jH`AHv_8z((x?P6Og>FZoL!pyLbrf{_1f7GE O2#1ph0k@L~0?neYzL5t2 delta 1825 zcmV++2j2MK)(YU(3K3FMLqh@p0000G001)C1OOkg5k3Kbtw;bWmi!z`FdlN!7$Y~( zHRhw;Vpz^S1I||-?IDN!R^<4wBdPQgnH&Zpt*xp3qD3Q{>CcrXNdNuACCW}J2I&cF z^<)jc_}m9VWG}IM6PW_k0lxvV0WU%TaFTc*3`XVWvj2i-=84PuU?&)`{X~iFIvx<> z$4e^aRQG9rqUVI*l6?@g0b4?3ZYg>pKJ7v6gZ+11xAyKIeoI(IL^8l znKm0)P9fOxXyVYa+UzBUUTqXQ{9LhF7ugr}xk8ZjwY(Pqi{I#lpsO~UwOAfl^S&G@ zaFdk+E*<+a`|GuD3_;jzgz{!Dmh2lvDUk(c7K;)6g#ksA-~twZPN2w&ePQUqTHqLi zlKo7=890LCjK+$6Q6Q}gRFPq=@vDt6C-4LF^B0pE#ouQPXHFp~dSJ{0$I$zM7HOW0 z2Fh69=+(aPbNY$wjh;(pf$Y1!iMAmF%#k|%m#`;<{sG0cH{v$sD zPyO;Q1}cr=OzH1Be$~JI^8>q?ZsxAVTr>A8W)*XfV*W69Gn35RU6?J*J%t&YyO+r{ z_YUTjxnD4s=5A#s%^hhX&7G6410;XxhurhXHsrpBTtn`4WF5KFk#yufN5+wR7}5&4 zQz562dlZt4++mPXa)*+m+)a>J4_RwYJ^cKG^oA?aH=auvxI}6>NU&o@e>kU5}l!yBSNw?m~a8ncaQZ z8FnYLMs_cP@KAqa%Jb;F6ydOk6nR)k@*xP4re{~tY5&~AdUQjcnpzvC z6E93{6|@EpM*C_sAY30p6klT?%@LzGquEiviF-PrOlkEO?Q{FnLyPicV>tPs2ENIM z89F#lK559$S#n1MQKJmj_@;CKO z-M6S)RC$})rtWMio4R9Bv8ekLRf@VNQPtGlh+0J5g{V4IxtJ=Z?km(4sys{$Q+KH< zRpn7Ns_wN~tNT;+QukMVRXLZ+s{59@rOHXDBUE{onx*a;)C}srRF&$URFUfLKy{$* zQ|gquA5|!IN1z^1cP4+8N!^X=s_sZ?099_J8mT)`C93;S9jZG}1**GG^{Mh%XWa#% zf>3!MG!NbJ&^qWo2c3h;QwtwP1U}srsjW+XVNkEI3^r(cVoIS_dD~>+}D_O=AOosGxs?2&D>`ZyM*CTt7l>u z*y0F6by>EzIC#>m_KF%@{K70)z&snvvBAABty-6%p6z-iTMEZxSMX~PeD$}ucWWru z{-#Y^%in4mlt-m&Lrq(JH4MzFmtKL7)AqJt@6}R&*PeepE)M1I*iKB}AUqy2g@eOx z8i(yPIF@TrJN@l}Y^cFqe`^3P`g2qQCy5pXU0P>QDigsuK z6j-8#l(v6PWP|NFD1`lah-;NBM9dm6keV&}XS>)0_SrpF$~{}a*5q!lY)`KHWfPh% znJs8;%WOicR?UXwxm;{Y%k7a6yls*!dY6kN`W5;j7g&fIxmutfICHfR9dmWpqpDXS zRnzpP8k!5EqO!^f)zFg*6#`2;RP`;7s^{f$m|I9TDgT~Fhex;L>FnrsIXXGI{Z7Y5 zCs(6Oqm!S}kqV>2@AE9=bh-u7z$tp*x|IM|Bf)y98Z> Pk_d;A2m!Z}2m;NbV4aT> diff --git a/godot/.godot/imported/Inter-Bold.ttf-f02f121f4817604db9dfb97bcd3c29aa.md5 b/godot/.godot/imported/Inter-Bold.ttf-f02f121f4817604db9dfb97bcd3c29aa.md5 index a60f730f..bdd317df 100644 --- a/godot/.godot/imported/Inter-Bold.ttf-f02f121f4817604db9dfb97bcd3c29aa.md5 +++ b/godot/.godot/imported/Inter-Bold.ttf-f02f121f4817604db9dfb97bcd3c29aa.md5 @@ -1,3 +1,3 @@ source_md5="ba74cc325d5f67d0efbeda51616352db" -dest_md5="2582bc560c5770df517107f38a3f0fea" +dest_md5="0dce7bf598ee74790e756e09b3dc2b54" diff --git a/godot/.godot/imported/outfits.svg-e1742c7495accc578c8dc4c15bc4e4d5.ctex b/godot/.godot/imported/outfits.svg-e1742c7495accc578c8dc4c15bc4e4d5.ctex new file mode 100644 index 0000000000000000000000000000000000000000..cc5b89c8e47a1240b4e8dc20bd1110b484e2c7ff GIT binary patch literal 2442 zcmYjS3pf*MA0KA6+%|HCIrEturLwd_?q*1Gor%gN93z)PBT2+$ls>mGb4i-ZC@ALki|MR~8=l8eAdmNMi0090!0su&s z7m0^>`@bP6X8z&{5~H*@LVy5(yMvvbzZg&0VqHC5jgRBS9PQTuho)(?<^UZwMCEGW zN=98+!ke}j)NZTX@Zpvv0e^0!CF1{U<%!|I9Hb^miUSI(pY(WK!N{A(;?2@MT$T4b2`nVAmq7vGJA78tc^M=iAwL~niXJi{r&`IDQwlN5>p$?xX*KcY|1upBdA#Z z1j|Ve`ZW1chCsN`X4Z~*HCNT`NHeQ;XVxBjEsuygj60s42p7}CRL2?ef9z@%Ntz_4>E^r^J_yhm6CAbm%o3k4J;7F;qzCLW_W3z}VmU$?D z(&!h>42GU9^Z5bg#<{0W8>Bk`O80A;*-n^&lS(pU+=vra8 zu{wlvQ{nXg7S5VAV_vvrhE8aG*P&MUeffrA{MXc|zPIbbUFpMZ=T+YB-t?Jo?p7VQ8mqbyUR`0yWmM02!t1w;~;z z`BX?d8S`M8Qln>bE9To6^h=q%^9LuhRCejT6Om^JqFy{dxwqwpXAcG^aqL(kYT3bAOLl9J48l;CS=vqCAY<8)_{3 zugPe#h*u>6kJVdoG}pw1^i*uMqbB4D6ebGwTbtihm33k4Nk**eOccXFW@9pw(wiTr z0^{@-oj%0NbauH%yOad2C{Fx-$#z!)U5RNI>sGjW&F8IJt$htk2Byb(>vE#&AtRHa zA9&OkL9!uMv|of)l=vhjRbtQ;yqNf~zWt?H8+>cBd#s?}bhSC?RD5XP=hD25C2Mj( z%a`YfIiVxc3?CCWQ_+3}T9N&EoOc&2Sj=eKG__>TEYrZ!tL0Nv%0X*|EL2)& z+iTv4MElqZ-c)ZDOmjlkZ6LcPbfo7Q@jpKE{j(_H$+`bp&MD&Y4q<9c($Qc^i8m!` zAy~)4DAi3g#x%1SwLd#1F!##)3nfO^|kZXeU%>vsd!?ul2mVsj zx5xuw*DCfD*YZQjf+VTDaZcIl+M`e^)kENnH9oaby3d_TWp}a30t-Q14!IYYzxHnd znm%sc=k-Aoo7Ho~oo^2=KbF2r>b!!MZ&Aq|NCIB_u0c$FDR)E$taZ91u=r^?89MPS z?BcNr0vWnBz4o5QR?BULP0Y2t*PzMD-iis9PrM4XSemy(HiLfdY~@w9p6i3v4QX9= zLS7nr;g_pfA1NcyiJyB+J0y`E_o&`^b4hLej-s*rklFQYZ>ITWY~*@+Gk*qY(WXUC zr)GpLpdcQ@o$0)Sq$30OdpyqQE{;Q=PWDLvrj#6-<~_%>TZMnvu4Lz{xd!iD9ECo` z_sIZ*B)fAF@#&*WnuTvR%!f|JGDTtc|`bU(3#-*7khpmc%my%JQsE2Gx4A@q*@O{v@R5l>=L)X z?F!Qn~JaLmDbgHq71SAUtB)wEFmyDG+u(V#IJ|eq3(vc1i6PSvXJKZR#H$ zR4#HkGs4+1+TxZQc+F2k$kif$WB_9hhqG>~rHw-Z65GxVrT2#G=Yoc53!U>^rkT(= z1)`t;;*LS|tKac4oj!ft@rV;&W(_}gPL?$EOa)?^O&><9*9$|q=lc-LS+kK$`x&E~ zp*HOTo7J$R@TaTkeKl9gDO>w_jp0PftQ#g#b&M{@U)j?0W@F@JfOJzV&gCQ~?Tjm5 z9yU_s0@k#5c5O1peXS&>*rEbPWY^XUuP4E${bV+6+EzF2K_1UP zT1WlR7UNP{-p?9xg-9VwCSTn7x8Lc882^5!WHCp}c1S|gQd_cs8J06`k69ugIhb=@ z#HoVKRZ+T1i1?2;cMOKK0JB~IoTHrvHI!i2UPDx${91B7Kml}E!6ve)sV7uUhbc>H zrnu1_mg!Jy|5*NGhK_r%*FL`t-ltC5IU*LQjwFkPQ z2OY2-5Wr zmrSwRBRdBE__pq5iDS@9H-YydbsGHGI22&ze)*w*{D%T;TR|L98CTK9&=cdUl-VQz;4k(; BY)JqB literal 0 HcmV?d00001 diff --git a/godot/.godot/imported/outfits.svg-e1742c7495accc578c8dc4c15bc4e4d5.md5 b/godot/.godot/imported/outfits.svg-e1742c7495accc578c8dc4c15bc4e4d5.md5 new file mode 100644 index 00000000..52e6d735 --- /dev/null +++ b/godot/.godot/imported/outfits.svg-e1742c7495accc578c8dc4c15bc4e4d5.md5 @@ -0,0 +1,3 @@ +source_md5="34131c0417fe7ca9fe237e71db08aa04" +dest_md5="b0fd2a4e8659448f0cd98ddeac84ff81" + diff --git a/godot/assets/ui/EmoteWheelDeck.svg b/godot/assets/ui/EmoteWheelDeck.svg new file mode 100644 index 00000000..360970a1 --- /dev/null +++ b/godot/assets/ui/EmoteWheelDeck.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/godot/assets/ui/EmoteWheelDeck.svg.import b/godot/assets/ui/EmoteWheelDeck.svg.import new file mode 100644 index 00000000..9db5e409 --- /dev/null +++ b/godot/assets/ui/EmoteWheelDeck.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cv6fjk334oiu4" +path="res://.godot/imported/EmoteWheelDeck.svg-7073de1c070b028b73065889b028e0de.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/ui/EmoteWheelDeck.svg" +dest_files=["res://.godot/imported/EmoteWheelDeck.svg-7073de1c070b028b73065889b028e0de.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/godot/assets/ui/outfits.svg b/godot/assets/ui/outfits.svg new file mode 100644 index 00000000..625c1da1 --- /dev/null +++ b/godot/assets/ui/outfits.svg @@ -0,0 +1,4 @@ + + + + diff --git a/godot/assets/ui/outfits.svg.import b/godot/assets/ui/outfits.svg.import new file mode 100644 index 00000000..41e13b03 --- /dev/null +++ b/godot/assets/ui/outfits.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b6ydwqk4yhhcb" +path="res://.godot/imported/outfits.svg-e1742c7495accc578c8dc4c15bc4e4d5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/ui/outfits.svg" +dest_files=["res://.godot/imported/outfits.svg-e1742c7495accc578c8dc4c15bc4e4d5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=4.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/godot/src/decentraland_components/avatar/avatar.tscn b/godot/src/decentraland_components/avatar/avatar.tscn index b93cf73a..7126abcc 100644 --- a/godot/src/decentraland_components/avatar/avatar.tscn +++ b/godot/src/decentraland_components/avatar/avatar.tscn @@ -354,29 +354,29 @@ bones/0/name = "Avatar_Hips" bones/0/parent = -1 bones/0/rest = Transform3D(-1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -100) bones/0/enabled = true -bones/0/position = Vector3(0.0306262, -0.908086, -99.2148) -bones/0/rotation = Quaternion(-0.0237837, 0.65922, 0.751198, -0.0237837) +bones/0/position = Vector3(0.0327783, -0.971656, -99.3002) +bones/0/rotation = Quaternion(-0.0237823, 0.655795, 0.75419, -0.0237824) bones/0/scale = Vector3(1, 1, 1) bones/1/name = "Avatar_LeftUpLeg" bones/1/parent = 0 bones/1/rest = Transform3D(1, -1.11022e-16, -1.50996e-07, -3.39028e-09, 0.999748, -0.0224528, 1.50958e-07, 0.0224528, 0.999748, -8.91, 6.27001, 5.45697e-12) bones/1/enabled = true bones/1/position = Vector3(-8.91, 6.27001, 0) -bones/1/rotation = Quaternion(0.138164, -0.0297377, 0.00676346, 0.98994) +bones/1/rotation = Quaternion(0.139502, -0.0297601, 0.00665671, 0.989752) bones/1/scale = Vector3(1, 1, 1) bones/2/name = "Avatar_LeftLeg" bones/2/parent = 1 bones/2/rest = Transform3D(1, -7.12636e-09, -1.6824e-10, 7.12636e-09, 0.998886, 0.0471958, -1.68282e-10, -0.0471958, 0.998886, 3.17771e-07, 44.89, -8.51388e-08) bones/2/enabled = true bones/2/position = Vector3(1.72337e-06, 44.89, 4.13156e-07) -bones/2/rotation = Quaternion(-0.134468, -3.47937e-08, -1.21765e-08, 0.990918) +bones/2/rotation = Quaternion(-0.126301, -3.21796e-08, -4.35445e-08, 0.991992) bones/2/scale = Vector3(1, 1, 1) bones/3/name = "Avatar_LeftFoot" bones/3/parent = 2 bones/3/rest = Transform3D(-1, -4.58974e-07, 8.08771e-07, 5.47186e-07, 0.412795, 0.910824, -7.51901e-07, 0.910824, -0.412796, -3.04666e-08, 40.7135, 1.73689e-06) bones/3/enabled = true -bones/3/position = Vector3(-2.63553e-06, 40.7121, -0.000174612) -bones/3/rotation = Quaternion(-0.0310596, 0.811054, 0.580409, 0.0659695) +bones/3/position = Vector3(-2.53467e-06, 40.7121, -0.000176434) +bones/3/rotation = Quaternion(-0.0314025, 0.813823, 0.576519, 0.0658246) bones/3/scale = Vector3(1, 1, 1) bones/4/name = "Avatar_LeftToeBase" bones/4/parent = 3 @@ -390,21 +390,21 @@ bones/5/parent = 0 bones/5/rest = Transform3D(1, -1.11022e-16, -1.50996e-07, -3.39028e-09, 0.999748, -0.0224528, 1.50958e-07, 0.0224528, 0.999748, 8.91, 6.27001, 5.45697e-12) bones/5/enabled = true bones/5/position = Vector3(8.91, 6.27001, 0) -bones/5/rotation = Quaternion(0.0895463, -0.03898, -0.00757175, 0.995191) +bones/5/rotation = Quaternion(0.0903915, -0.0388811, -0.00780008, 0.995116) bones/5/scale = Vector3(1, 1, 1) bones/6/name = "Avatar_RightLeg" bones/6/parent = 5 bones/6/rest = Transform3D(1, -7.12636e-09, -1.68239e-10, 7.12636e-09, 0.998886, 0.0471957, -1.68282e-10, -0.0471957, 0.998886, 3.17771e-07, 44.89, 8.51388e-08) bones/6/enabled = true bones/6/position = Vector3(-2.09133e-06, 44.89, 7.78937e-07) -bones/6/rotation = Quaternion(-0.113612, -3.60532e-08, -3.73446e-08, 0.993525) +bones/6/rotation = Quaternion(-0.104433, -2.95791e-08, -7.70934e-09, 0.994532) bones/6/scale = Vector3(1, 1, 1) bones/7/name = "Avatar_RightFoot" bones/7/parent = 6 bones/7/rest = Transform3D(-1, 7.34035e-07, -1.10828e-06, -7.06439e-07, 0.412795, 0.910824, 1.12607e-06, 0.910824, -0.412796, -3.04666e-08, 40.7135, -8.95561e-08) bones/7/enabled = true -bones/7/position = Vector3(-2.27579e-06, 40.7125, -0.000127376) -bones/7/rotation = Quaternion(0.0344526, 0.793201, 0.601904, -0.0857727) +bones/7/position = Vector3(-2.42189e-06, 40.7124, -0.000144913) +bones/7/rotation = Quaternion(0.0348885, 0.796445, 0.597607, -0.0855816) bones/7/scale = Vector3(1, 1, 1) bones/8/name = "Avatar_RightToeBase" bones/8/parent = 7 @@ -418,49 +418,49 @@ bones/9/parent = 0 bones/9/rest = Transform3D(-1, 0, 0, 0, -1, 0, 0, 0, 1, 0, -7.00001, -1.81899e-12) bones/9/enabled = true bones/9/position = Vector3(0, -7, 0) -bones/9/rotation = Quaternion(-7.35662e-05, -0.0650011, 0.997883, -0.0021874) +bones/9/rotation = Quaternion(-8.18894e-05, -0.0695361, 0.997577, -0.00234001) bones/9/scale = Vector3(1, 1, 1) bones/10/name = "Avatar_Spine1" bones/10/parent = 9 bones/10/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 14.0785, 5.85842e-12) bones/10/enabled = true bones/10/position = Vector3(0, 14.0786, 0) -bones/10/rotation = Quaternion(-0.081413, 0.0336675, 0.00298564, 0.996107) +bones/10/rotation = Quaternion(-0.0832567, 0.0336631, 0.00304784, 0.995955) bones/10/scale = Vector3(1, 1, 1) bones/11/name = "Avatar_Spine2" bones/11/parent = 10 bones/11/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 14.0786, 3.63798e-12) bones/11/enabled = true bones/11/position = Vector3(0, 14.0786, 3.63798e-12) -bones/11/rotation = Quaternion(0.0342019, -3.06042e-11, 0.000361669, 0.999415) +bones/11/rotation = Quaternion(0.0302183, -6.47773e-12, 0.000439137, 0.999543) bones/11/scale = Vector3(1, 1, 1) bones/12/name = "Avatar_LeftShoulder" bones/12/parent = 11 bones/12/rest = Transform3D(0, 1, 0, 1, 0, -1.50996e-07, -1.50996e-07, 0, -1, 7, 11.4315, -8.07887e-12) bones/12/enabled = true bones/12/position = Vector3(7, 11.4314, 0) -bones/12/rotation = Quaternion(0.741672, 0.670763, 7.0861e-07, 5.08129e-07) +bones/12/rotation = Quaternion(0.738616, 0.674126, 7.62832e-07, 6.54423e-07) bones/12/scale = Vector3(1, 1, 1) bones/13/name = "Avatar_LeftArm" bones/13/parent = 12 bones/13/rest = Transform3D(0.999331, 5.03176e-06, -0.0365678, -0.00134224, 0.999331, -0.0365434, 0.0365431, 0.036568, 0.998663, 5.42855e-12, 10.7072, 1.81899e-12) bones/13/enabled = true bones/13/position = Vector3(-3.94032e-06, 10.7072, -6.74821e-07) -bones/13/rotation = Quaternion(-0.103413, 0.200162, 0.55494, 0.800801) +bones/13/rotation = Quaternion(-0.10601, 0.200378, 0.557784, 0.798428) bones/13/scale = Vector3(1, 1, 1) bones/14/name = "Avatar_LeftForeArm" bones/14/parent = 13 bones/14/rest = Transform3D(0.997244, 0.00741245, 0.0738161, -0.0128518, 0.997213, 0.0734884, -0.0730657, -0.0742346, 0.99456, 6.54534e-05, 27.3238, 4.58956e-06) bones/14/enabled = true bones/14/position = Vector3(6.56742e-06, 27.3237, -1.58772e-06) -bones/14/rotation = Quaternion(-0.116023, 0.037062, -0.00214671, 0.992553) +bones/14/rotation = Quaternion(-0.127242, 0.0370838, -0.00172734, 0.991177) bones/14/scale = Vector3(1, 1, 1) bones/15/name = "Avatar_LeftHand" bones/15/parent = 14 bones/15/rest = Transform3D(0.995922, -0.0290927, 0.0853954, 0.0214138, 0.995757, 0.0894995, -0.0876368, -0.0873059, 0.992319, -2.05237e-06, 26.7173, -5.2515e-06) bones/15/enabled = true bones/15/position = Vector3(-5.16467e-06, 26.7172, 3.24048e-07) -bones/15/rotation = Quaternion(-0.0315203, -0.0435582, 0.124629, 0.990746) +bones/15/rotation = Quaternion(-0.0346056, -0.0439259, 0.117042, 0.991551) bones/15/scale = Vector3(1, 1, 1) bones/16/name = "Avatar_LeftHandThumb1" bones/16/parent = 15 @@ -474,7 +474,7 @@ bones/17/parent = 16 bones/17/rest = Transform3D(0.979332, 0.20181, -0.0134604, -0.202258, 0.977137, -0.0655322, -7.23759e-05, 0.0669003, 0.99776, 7.30157e-06, 2.66481, -3.72587e-07) bones/17/enabled = true bones/17/position = Vector3(1.03414e-05, 2.66474, -7.25895e-06) -bones/17/rotation = Quaternion(0.0666642, -0.00677625, -0.101441, 0.992582) +bones/17/rotation = Quaternion(0.071261, -0.00724603, -0.101408, 0.992263) bones/17/scale = Vector3(1, 1, 1) bones/18/name = "Avatar_LeftHandThumb3" bones/18/parent = 17 @@ -495,21 +495,21 @@ bones/20/parent = 15 bones/20/rest = Transform3D(0.992114, 0.0102391, -0.12492, -0.0222489, 0.995216, -0.0951269, 0.123349, 0.0971561, 0.987596, 0.779021, 9.23472, -2.75748) bones/20/enabled = true bones/20/position = Vector3(0.778809, 9.23481, -2.75751) -bones/20/rotation = Quaternion(0.0400864, -0.0677885, 0.11615, 0.990105) +bones/20/rotation = Quaternion(0.0393744, -0.0682046, 0.126511, 0.988834) bones/20/scale = Vector3(1, 1, 1) bones/21/name = "Avatar_LeftHandIndex2" bones/21/parent = 20 bones/21/rest = Transform3D(1, 2.94668e-06, 4.6735e-07, -2.94606e-06, 0.999999, -0.00132322, -4.71249e-07, 0.00132322, 0.999999, 2.51133e-05, 5.18386, -6.35439e-06) bones/21/enabled = true bones/21/position = Vector3(1.7291e-06, 5.18387, 1.13745e-07) -bones/21/rotation = Quaternion(0.000644562, -0.000151467, 0.228654, 0.973508) +bones/21/rotation = Quaternion(0.000642948, -0.000158212, 0.238835, 0.97106) bones/21/scale = Vector3(1, 1, 1) bones/22/name = "Avatar_LeftHandIndex3" bones/22/parent = 21 bones/22/rest = Transform3D(1, -3.58599e-05, -1.42492e-06, 3.58665e-05, 0.999988, 0.0049958, 1.24575e-06, -0.0049958, 0.999987, 1.73047e-05, 3.41515, 4.21715e-08) bones/22/enabled = true bones/22/position = Vector3(-6.71784e-07, 3.41513, -1.82798e-06) -bones/22/rotation = Quaternion(-0.00246317, 0.00041883, 0.167618, 0.985849) +bones/22/rotation = Quaternion(-0.00246106, 0.000431006, 0.172486, 0.985009) bones/22/scale = Vector3(1, 1, 1) bones/23/name = "Avatar_LeftHandIndex4" bones/23/parent = 22 @@ -523,21 +523,21 @@ bones/24/parent = 15 bones/24/rest = Transform3D(0.992114, 0.00669833, -0.125162, -0.022252, 0.992121, -0.123288, 0.12335, 0.125101, 0.984446, 0.753531, 8.89655, -0.172081) bones/24/enabled = true bones/24/position = Vector3(0.75333, 8.8966, -0.172106) -bones/24/rotation = Quaternion(0.0495485, -0.0729514, 0.179529, 0.979792) +bones/24/rotation = Quaternion(0.0487819, -0.0734662, 0.189778, 0.977859) bones/24/scale = Vector3(1, 1, 1) bones/25/name = "Avatar_LeftHandMiddle2" bones/25/parent = 24 bones/25/rest = Transform3D(1, 1.21359e-08, -2.25911e-07, -1.21396e-08, 1, -1.63992e-05, 2.25911e-07, 1.63992e-05, 1, -4.67116e-05, 4.97609, -4.57515e-06) bones/25/enabled = true bones/25/position = Vector3(-4.60769e-06, 4.97608, -4.75095e-07) -bones/25/rotation = Quaternion(7.79029e-06, -2.31165e-06, 0.289672, 0.957126) +bones/25/rotation = Quaternion(7.81312e-06, -2.40426e-06, 0.299679, 0.95404) bones/25/scale = Vector3(1, 1, 1) bones/26/name = "Avatar_LeftHandMiddle3" bones/26/parent = 25 bones/26/rest = Transform3D(1, 1.52158e-05, -3.18544e-08, -1.52158e-05, 1, 1.71343e-05, 3.21151e-08, -1.71343e-05, 1, -2.27942e-06, 3.86526, 1.15426e-07) bones/26/enabled = true bones/26/position = Vector3(5.47529e-07, 3.86525, 4.07777e-07) -bones/26/rotation = Quaternion(-8.405e-06, 1.50435e-06, 0.176987, 0.984213) +bones/26/rotation = Quaternion(-8.38064e-06, 1.5477e-06, 0.181846, 0.983327) bones/26/scale = Vector3(1, 1, 1) bones/27/name = "Avatar_LeftHandMiddle4" bones/27/parent = 26 @@ -551,21 +551,21 @@ bones/28/parent = 15 bones/28/rest = Transform3D(0.992114, 0.00669073, -0.125161, -0.0222518, 0.992114, -0.123348, 0.123349, 0.125161, 0.984439, 0.277531, 8.82563, 2.66313) bones/28/enabled = true bones/28/position = Vector3(0.277311, 8.82569, 2.6631) -bones/28/rotation = Quaternion(0.0419274, -0.077607, 0.277924, 0.956545) +bones/28/rotation = Quaternion(0.0411124, -0.0780418, 0.287925, 0.953582) bones/28/scale = Vector3(1, 1, 1) bones/29/name = "Avatar_LeftHandRing2" bones/29/parent = 28 bones/29/rest = Transform3D(1, -4.67641e-06, 2.44804e-07, 4.6764e-06, 1, 2.91492e-07, -2.44805e-07, -2.91491e-07, 1, -3.09189e-05, 4.08647, -8.38862e-06) bones/29/enabled = true bones/29/position = Vector3(-1.12596e-06, 4.08644, 1.4469e-07) -bones/29/rotation = Quaternion(2.52823e-08, -2.08284e-08, 0.274311, 0.961641) +bones/29/rotation = Quaternion(2.4618e-08, 1.97256e-08, 0.284366, 0.958716) bones/29/scale = Vector3(1, 1, 1) bones/30/name = "Avatar_LeftHandRing3" bones/30/parent = 29 bones/30/rest = Transform3D(1, 1.18705e-05, -1.60112e-07, -1.18705e-05, 1, -1.60112e-07, 1.6011e-07, 1.60114e-07, 1, -5.27643e-07, 3.26358, -4.51637e-08) bones/30/enabled = true bones/30/position = Vector3(9.39058e-06, 3.26354, 3.36185e-06) -bones/30/rotation = Quaternion(6.43677e-08, -6.11146e-08, 0.261036, 0.965329) +bones/30/rotation = Quaternion(7.38934e-08, -7.29372e-08, 0.2658, 0.964028) bones/30/scale = Vector3(1, 1, 1) bones/31/name = "Avatar_LeftHandRing4" bones/31/parent = 30 @@ -579,21 +579,21 @@ bones/32/parent = 15 bones/32/rest = Transform3D(0.992114, 0.00371115, -0.125284, -0.0222561, 0.988893, -0.146951, 0.123348, 0.148581, 0.981177, -0.608626, 8.39423, 5.13689) bones/32/enabled = true bones/32/position = Vector3(-0.60877, 8.39429, 5.13688) -bones/32/rotation = Quaternion(0.0455529, -0.085653, 0.365488, 0.925747) +bones/32/rotation = Quaternion(0.0446536, -0.0861253, 0.375161, 0.921869) bones/32/scale = Vector3(1, 1, 1) bones/33/name = "Avatar_LeftHandPinky2" bones/33/parent = 32 bones/33/rest = Transform3D(1, -1.6969e-05, 8.2619e-07, 1.69682e-05, 0.999999, 0.00103675, -8.43782e-07, -0.00103675, 0.999999, -6.63118e-05, 3.49534, -6.6245e-06) bones/33/enabled = true bones/33/position = Vector3(2.46946e-07, 3.49534, -1.36664e-06) -bones/33/rotation = Quaternion(-0.000486745, 0.000176426, 0.340785, 0.940141) +bones/33/rotation = Quaternion(-0.000484794, 0.000181534, 0.35061, 0.936521) bones/33/scale = Vector3(1, 1, 1) bones/34/name = "Avatar_LeftHandPinky3" bones/34/parent = 33 bones/34/rest = Transform3D(1, 5.54533e-05, -7.32148e-07, -5.54548e-05, 0.999997, -0.00223135, 6.08411e-07, 0.00223135, 0.999997, -1.19373e-05, 2.4257, -4.54456e-08) bones/34/enabled = true bones/34/position = Vector3(2.98199e-06, 2.42574, -9.23087e-07) -bones/34/rotation = Quaternion(0.00109021, -0.000235387, 0.210942, 0.977498) +bones/34/rotation = Quaternion(0.00108904, -0.000240763, 0.215768, 0.976444) bones/34/scale = Vector3(1, 1, 1) bones/35/name = "Avatar_LeftHandPinky4" bones/35/parent = 34 @@ -607,28 +607,28 @@ bones/36/parent = 11 bones/36/rest = Transform3D(0, -1, -1.42109e-14, 1, 0, -1.42109e-14, 1.42109e-14, -1.42109e-14, 1, -7, 11.4315, -8.07887e-12) bones/36/enabled = true bones/36/position = Vector3(-7, 11.4314, 0) -bones/36/rotation = Quaternion(3.46451e-07, 3.27053e-07, 0.743113, 0.669166) +bones/36/rotation = Quaternion(4.35188e-07, 4.15901e-07, 0.739109, 0.673586) bones/36/scale = Vector3(1, 1, 1) bones/37/name = "Avatar_RightArm" bones/37/parent = 36 bones/37/rest = Transform3D(0.999331, 5.02612e-06, 0.0365681, -0.00134224, 0.999331, 0.0365435, -0.0365435, -0.0365681, 0.998663, 1.16813e-11, 10.7072, 1.05769e-11) bones/37/enabled = true bones/37/position = Vector3(-5.20355e-06, 10.7072, -6.82453e-07) -bones/37/rotation = Quaternion(0.0589379, -0.182858, 0.569321, 0.799351) +bones/37/rotation = Quaternion(0.0597603, -0.181321, 0.575228, 0.795402) bones/37/scale = Vector3(1, 1, 1) bones/38/name = "Avatar_RightForeArm" bones/38/parent = 37 bones/38/rest = Transform3D(0.997244, 0.00741359, -0.0738165, -0.012853, 0.997213, -0.0734884, 0.0730659, 0.0742346, 0.994561, 4.03076e-06, 27.3237, 5.96046e-07) bones/38/enabled = true bones/38/position = Vector3(-3.49805e-06, 27.3237, -4.76837e-07) -bones/38/rotation = Quaternion(0.128151, -0.0370856, -0.00169336, 0.99106) +bones/38/rotation = Quaternion(0.133021, -0.0370934, -0.00151105, 0.990418) bones/38/scale = Vector3(1, 1, 1) bones/39/name = "Avatar_RightHand" bones/39/parent = 38 bones/39/rest = Transform3D(0.995922, -0.0290939, -0.0853951, 0.0214149, 0.995756, -0.0894998, 0.0876366, 0.0873061, 0.992319, -5.42547e-05, 26.7172, -8.79303e-07) bones/39/enabled = true bones/39/position = Vector3(-1.27698e-05, 26.7172, 2.50344e-07) -bones/39/rotation = Quaternion(0.0343915, -0.0386823, 0.0872141, 0.994844) +bones/39/rotation = Quaternion(0.0365927, -0.0383854, 0.0813906, 0.99527) bones/39/scale = Vector3(1, 1, 1) bones/40/name = "Avatar_RightHandThumb1" bones/40/parent = 39 @@ -642,7 +642,7 @@ bones/41/parent = 40 bones/41/rest = Transform3D(0.979327, 0.201834, 0.0134617, -0.202283, 0.977132, 0.0655335, 7.30194e-05, -0.0669019, 0.99776, -1.2219e-05, 2.66476, 1.43387e-06) bones/41/enabled = true bones/41/position = Vector3(1.02641e-05, 2.66476, 6.56018e-07) -bones/41/rotation = Quaternion(-0.0644838, 0.00655247, -0.101453, 0.992727) +bones/41/rotation = Quaternion(-0.07052, 0.00716938, -0.101412, 0.992316) bones/41/scale = Vector3(1, 1, 1) bones/42/name = "Avatar_RightHandThumb3" bones/42/parent = 41 @@ -663,21 +663,21 @@ bones/44/parent = 39 bones/44/rest = Transform3D(0.992114, 0.0102392, 0.12492, -0.0222489, 0.995216, 0.0951269, -0.123349, -0.0971561, 0.987596, 0.77907, 9.23471, 2.75749) bones/44/enabled = true bones/44/position = Vector3(0.778919, 9.23478, 2.7575) -bones/44/rotation = Quaternion(-0.0416782, 0.0668218, 0.0927044, 0.992574) +bones/44/rotation = Quaternion(-0.0410486, 0.0672103, 0.102026, 0.99166) bones/44/scale = Vector3(1, 1, 1) bones/45/name = "Avatar_RightHandIndex2" bones/45/parent = 44 bones/45/rest = Transform3D(1, 1.63412e-05, -4.87852e-07, -1.63405e-05, 0.999999, 0.00132323, 5.09474e-07, -0.00132323, 0.999999, 9.19147e-06, 5.18383, 3.14205e-07) bones/45/enabled = true bones/45/position = Vector3(-2.13826e-06, 5.18387, -1.36862e-06) -bones/45/rotation = Quaternion(-0.000647799, 0.000136119, 0.205569, 0.978642) +bones/45/rotation = Quaternion(-0.000646448, 0.000142157, 0.214755, 0.976668) bones/45/scale = Vector3(1, 1, 1) bones/46/name = "Avatar_RightHandIndex3" bones/46/parent = 45 bones/46/rest = Transform3D(1, -3.49185e-05, 1.09887e-06, 3.49236e-05, 0.999988, -0.00499613, -9.24395e-07, 0.00499613, 0.999987, -1.85867e-05, 3.41515, 1.29628e-07) bones/46/enabled = true bones/46/position = Vector3(1.26962e-06, 3.41516, 1.08356e-06) -bones/46/rotation = Quaternion(0.00247244, -0.000359068, 0.143728, 0.989614) +bones/46/rotation = Quaternion(0.00247165, -0.000364113, 0.145752, 0.989318) bones/46/scale = Vector3(1, 1, 1) bones/47/name = "Avatar_RightHandIndex4" bones/47/parent = 46 @@ -691,21 +691,21 @@ bones/48/parent = 39 bones/48/rest = Transform3D(0.992114, 0.00669837, 0.12516, -0.0222519, 0.992121, 0.123288, -0.123349, -0.125101, 0.984446, 0.753595, 8.89653, 0.172078) bones/48/enabled = true bones/48/position = Vector3(0.753395, 8.89661, 0.172096) -bones/48/rotation = Quaternion(-0.0512597, 0.0717592, 0.156309, 0.983764) +bones/48/rotation = Quaternion(-0.0505832, 0.0722377, 0.165545, 0.982252) bones/48/scale = Vector3(1, 1, 1) bones/49/name = "Avatar_RightHandMiddle2" bones/49/parent = 48 bones/49/rest = Transform3D(1, 1.49024e-08, 1.67058e-08, -1.49027e-08, 1, 1.63378e-05, -1.67056e-08, -1.63378e-05, 1, 3.20544e-05, 4.97609, 4.3387e-06) bones/49/enabled = true bones/49/position = Vector3(-9.03528e-07, 4.97607, -2.18782e-06) -bones/49/rotation = Quaternion(-7.9039e-06, 2.2013e-06, 0.266959, 0.963708) +bones/49/rotation = Quaternion(-7.90581e-06, 2.2857e-06, 0.276001, 0.961157) bones/49/scale = Vector3(1, 1, 1) bones/50/name = "Avatar_RightHandMiddle3" bones/50/parent = 49 bones/50/rest = Transform3D(1, 7.60806e-06, 4.04834e-07, -7.60806e-06, 1, -1.67769e-05, -4.04962e-07, 1.67769e-05, 1, 2.4011e-07, 3.86529, 4.58422e-08) bones/50/enabled = true bones/50/position = Vector3(3.81469e-06, 3.8653, 4.14512e-07) -bones/50/rotation = Quaternion(8.50015e-06, -1.30564e-06, 0.153134, 0.988205) +bones/50/rotation = Quaternion(8.47358e-06, -1.34927e-06, 0.155203, 0.987883) bones/50/scale = Vector3(1, 1, 1) bones/51/name = "Avatar_RightHandMiddle4" bones/51/parent = 50 @@ -719,21 +719,21 @@ bones/52/parent = 39 bones/52/rest = Transform3D(0.992114, 0.00669077, 0.12516, -0.0222518, 0.992114, 0.123348, -0.123348, -0.125161, 0.984439, 0.277626, 8.8256, -2.66312) bones/52/enabled = true bones/52/position = Vector3(0.277353, 8.82568, -2.6631) -bones/52/rotation = Quaternion(-0.0437507, 0.0765938, 0.255228, 0.962849) +bones/52/rotation = Quaternion(-0.0430291, 0.0770015, 0.264263, 0.960409) bones/52/scale = Vector3(1, 1, 1) bones/53/name = "Avatar_RightHandRing2" bones/53/parent = 52 bones/53/rest = Transform3D(1, 4.67556e-06, 1.22857e-07, -4.67556e-06, 1, -6.72393e-09, -1.22857e-07, 6.72335e-09, 1, -1.12598e-06, 4.0865, 3.43209e-06) bones/53/enabled = true bones/53/position = Vector3(5.46542e-06, 4.08645, -4.54797e-07) -bones/53/rotation = Quaternion(-1.10336e-08, 9.84888e-09, 0.251495, 0.967859) +bones/53/rotation = Quaternion(-1.0431e-08, -2.41749e-08, 0.260578, 0.965453) bones/53/scale = Vector3(1, 1, 1) bones/54/name = "Avatar_RightHandRing3" bones/54/parent = 53 bones/54/rest = Transform3D(1, -1.18704e-05, 9.27374e-08, 1.18704e-05, 1, 9.27347e-08, -9.27385e-08, -9.27336e-08, 1, -1.63695e-05, 3.26353, -2.68039e-08) bones/54/enabled = true bones/54/position = Vector3(-4.12762e-06, 3.26354, 4.71373e-07) -bones/54/rotation = Quaternion(-8.83665e-08, 2.12103e-08, 0.237621, 0.971358) +bones/54/rotation = Quaternion(-8.90891e-08, 1.62825e-08, 0.239607, 0.97087) bones/54/scale = Vector3(1, 1, 1) bones/55/name = "Avatar_RightHandRing4" bones/55/parent = 54 @@ -747,21 +747,21 @@ bones/56/parent = 39 bones/56/rest = Transform3D(0.992114, 0.00371124, 0.125285, -0.0222562, 0.988893, 0.146951, -0.123348, -0.14858, 0.981178, -0.608531, 8.3942, -5.13689) bones/56/enabled = true bones/56/position = Vector3(-0.608719, 8.39428, -5.13687) -bones/56/rotation = Quaternion(-0.0475655, 0.0845518, 0.343495, 0.93413) +bones/56/rotation = Quaternion(-0.046769, 0.084995, 0.352257, 0.930862) bones/56/scale = Vector3(1, 1, 1) bones/57/name = "Avatar_RightHandPinky2" bones/57/parent = 56 bones/57/rest = Transform3D(1, -1.69431e-05, 1.27856e-06, 1.69444e-05, 0.999999, -0.00103375, -1.26104e-06, 0.00103375, 0.999999, -2.54488e-06, 3.49536, 5.30468e-06) bones/57/enabled = true bones/57/position = Vector3(5.44842e-06, 3.49533, 1.61064e-07) -bones/57/rotation = Quaternion(0.000490709, -0.000164801, 0.318458, 0.947937) +bones/57/rotation = Quaternion(0.000489159, -0.000169435, 0.327351, 0.944903) bones/57/scale = Vector3(1, 1, 1) bones/58/name = "Avatar_RightHandPinky3" bones/58/parent = 57 bones/58/rest = Transform3D(1, 6.40337e-05, -1.3559e-06, -6.40305e-05, 0.999998, 0.00222904, 1.49863e-06, -0.00222904, 0.999997, 8.63053e-06, 2.42572, 1.45097e-07) bones/58/enabled = true bones/58/position = Vector3(1.03588e-05, 2.42575, 3.84085e-06) -bones/58/rotation = Quaternion(-0.00109534, 0.000208799, 0.187241, 0.982314) +bones/58/rotation = Quaternion(-0.00109491, 0.000211265, 0.189456, 0.981889) bones/58/scale = Vector3(1, 1, 1) bones/59/name = "Avatar_RightHandPinky4" bones/59/parent = 58 @@ -775,18 +775,18 @@ bones/60/parent = 11 bones/60/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 14.0785, 1.3749e-11) bones/60/enabled = true bones/60/position = Vector3(0, 14.0786, -3.63798e-12) -bones/60/rotation = Quaternion(0.0416399, -0.075329, 0.00329009, 0.996284) +bones/60/rotation = Quaternion(0.0459283, -0.0753386, 0.00371409, 0.996093) bones/60/scale = Vector3(1, 1, 1) bones/61/name = "Avatar_Head" bones/61/parent = 60 bones/61/rest = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 24.2357, -2.50395e-11) bones/61/enabled = true bones/61/position = Vector3(0, 24.2356, -3.63798e-12) -bones/61/rotation = Quaternion(0.00977448, 0.0748478, -0.00776283, 0.997117) +bones/61/rotation = Quaternion(0.000252648, 0.0748679, -0.0078771, 0.997162) bones/61/scale = Vector3(1, 1, 1) [node name="BoneAttachment3D_Name" type="BoneAttachment3D" parent="Armature/Skeleton3D"] -transform = Transform3D(1, 2.54251e-07, 1.19209e-07, -1.49012e-07, 0.00854064, 0.999964, 2.41795e-07, -0.999963, 0.00854075, -0.364106, -3.91112, -172.373) +transform = Transform3D(1, 9.66535e-06, -7.30157e-07, 8.64267e-07, -0.013608, 0.999907, 9.65747e-06, -0.999907, -0.0136078, -0.40619, -4.20348, -172.423) bone_name = "Avatar_Head" bone_idx = 61 diff --git a/godot/src/test/avatar/emote_editor_test.gd b/godot/src/test/avatar/emote_editor_test.gd new file mode 100644 index 00000000..555980f0 --- /dev/null +++ b/godot/src/test/avatar/emote_editor_test.gd @@ -0,0 +1,22 @@ +extends Control + +var avatar_wf: DclAvatarWireFormat + +@onready var avatar_preview = %AvatarPreview +@onready var avatar: Avatar = avatar_preview.avatar +@onready var emote_editor := %EmoteEditor + + +# Called when the node enters the scene tree for the first time. +func _ready(): + var profile: DclUserProfile = DclUserProfile.new() + avatar_wf = profile.get_avatar() + + emote_editor.avatar = avatar + emote_editor.set_new_emotes.connect(self._on_set_new_emotes) + + avatar.async_update_avatar(avatar_wf) + + +func _on_set_new_emotes(emotes: PackedStringArray): + avatar_wf.set_emotes(emotes) diff --git a/godot/src/test/avatar/emote_editor_test.tscn b/godot/src/test/avatar/emote_editor_test.tscn new file mode 100644 index 00000000..ca1b4269 --- /dev/null +++ b/godot/src/test/avatar/emote_editor_test.tscn @@ -0,0 +1,39 @@ +[gd_scene load_steps=4 format=3 uid="uid://chlpbo1hwhm6s"] + +[ext_resource type="Script" path="res://src/test/avatar/emote_editor_test.gd" id="1_powqw"] +[ext_resource type="PackedScene" uid="uid://cy43hvd5bivso" path="res://src/ui/components/backpack/avatar_preview.tscn" id="2_ldtsl"] +[ext_resource type="PackedScene" uid="uid://cse8fx0ei572e" path="res://src/ui/components/emote_editor/emote_editor.tscn" id="3_jsvro"] + +[node name="EmoteEditorTest" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_powqw") + +[node name="AvatarPreview" parent="." instance=ExtResource("2_ldtsl")] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 4 +anchor_top = 0.5 +anchor_bottom = 0.5 +offset_top = -250.0 +offset_bottom = 250.0 +grow_vertical = 2 + +[node name="EmoteEditor" parent="." instance=ExtResource("3_jsvro")] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 6 +anchor_left = 1.0 +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +offset_left = -828.0 +offset_top = -320.0 +offset_right = 0.0 +offset_bottom = 232.0 +grow_horizontal = 0 +grow_vertical = 2 diff --git a/godot/src/ui/components/auth/lobby.gd b/godot/src/ui/components/auth/lobby.gd index 4835f5ab..10fee2a8 100644 --- a/godot/src/ui/components/auth/lobby.gd +++ b/godot/src/ui/components/auth/lobby.gd @@ -59,6 +59,7 @@ func _ready(): Global.player_identity.wallet_connected.connect(self._on_wallet_connected) Global.scene_runner.set_pause(true) + if Global.player_identity.try_recover_account(Global.config.session_account): loading_first_profile = true restore_panel.hide() @@ -194,7 +195,6 @@ func _on_button_enter_as_guest_pressed(): func _async_show_avatar_preview(): - await get_tree().create_timer(1.0).timeout avatar_preview.show() avatar_preview.avatar.emote_controller.play_emote("raiseHand") diff --git a/godot/src/ui/components/auth/lobby.tscn b/godot/src/ui/components/auth/lobby.tscn index 7601e739..3d8a9cd9 100644 --- a/godot/src/ui/components/auth/lobby.tscn +++ b/godot/src/ui/components/auth/lobby.tscn @@ -295,6 +295,7 @@ script = ExtResource("3_wk266") [node name="Backpack" parent="Main/Backpack/SafeMarginContainer" instance=ExtResource("9_qv8xq")] layout_mode = 2 +hide_navbar = true [node name="Button_Continue" type="Button" parent="Main/Backpack/SafeMarginContainer/Backpack"] custom_minimum_size = Vector2(250, 56) diff --git a/godot/src/ui/components/backpack/avatar_preview.tscn b/godot/src/ui/components/backpack/avatar_preview.tscn index 3e6810c6..aca47211 100644 --- a/godot/src/ui/components/backpack/avatar_preview.tscn +++ b/godot/src/ui/components/backpack/avatar_preview.tscn @@ -4,7 +4,6 @@ [ext_resource type="Script" path="res://src/ui/components/backpack/avatar_preview.gd" id="1_sayag"] [ext_resource type="PackedScene" uid="uid://0ccix5xpw76a" path="res://assets/ui/backpack/platform_compressed.glb" id="3_i62gc"] - [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_6yihh"] sky_top_color = Color(1, 1, 1, 1) sky_horizon_color = Color(0.8, 0.79225, 0.78325, 1) @@ -17,7 +16,7 @@ sky_material = SubResource("ProceduralSkyMaterial_6yihh") background_mode = 2 sky = SubResource("Sky_0qr0h") -[node name="SubViewportContainer" type="SubViewportContainer"] +[node name="AvatarPreview" type="SubViewportContainer"] offset_right = 256.0 offset_bottom = 500.0 size_flags_horizontal = 4 diff --git a/godot/src/ui/components/backpack/backpack.gd b/godot/src/ui/components/backpack/backpack.gd index 90605aa3..c7e031b5 100644 --- a/godot/src/ui/components/backpack/backpack.gd +++ b/godot/src/ui/components/backpack/backpack.gd @@ -7,6 +7,8 @@ const WEARABLE_ITEM_INSTANTIABLE = preload( ) const FILTER: Texture = preload("res://assets/ui/Filter.svg") +@export var hide_navbar: bool = false + var wearable_button_group = ButtonGroup.new() var filtered_data: Array @@ -47,9 +49,22 @@ var _has_changes: bool = false @onready var backpack_loading = %TextureProgressBar_BackpackLoading @onready var container_backpack = %HBoxContainer_Backpack +@onready var wearable_editor = %WearableEditor +@onready var emote_editor = %EmoteEditor + +@onready var container_navbar = %PanelContainer_Navbar + # gdlint:ignore = async-function-name func _ready(): + if hide_navbar: + container_navbar.hide() + + emote_editor.avatar = avatar_preview.avatar + emote_editor.set_new_emotes.connect(self._on_set_new_emotes) + wearable_editor.show() + emote_editor.hide() + mutable_profile = DclUserProfile.new() mutable_avatar = mutable_profile.get_avatar() @@ -117,12 +132,16 @@ func _on_profile_changed(new_profile: DclUserProfile): line_edit_name.text = new_profile.get_name() mutable_profile = new_profile.duplicated() - mutable_avatar = mutable_profile.get_avatar() request_update_avatar = true request_show_wearables = true +func _on_set_new_emotes(emotes_urns: PackedStringArray): + mutable_avatar.set_emotes(emotes_urns) + request_update_avatar = true + + func _physics_process(_delta): if request_update_avatar: request_update_avatar = false @@ -405,3 +424,13 @@ func _on_rich_text_box_open_marketplace_meta_clicked(_meta): func has_changes(): return _has_changes + + +func _on_button_wearables_pressed(): + wearable_editor.show() + emote_editor.hide() + + +func _on_button_emotes_pressed(): + wearable_editor.hide() + emote_editor.show() diff --git a/godot/src/ui/components/backpack/backpack.tscn b/godot/src/ui/components/backpack/backpack.tscn index d414f7ca..28bd3bcc 100644 --- a/godot/src/ui/components/backpack/backpack.tscn +++ b/godot/src/ui/components/backpack/backpack.tscn @@ -1,9 +1,12 @@ -[gd_scene load_steps=33 format=3 uid="uid://c8dlajk0at8no"] +[gd_scene load_steps=39 format=3 uid="uid://c8dlajk0at8no"] [ext_resource type="Theme" uid="uid://bm1rvmngc833v" path="res://assets/themes/theme.tres" id="1_0pkvk"] [ext_resource type="Script" path="res://src/ui/components/backpack/backpack.gd" id="1_a5ql5"] +[ext_resource type="FontFile" uid="uid://hqi2efd5kd17" path="res://assets/themes/fonts/inter/Inter-Bold.ttf" id="2_m8ron"] [ext_resource type="PackedScene" uid="uid://cy43hvd5bivso" path="res://src/ui/components/backpack/avatar_preview.tscn" id="4_4kxkq"] +[ext_resource type="Texture2D" uid="uid://b6ydwqk4yhhcb" path="res://assets/ui/outfits.svg" id="4_8xgft"] [ext_resource type="PackedScene" uid="uid://buu3ox7iefpgx" path="res://src/ui/components/loading_spinner/loading_spinner.tscn" id="4_saosw"] +[ext_resource type="Texture2D" uid="uid://bsi31cwrsdll1" path="res://assets/themes/dark_dcl_theme/icons/Emotes.svg" id="5_ldi16"] [ext_resource type="Texture2D" uid="uid://dra4ek5p0o6jj" path="res://assets/ui/wearable_categories/body_shape-icon.svg" id="6_4rdaw"] [ext_resource type="Shader" path="res://src/ui/components/backpack/backpack.gdshader" id="6_qle00"] [ext_resource type="Theme" uid="uid://chwr8vock83p4" path="res://assets/themes/dark_dcl_theme/dark_dcl_theme.tres" id="6_t442b"] @@ -27,10 +30,16 @@ [ext_resource type="Texture2D" uid="uid://8mwi1tvyxm5f" path="res://assets/ui/wearable_categories/top_head-icon.svg" id="21_rmg80"] [ext_resource type="Texture2D" uid="uid://bmoy7cmuucooq" path="res://assets/ui/wearable_categories/skin-icon.svg" id="25_cd16j"] [ext_resource type="Texture2D" uid="uid://10ljw6k05g33" path="res://assets/ui/backpack/no-items-in-category.svg" id="27_kffkw"] +[ext_resource type="PackedScene" uid="uid://cse8fx0ei572e" path="res://src/ui/components/emote_editor/emote_editor.tscn" id="30_vfwc7"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_no6vh"] +bg_color = Color(0, 0, 0, 0.2) + +[sub_resource type="ButtonGroup" id="ButtonGroup_wyk6q"] [sub_resource type="ButtonGroup" id="ButtonGroup_0kgen"] -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_no6vh"] +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_cq6cy"] bg_color = Color(0, 0, 0, 0.2) corner_radius_top_left = 8 corner_radius_top_right = 8 @@ -56,6 +65,7 @@ resource_local_to_scene = false resource_local_to_scene = false [node name="Backpack" type="Control"] +custom_minimum_size = Vector2(0, 635) layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -63,28 +73,89 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 size_flags_vertical = 3 +theme = ExtResource("1_0pkvk") script = ExtResource("1_a5ql5") -[node name="HBoxContainer_Backpack" type="HBoxContainer" parent="."] -unique_name_in_owner = true +[node name="VBoxContainer" type="VBoxContainer" parent="."] layout_mode = 1 -anchors_preset = 13 -anchor_left = 0.5 -anchor_right = 0.5 +anchors_preset = 15 +anchor_right = 1.0 anchor_bottom = 1.0 -offset_left = -640.0 -offset_right = 640.0 grow_horizontal = 2 grow_vertical = 2 + +[node name="PanelContainer_Navbar" type="PanelContainer" parent="VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_no6vh") + +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/PanelContainer_Navbar"] +layout_mode = 2 +theme_override_constants/margin_left = 30 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_bottom = 8 + +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/PanelContainer_Navbar/MarginContainer"] +layout_mode = 2 +theme_override_constants/separation = 14 + +[node name="Label" type="Label" parent="VBoxContainer/PanelContainer_Navbar/MarginContainer/HBoxContainer"] +layout_mode = 2 +theme_override_fonts/font = ExtResource("2_m8ron") +theme_override_font_sizes/font_size = 28 +text = "Backpack" + +[node name="Button_Wearables" type="Button" parent="VBoxContainer/PanelContainer_Navbar/MarginContainer/HBoxContainer"] +layout_mode = 2 +focus_mode = 0 +theme_type_variation = &"WhiteButton" +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_colors/icon_normal_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("2_m8ron") +toggle_mode = true +button_pressed = true +button_group = SubResource("ButtonGroup_wyk6q") +text = "Wearables" +icon = ExtResource("12_6wpew") + +[node name="Button_Outfits" type="Button" parent="VBoxContainer/PanelContainer_Navbar/MarginContainer/HBoxContainer"] +visible = false +layout_mode = 2 +focus_mode = 0 +theme_type_variation = &"WhiteButton" +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_colors/icon_normal_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("2_m8ron") +disabled = true +toggle_mode = true +button_group = SubResource("ButtonGroup_wyk6q") +text = "Outfits" +icon = ExtResource("4_8xgft") + +[node name="Button_Emotes" type="Button" parent="VBoxContainer/PanelContainer_Navbar/MarginContainer/HBoxContainer"] +layout_mode = 2 +focus_mode = 0 +theme_type_variation = &"WhiteButton" +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_colors/icon_normal_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("2_m8ron") +toggle_mode = true +button_group = SubResource("ButtonGroup_wyk6q") +text = "Emotes" +icon = ExtResource("5_ldi16") + +[node name="HBoxContainer_Backpack" type="HBoxContainer" parent="VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 size_flags_vertical = 3 theme_override_constants/separation = 0 -[node name="Control_LeftBar" type="Control" parent="HBoxContainer_Backpack"] +[node name="Control_LeftBar" type="Control" parent="VBoxContainer/HBoxContainer_Backpack"] unique_name_in_owner = true custom_minimum_size = Vector2(385, 0) layout_mode = 2 -[node name="AvatarPreview" parent="HBoxContainer_Backpack/Control_LeftBar" instance=ExtResource("4_4kxkq")] +[node name="AvatarPreview" parent="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar" instance=ExtResource("4_4kxkq")] unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 @@ -100,7 +171,7 @@ stretch = true hide_name = true show_platform = true -[node name="TextureProgressBar_AvatarLoading" parent="HBoxContainer_Backpack/Control_LeftBar" instance=ExtResource("4_saosw")] +[node name="TextureProgressBar_AvatarLoading" parent="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar" instance=ExtResource("4_saosw")] unique_name_in_owner = true layout_mode = 1 anchors_preset = 8 @@ -115,7 +186,7 @@ offset_bottom = 64.0 grow_horizontal = 2 grow_vertical = 2 -[node name="MarginContainer" type="MarginContainer" parent="HBoxContainer_Backpack/Control_LeftBar"] +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar"] layout_mode = 1 anchors_preset = 7 anchor_left = 0.5 @@ -133,24 +204,24 @@ theme_override_constants/margin_left = 40 theme_override_constants/margin_right = 40 theme_override_constants/margin_bottom = 20 -[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer_Backpack/Control_LeftBar/MarginContainer"] +[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar/MarginContainer"] visible = false layout_mode = 2 size_flags_vertical = 8 -[node name="HBoxContainer3" type="HBoxContainer" parent="HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer"] +[node name="HBoxContainer3" type="HBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer"] visible = false layout_mode = 2 size_flags_vertical = 0 theme_override_constants/separation = 16 -[node name="HBoxContainer4" type="HBoxContainer" parent="HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer3"] +[node name="HBoxContainer4" type="HBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer3"] layout_mode = 2 size_flags_horizontal = 3 theme_override_constants/separation = 7 alignment = 1 -[node name="Button_Avatar" type="Button" parent="HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer3/HBoxContainer4"] +[node name="Button_Avatar" type="Button" parent="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer3/HBoxContainer4"] custom_minimum_size = Vector2(80, 0) layout_mode = 2 size_flags_horizontal = 3 @@ -161,7 +232,7 @@ button_pressed = true button_group = SubResource("ButtonGroup_0kgen") text = "Avatar" -[node name="Button_Emotes" type="Button" parent="HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer3/HBoxContainer4"] +[node name="Button_Emotes" type="Button" parent="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer3/HBoxContainer4"] custom_minimum_size = Vector2(80, 0) layout_mode = 2 size_flags_horizontal = 3 @@ -172,15 +243,15 @@ button_group = SubResource("ButtonGroup_0kgen") text = "Emotes " -[node name="LineEdit_Name" type="LineEdit" parent="HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer"] +[node name="LineEdit_Name" type="LineEdit" parent="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer"] unique_name_in_owner = true layout_mode = 2 focus_mode = 1 -[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer"] +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer"] layout_mode = 2 -[node name="Button_SaveProfile" type="Button" parent="HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer"] +[node name="Button_SaveProfile" type="Button" parent="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer"] unique_name_in_owner = true custom_minimum_size = Vector2(80, 0) layout_mode = 2 @@ -193,38 +264,39 @@ button_pressed = true button_group = SubResource("ButtonGroup_0kgen") text = "Save Profile" -[node name="Button_Logout" type="Button" parent="HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer"] +[node name="Button_Logout" type="Button" parent="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 focus_mode = 0 text = "Log out" -[node name="MarginContainer" type="MarginContainer" parent="HBoxContainer_Backpack"] +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/HBoxContainer_Backpack"] layout_mode = 2 size_flags_horizontal = 3 theme_override_constants/margin_left = 20 -theme_override_constants/margin_top = 20 +theme_override_constants/margin_top = 10 theme_override_constants/margin_right = 20 -theme_override_constants/margin_bottom = 20 +theme_override_constants/margin_bottom = 10 -[node name="ColorRect_Sidebar" type="PanelContainer" parent="HBoxContainer_Backpack/MarginContainer"] +[node name="WearableEditor" type="PanelContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer"] +unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 -theme_override_styles/panel = SubResource("StyleBoxFlat_no6vh") +theme_override_styles/panel = SubResource("StyleBoxFlat_cq6cy") -[node name="MarginContainer" type="MarginContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar"] +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor"] layout_mode = 2 theme_override_constants/margin_left = 16 theme_override_constants/margin_top = 16 theme_override_constants/margin_right = 16 theme_override_constants/margin_bottom = 16 -[node name="VBoxContainer" type="VBoxContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer"] +[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer"] layout_mode = 2 theme_override_constants/separation = 10 alignment = 1 -[node name="HBoxContainer" type="GridContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer"] +[node name="HBoxContainer" type="GridContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer"] visible = false layout_direction = 1 layout_mode = 2 @@ -232,45 +304,45 @@ theme_override_constants/h_separation = 20 theme_override_constants/v_separation = 10 columns = 4 -[node name="CheckButton" type="CheckButton" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/HBoxContainer"] +[node name="CheckButton" type="CheckButton" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/HBoxContainer"] layout_mode = 2 focus_mode = 0 theme = ExtResource("1_0pkvk") theme_type_variation = &"BrownCheckButton" text = "ONLY COLLECTIBLES" -[node name="HBoxContainer2" type="HBoxContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/HBoxContainer"] +[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/HBoxContainer"] layout_mode = 2 -[node name="Label" type="Label" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/HBoxContainer/HBoxContainer2"] +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/HBoxContainer/HBoxContainer2"] layout_mode = 2 theme_type_variation = &"BrownLabel" text = "COLLECTION" -[node name="OptionButton" type="OptionButton" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/HBoxContainer/HBoxContainer2"] +[node name="OptionButton" type="OptionButton" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/HBoxContainer/HBoxContainer2"] custom_minimum_size = Vector2(150, 0) layout_mode = 2 focus_mode = 1 -[node name="HBoxContainer3" type="HBoxContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/HBoxContainer"] +[node name="HBoxContainer3" type="HBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/HBoxContainer"] layout_mode = 2 -[node name="Label" type="Label" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/HBoxContainer/HBoxContainer3"] +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/HBoxContainer/HBoxContainer3"] layout_mode = 2 theme_type_variation = &"BrownLabel" text = "SORT BY" -[node name="OptionButton" type="OptionButton" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/HBoxContainer/HBoxContainer3"] +[node name="OptionButton" type="OptionButton" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/HBoxContainer/HBoxContainer3"] custom_minimum_size = Vector2(150, 0) layout_mode = 2 focus_mode = 1 -[node name="LineEdit" type="LineEdit" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/HBoxContainer"] +[node name="LineEdit" type="LineEdit" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 placeholder_text = "Search Item" -[node name="VBoxContainer_WearableSelector" type="VBoxContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer"] +[node name="VBoxContainer_WearableSelector" type="VBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer"] unique_name_in_owner = true custom_minimum_size = Vector2(0, 50) layout_mode = 2 @@ -278,7 +350,7 @@ size_flags_horizontal = 3 size_flags_vertical = 3 theme_override_constants/separation = 5 -[node name="ScrollContainer" type="ScrollContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector"] +[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector"] visible = false material = SubResource("ShaderMaterial_6ygo4") custom_minimum_size = Vector2(0, 50) @@ -286,23 +358,23 @@ layout_mode = 2 horizontal_scroll_mode = 3 vertical_scroll_mode = 3 -[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer"] +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 -[node name="VBoxContainer_Category" type="VBoxContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer/HBoxContainer"] +[node name="VBoxContainer_Category" type="VBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer/HBoxContainer"] custom_minimum_size = Vector2(350, 0) layout_mode = 2 size_flags_horizontal = 3 theme_override_constants/separation = 5 alignment = 1 -[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer/HBoxContainer/VBoxContainer_Category"] +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer/HBoxContainer/VBoxContainer_Category"] layout_mode = 2 theme_override_constants/separation = 11 -[node name="MenuButton_Filter" type="OptionButton" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer/HBoxContainer/VBoxContainer_Category/HBoxContainer"] +[node name="MenuButton_Filter" type="OptionButton" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer/HBoxContainer/VBoxContainer_Category/HBoxContainer"] unique_name_in_owner = true custom_minimum_size = Vector2(150, 35) layout_mode = 2 @@ -313,17 +385,17 @@ theme_override_constants/h_separation = 15 theme_override_constants/outline_size = 1 expand_icon = true -[node name="LineEdit_PreviewUrl" type="LineEdit" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer/HBoxContainer/VBoxContainer_Category/HBoxContainer"] +[node name="LineEdit_PreviewUrl" type="LineEdit" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer/HBoxContainer/VBoxContainer_Category/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 focus_mode = 1 theme = ExtResource("6_t442b") placeholder_text = "Search..." -[node name="HBoxContainer" type="HBoxContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector"] +[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector"] layout_mode = 2 -[node name="ScrollContainer_MainCategories" type="ScrollContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer"] +[node name="ScrollContainer_MainCategories" type="ScrollContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer"] material = SubResource("ShaderMaterial_6ygo4") custom_minimum_size = Vector2(0, 70) layout_mode = 2 @@ -331,14 +403,14 @@ size_flags_horizontal = 3 horizontal_scroll_mode = 3 vertical_scroll_mode = 3 -[node name="HBoxContainer_MainCategories" type="HBoxContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories"] +[node name="HBoxContainer_MainCategories" type="HBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 3 theme_override_constants/separation = 10 -[node name="wearable_button_body_shape" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button_body_shape" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] layout_mode = 2 button_pressed = true action_mode = 1 @@ -346,59 +418,59 @@ button_group = SubResource("ButtonGroup_30sbq") icon = ExtResource("6_4rdaw") filter_category = 0 -[node name="wearable_button_head" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button_head" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_30sbq") -[node name="wearable_button_upper_body" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button_upper_body" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_30sbq") icon = ExtResource("12_6wpew") filter_category = 6 -[node name="wearable_button_handwear" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button_handwear" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_30sbq") icon = ExtResource("13_1prjt") filter_category = 7 -[node name="wearable_button_lowerbody" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button_lowerbody" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_30sbq") icon = ExtResource("14_5xqio") filter_category = 8 -[node name="wearable_button_feet" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button_feet" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_30sbq") icon = ExtResource("15_147vw") filter_category = 9 -[node name="wearable_button_accesories" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button_accesories" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_30sbq") icon = ExtResource("10_xqo47") filter_category = 10 -[node name="wearable_button_skin" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button_skin" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/ScrollContainer_MainCategories/HBoxContainer_MainCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_30sbq") icon = ExtResource("25_cd16j") filter_category = 17 -[node name="Color_Picker_Button" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer" instance=ExtResource("7_i1fkq")] +[node name="Color_Picker_Button" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer" instance=ExtResource("7_i1fkq")] unique_name_in_owner = true layout_mode = 2 toggle_mode = true -[node name="ScrollContainer_SubCategories" type="ScrollContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector"] +[node name="ScrollContainer_SubCategories" type="ScrollContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector"] unique_name_in_owner = true material = SubResource("ShaderMaterial_6ygo4") custom_minimum_size = Vector2(0, 70) @@ -406,150 +478,150 @@ layout_mode = 2 horizontal_scroll_mode = 3 vertical_scroll_mode = 3 -[node name="HBoxContainer_SubCategories" type="HBoxContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories"] +[node name="HBoxContainer_SubCategories" type="HBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 theme_override_constants/separation = 10 -[node name="wearable_button" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("6_4rdaw") filter_category = 0 -[node name="wearable_button2" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button2" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") -[node name="wearable_button3" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button3" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("7_a6yyg") filter_category = 2 -[node name="wearable_button4" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button4" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("8_416cn") filter_category = 3 -[node name="wearable_button5" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button5" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("9_rk0en") filter_category = 4 -[node name="wearable_button6" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button6" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("11_hbc6s") filter_category = 5 -[node name="wearable_button7" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button7" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("12_6wpew") filter_category = 6 -[node name="wearable_button8" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button8" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("13_1prjt") filter_category = 7 -[node name="wearable_button9" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button9" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("14_5xqio") filter_category = 8 -[node name="wearable_button10" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button10" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("15_147vw") filter_category = 9 -[node name="wearable_button11" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button11" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("10_xqo47") filter_category = 10 -[node name="wearable_button12" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button12" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("17_073bg") filter_category = 11 -[node name="wearable_button13" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button13" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("11_2suar") filter_category = 12 -[node name="wearable_button14" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button14" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("12_6hl8c") filter_category = 13 -[node name="wearable_button15" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button15" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("13_jd3w1") filter_category = 14 -[node name="wearable_button16" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button16" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("21_rmg80") filter_category = 15 -[node name="wearable_button17" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button17" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("14_nbor4") filter_category = 16 -[node name="wearable_button18" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] +[node name="wearable_button18" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_SubCategories/HBoxContainer_SubCategories" instance=ExtResource("7_wautc")] layout_mode = 2 action_mode = 1 button_group = SubResource("ButtonGroup_meiko") icon = ExtResource("25_cd16j") filter_category = 17 -[node name="ScrollContainer_Items" type="ScrollContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector"] +[node name="ScrollContainer_Items" type="ScrollContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector"] custom_minimum_size = Vector2(580, 320) layout_mode = 2 size_flags_vertical = 3 mouse_filter = 0 -[node name="MarginContainer" type="MarginContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items"] +[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items"] layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 mouse_filter = 2 -[node name="GridContainer_WearablesList" type="GridContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items/MarginContainer"] +[node name="GridContainer_WearablesList" type="GridContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items/MarginContainer"] unique_name_in_owner = true visible = false layout_mode = 2 @@ -559,28 +631,28 @@ theme_override_constants/h_separation = 4 theme_override_constants/v_separation = 4 columns = 5 -[node name="Control_NoItems" type="VBoxContainer" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items/MarginContainer"] +[node name="Control_NoItems" type="VBoxContainer" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items/MarginContainer"] unique_name_in_owner = true visible = false layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 4 -[node name="TextureRect" type="TextureRect" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items/MarginContainer/Control_NoItems"] +[node name="TextureRect" type="TextureRect" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items/MarginContainer/Control_NoItems"] custom_minimum_size = Vector2(70, 70) layout_mode = 2 texture = ExtResource("27_kffkw") expand_mode = 3 stretch_mode = 5 -[node name="Label" type="Label" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items/MarginContainer/Control_NoItems"] +[node name="Label" type="Label" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items/MarginContainer/Control_NoItems"] layout_mode = 2 theme_override_colors/font_color = Color(0.988235, 0.988235, 0.988235, 1) theme_override_font_sizes/font_size = 16 text = "There are no items in this category." horizontal_alignment = 1 -[node name="RichTextBox_OpenMarketplace" type="RichTextLabel" parent="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items/MarginContainer/Control_NoItems"] +[node name="RichTextBox_OpenMarketplace" type="RichTextLabel" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items/MarginContainer/Control_NoItems"] layout_mode = 2 theme_override_font_sizes/normal_font_size = 16 bbcode_enabled = true @@ -589,6 +661,10 @@ fit_content = true scroll_active = false autowrap_mode = 0 +[node name="EmoteEditor" parent="VBoxContainer/HBoxContainer_Backpack/MarginContainer" instance=ExtResource("30_vfwc7")] +unique_name_in_owner = true +layout_mode = 2 + [node name="Color_Picker_Panel" parent="." instance=ExtResource("10_8s7x3")] visible = false @@ -608,9 +684,11 @@ offset_bottom = 64.0 grow_horizontal = 2 grow_vertical = 2 -[connection signal="pressed" from="HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer/Button_SaveProfile" to="." method="_on_button_save_profile_pressed"] -[connection signal="pressed" from="HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer/Button_Logout" to="." method="_on_button_logout_pressed"] -[connection signal="toggle_color_panel" from="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/Color_Picker_Button" to="." method="_on_color_picker_button_toggle_color_panel"] -[connection signal="meta_clicked" from="HBoxContainer_Backpack/MarginContainer/ColorRect_Sidebar/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items/MarginContainer/Control_NoItems/RichTextBox_OpenMarketplace" to="." method="_on_rich_text_box_open_marketplace_meta_clicked"] +[connection signal="pressed" from="VBoxContainer/PanelContainer_Navbar/MarginContainer/HBoxContainer/Button_Wearables" to="." method="_on_button_wearables_pressed"] +[connection signal="pressed" from="VBoxContainer/PanelContainer_Navbar/MarginContainer/HBoxContainer/Button_Emotes" to="." method="_on_button_emotes_pressed"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer/Button_SaveProfile" to="." method="_on_button_save_profile_pressed"] +[connection signal="pressed" from="VBoxContainer/HBoxContainer_Backpack/Control_LeftBar/MarginContainer/VBoxContainer/HBoxContainer/Button_Logout" to="." method="_on_button_logout_pressed"] +[connection signal="toggle_color_panel" from="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/HBoxContainer/Color_Picker_Button" to="." method="_on_color_picker_button_toggle_color_panel"] +[connection signal="meta_clicked" from="VBoxContainer/HBoxContainer_Backpack/MarginContainer/WearableEditor/MarginContainer/VBoxContainer/VBoxContainer_WearableSelector/ScrollContainer_Items/MarginContainer/Control_NoItems/RichTextBox_OpenMarketplace" to="." method="_on_rich_text_box_open_marketplace_meta_clicked"] [connection signal="hided" from="Color_Picker_Panel" to="." method="_on_color_picker_panel_hided"] [connection signal="pick_color" from="Color_Picker_Panel" to="." method="_on_color_picker_panel_pick_color"] diff --git a/godot/src/ui/components/debug_panel/debug_panel.gd b/godot/src/ui/components/debug_panel/debug_panel.gd index ce494c40..b2c23f47 100644 --- a/godot/src/ui/components/debug_panel/debug_panel.gd +++ b/godot/src/ui/components/debug_panel/debug_panel.gd @@ -40,6 +40,9 @@ func _ready(): tree_console.create_item() # root + if tab_container_debug_panel.visible: + _on_button_show_hide_pressed() + func on_console_add(scene_title: String, level: int, _timestamp: float, text: String) -> void: var root: TreeItem = tree_console.get_root() diff --git a/godot/src/ui/components/emote_editor/emote_editor.gd b/godot/src/ui/components/emote_editor/emote_editor.gd new file mode 100644 index 00000000..2994bbaf --- /dev/null +++ b/godot/src/ui/components/emote_editor/emote_editor.gd @@ -0,0 +1,78 @@ +extends Control + +signal set_new_emotes(emotes_run: PackedStringArray) + +const EMOTE_SQUARE_ITEM = preload("res://src/ui/components/emotes/emote_square_item.tscn") + +@export var avatar: Avatar = null: + set(new_value): + avatar = new_value + avatar.avatar_loaded.connect(self._on_avatar_loaded) + +var avatar_emote_items: Array[EmoteEditorItem] = [] +var all_emote_items: Array[EmoteItemUi] = [] +var current_selected_index: int = -1 + +@onready var container_avatar_emotes = %VBoxContainer_AvatarEmotes +@onready var container_all_emotes = %GridContainer_Emotes +@onready var button_group_avatar_emotes = ButtonGroup.new() +@onready var button_group_all_emotes = ButtonGroup.new() + + +func _ready(): + var first_button: BaseButton = null + for child in container_avatar_emotes.get_children(): + if child is EmoteEditorItem: + if first_button == null: + first_button = child + child.button_group = button_group_avatar_emotes + var index = avatar_emote_items.size() + child.select_emote.connect(self._on_emote_editor_item_select_emote.bind(index)) + avatar_emote_items.push_back(child) + + first_button.set_pressed(true) + current_selected_index = 0 + + # Load default emotes + for emote_urn in Emotes.DEFAULT_EMOTE_NAMES.keys(): + var emote_item: EmoteItemUi = EMOTE_SQUARE_ITEM.instantiate() + emote_item.button_group = button_group_all_emotes + emote_item.async_load_from_urn(emote_urn) + emote_item.play_emote.connect(self._on_emote_item_play_emote) + container_all_emotes.add_child(emote_item) + all_emote_items.push_back(emote_item) + + # TODO: Load remote emotes + + +func _on_avatar_loaded(): + var emote_urns = avatar.avatar_data.get_emotes() + + for i in range(avatar_emote_items.size()): + # get_emotes() always returns 10 emotes, but just in case + if i >= emote_urns.size(): + # Set default or + continue + + var emote_editor_item: EmoteEditorItem = avatar_emote_items[i] + emote_editor_item.async_load_from_urn(emote_urns[i], i) # Forget await + + +func _on_emote_editor_item_select_emote(_emote_urn: String, index: int): + if is_instance_valid(avatar): + avatar.async_play_emote(_emote_urn) + current_selected_index = index + + for emote_item in all_emote_items: + if emote_item is EmoteItemUi: + if emote_item.emote_urn == _emote_urn: + emote_item.set_pressed(true) + break + + +func _on_emote_item_play_emote(_emote_urn: String): + avatar.async_play_emote(_emote_urn) + var emote_urns = avatar.avatar_data.get_emotes() + emote_urns[current_selected_index] = _emote_urn + set_new_emotes.emit(emote_urns) + _on_avatar_loaded() diff --git a/godot/src/ui/components/emote_editor/emote_editor.tscn b/godot/src/ui/components/emote_editor/emote_editor.tscn new file mode 100644 index 00000000..87f34c25 --- /dev/null +++ b/godot/src/ui/components/emote_editor/emote_editor.tscn @@ -0,0 +1,118 @@ +[gd_scene load_steps=4 format=3 uid="uid://cse8fx0ei572e"] + +[ext_resource type="Script" path="res://src/ui/components/emote_editor/emote_editor.gd" id="1_xxj75"] +[ext_resource type="PackedScene" uid="uid://c6t7jqpx38nxd" path="res://src/ui/components/emote_editor/emote_editor_item.tscn" id="2_3uk1s"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5ejwy"] +bg_color = Color(0, 0, 0, 0.2) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + +[node name="EmoteEditor" type="PanelContainer"] +offset_right = 828.0 +offset_bottom = 552.0 +theme_override_styles/panel = SubResource("StyleBoxFlat_5ejwy") +script = ExtResource("1_xxj75") + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 2 +theme_override_constants/margin_left = 16 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_right = 16 +theme_override_constants/margin_bottom = 8 + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"] +layout_mode = 2 + +[node name="VBoxContainer_AvatarEmotes" type="VBoxContainer" parent="MarginContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 4 +theme_override_constants/separation = 0 + +[node name="EmoteEditorItem1" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes" instance=ExtResource("2_3uk1s")] +layout_mode = 2 + +[node name="HSeparator1" type="HSeparator" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes"] +layout_mode = 2 + +[node name="EmoteEditorItem2" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes" instance=ExtResource("2_3uk1s")] +layout_mode = 2 + +[node name="HSeparator2" type="HSeparator" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes"] +layout_mode = 2 + +[node name="EmoteEditorItem3" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes" instance=ExtResource("2_3uk1s")] +layout_mode = 2 + +[node name="HSeparator3" type="HSeparator" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes"] +layout_mode = 2 + +[node name="EmoteEditorItem4" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes" instance=ExtResource("2_3uk1s")] +layout_mode = 2 + +[node name="HSeparator4" type="HSeparator" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes"] +layout_mode = 2 + +[node name="EmoteEditorItem5" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes" instance=ExtResource("2_3uk1s")] +layout_mode = 2 + +[node name="HSeparator5" type="HSeparator" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes"] +layout_mode = 2 + +[node name="EmoteEditorItem6" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes" instance=ExtResource("2_3uk1s")] +layout_mode = 2 + +[node name="HSeparator6" type="HSeparator" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes"] +layout_mode = 2 + +[node name="EmoteEditorItem7" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes" instance=ExtResource("2_3uk1s")] +layout_mode = 2 + +[node name="HSeparator7" type="HSeparator" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes"] +layout_mode = 2 + +[node name="EmoteEditorItem8" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes" instance=ExtResource("2_3uk1s")] +layout_mode = 2 + +[node name="HSeparator8" type="HSeparator" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes"] +layout_mode = 2 + +[node name="EmoteEditorItem9" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes" instance=ExtResource("2_3uk1s")] +layout_mode = 2 + +[node name="HSeparator9" type="HSeparator" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes"] +layout_mode = 2 + +[node name="EmoteEditorItem0" parent="MarginContainer/HBoxContainer/VBoxContainer_AvatarEmotes" instance=ExtResource("2_3uk1s")] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/margin_left = 0 +theme_override_constants/margin_top = 16 +theme_override_constants/margin_right = 8 +theme_override_constants/margin_bottom = 16 + +[node name="ScrollContainer" type="ScrollContainer" parent="MarginContainer/HBoxContainer/MarginContainer"] +layout_mode = 2 +horizontal_scroll_mode = 0 + +[node name="MarginContainer" type="MarginContainer" parent="MarginContainer/HBoxContainer/MarginContainer/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/margin_left = 16 +theme_override_constants/margin_top = 4 +theme_override_constants/margin_right = 8 +theme_override_constants/margin_bottom = 4 + +[node name="GridContainer_Emotes" type="GridContainer" parent="MarginContainer/HBoxContainer/MarginContainer/ScrollContainer/MarginContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_constants/h_separation = 20 +theme_override_constants/v_separation = 20 +columns = 4 diff --git a/godot/src/ui/components/emote_editor/emote_editor_item.gd b/godot/src/ui/components/emote_editor/emote_editor_item.gd new file mode 100644 index 00000000..3e4bcf2d --- /dev/null +++ b/godot/src/ui/components/emote_editor/emote_editor_item.gd @@ -0,0 +1,31 @@ +class_name EmoteEditorItem +extends BaseButton + +signal select_emote(emote_urn: String) + +var _emote_urn: String = "" + +@onready var panel_pressed = %Pressed +@onready var emote_square_item = %EmoteSquareItem +@onready var label_number = %Label_Number +@onready var label_emote_name = %Label_EmoteName +@onready var texture_rect_wheel = %TextureRect_Wheel + + +func _on_toggled(toggled_on): + panel_pressed.visible = toggled_on + if toggled_on: + select_emote.emit(_emote_urn) + + +func async_load_from_urn(new_emote_urn: String, index: int): + if _emote_urn == new_emote_urn: # No need to reload + return + + _emote_urn = new_emote_urn + label_number.text = str(index) + texture_rect_wheel.rotation_degrees = (36.0 * index) - 36.0 + await emote_square_item.async_load_from_urn(new_emote_urn) + + # get emote name from emote_emote_ui + label_emote_name.text = emote_square_item.emote_name diff --git a/godot/src/ui/components/emote_editor/emote_editor_item.tscn b/godot/src/ui/components/emote_editor/emote_editor_item.tscn new file mode 100644 index 00000000..12140e52 --- /dev/null +++ b/godot/src/ui/components/emote_editor/emote_editor_item.tscn @@ -0,0 +1,96 @@ +[gd_scene load_steps=5 format=3 uid="uid://c6t7jqpx38nxd"] + +[ext_resource type="Texture2D" uid="uid://cv6fjk334oiu4" path="res://assets/ui/EmoteWheelDeck.svg" id="1_d7r2t"] +[ext_resource type="Script" path="res://src/ui/components/emote_editor/emote_editor_item.gd" id="1_myf8i"] +[ext_resource type="PackedScene" uid="uid://blc0mna12dsxo" path="res://src/ui/components/emotes/emote_square_item.tscn" id="2_w1a3f"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_es0gm"] +bg_color = Color(1, 0.454902, 0.223529, 1) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + +[node name="EmoteEditorItem" type="TextureButton"] +custom_minimum_size = Vector2(220, 50) +toggle_mode = true +script = ExtResource("1_myf8i") + +[node name="Pressed" type="Panel" parent="."] +unique_name_in_owner = true +visible = false +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_es0gm") + +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +theme_override_constants/margin_left = 2 +theme_override_constants/margin_top = 2 +theme_override_constants/margin_right = 2 +theme_override_constants/margin_bottom = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer"] +layout_mode = 2 +mouse_filter = 2 + +[node name="Control" type="Control" parent="MarginContainer/HBoxContainer"] +custom_minimum_size = Vector2(46, 46) +layout_mode = 2 +mouse_filter = 2 + +[node name="TextureRect_Wheel" type="TextureRect" parent="MarginContainer/HBoxContainer/Control"] +unique_name_in_owner = true +custom_minimum_size = Vector2(46, 0) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +pivot_offset = Vector2(23, 23) +mouse_filter = 2 +texture = ExtResource("1_d7r2t") +expand_mode = 1 +stretch_mode = 5 + +[node name="Label_Number" type="Label" parent="MarginContainer/HBoxContainer/Control"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +text = "0" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="Label_EmoteName" type="Label" parent="MarginContainer/HBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 30) +layout_mode = 2 +size_flags_horizontal = 3 +text = "Clap" +vertical_alignment = 1 +clip_text = true + +[node name="EmoteSquareItem" parent="MarginContainer/HBoxContainer" instance=ExtResource("2_w1a3f")] +unique_name_in_owner = true +custom_minimum_size = Vector2(46, 46) +layout_mode = 2 +mouse_filter = 2 + +[connection signal="gui_input" from="." to="." method="_on_gui_input"] +[connection signal="toggled" from="." to="." method="_on_toggled"] diff --git a/godot/src/ui/components/emotes/emote_wheel_item.gd b/godot/src/ui/components/emotes/emote_item_ui.gd similarity index 56% rename from godot/src/ui/components/emotes/emote_wheel_item.gd rename to godot/src/ui/components/emotes/emote_item_ui.gd index 2e4e082d..b9906be2 100644 --- a/godot/src/ui/components/emotes/emote_wheel_item.gd +++ b/godot/src/ui/components/emotes/emote_item_ui.gd @@ -1,6 +1,6 @@ @tool -class_name EmoteWheelItem -extends Control +class_name EmoteItemUi +extends BaseButton signal play_emote(emote_urn: String) signal select_emote(selected: bool, emote_urn: String) @@ -29,6 +29,7 @@ signal select_emote(selected: bool, emote_urn: String) @export var number: int = 0: set(new_value): + %Label_Number.visible = new_value >= 0 %Label_Number.text = str(new_value) number = new_value @@ -42,7 +43,6 @@ signal select_emote(selected: bool, emote_urn: String) # The display name @export var emote_name: String = "wave" -var pressed = false var inside = false @onready var control_inner = %Control_Inner @@ -52,13 +52,37 @@ var inside = false @onready var label_number = %Label_Number -func async_set_texture(emote: DclItemEntityDefinition) -> void: +func async_load_from_urn(_emote_urn: String, index: int = -1): + emote_urn = _emote_urn + number = index + + if Emotes.is_emote_default(emote_urn): + emote_name = Emotes.DEFAULT_EMOTE_NAMES[emote_urn] + rarity = Wearables.ItemRarity.COMMON + picture = load("res://assets/avatar/default_emotes_thumbnails/%s.png" % emote_urn) + else: + var emote_data := Global.content_provider.get_wearable(emote_urn) + if emote_data == null: + # Fallback to default emote + await async_load_from_urn(Emotes.DEFAULT_EMOTE_NAMES.keys()[0], index) + return + + await async_load_from_entity(emote_data) + + +func async_load_from_entity(emote_data: DclItemEntityDefinition) -> void: + emote_name = emote_data.get_display_name() + rarity = emote_data.get_rarity() + await async_set_texture(emote_data) + + +func async_set_texture(emote_data: DclItemEntityDefinition) -> void: var promise: Promise = Global.content_provider.fetch_texture( - emote.get_thumbnail(), emote.get_content_mapping() + emote_data.get_thumbnail(), emote_data.get_content_mapping() ) var res = await PromiseUtils.async_awaiter(promise) if res is PromiseError: - printerr("Fetch texture error on ", emote.get_thumbnail(), ": ", res.get_error()) + printerr("Fetch texture error on ", emote_data.get_thumbnail(), ": ", res.get_error()) else: self.picture = res.texture @@ -67,9 +91,14 @@ func _ready(): if not Engine.is_editor_hint(): mouse_entered.connect(self._on_mouse_entered) mouse_exited.connect(self._on_mouse_exited) - gui_input.connect(self._on_gui_input) - label_number.set_visible(not Global.is_mobile()) + pressed.connect(self._on_pressed) + button_down.connect(self._on_button_down) + button_up.connect(self._on_button_up) + toggled.connect(self._on_toggled) + + if Global.is_mobile(): + label_number.hide() # Executed with @tool @@ -90,11 +119,19 @@ func _on_mouse_entered(): select_emote.emit(true, emote_urn) -func _on_gui_input(event): - if event is InputEventScreenTouch: - if event.pressed != pressed: - pressed = event.pressed - texture_rect_pressed.set_visible(pressed) - if !pressed: - if inside: - play_emote.emit(emote_urn) +func _on_pressed(): + play_emote.emit(emote_urn) + + +func _on_toggled(new_toggled: bool): + texture_rect_pressed.set_visible(new_toggled) + + +func _on_button_down(): + if !toggle_mode: + texture_rect_pressed.set_visible(true) + + +func _on_button_up(): + if !toggle_mode: + texture_rect_pressed.set_visible(false) diff --git a/godot/src/ui/components/emotes/emote_square_item.tscn b/godot/src/ui/components/emotes/emote_square_item.tscn new file mode 100644 index 00000000..f9dd0962 --- /dev/null +++ b/godot/src/ui/components/emotes/emote_square_item.tscn @@ -0,0 +1,176 @@ +[gd_scene load_steps=10 format=3 uid="uid://blc0mna12dsxo"] + +[ext_resource type="Script" path="res://src/ui/components/emotes/emote_item_ui.gd" id="1_hlkld"] +[ext_resource type="Texture2D" uid="uid://caviqeg8b20gg" path="res://assets/avatar/default_emotes_thumbnails/clap.png" id="2_ynh3m"] +[ext_resource type="FontFile" uid="uid://drw8yv4w843s4" path="res://assets/themes/fonts/inter/Inter-SemiBold.ttf" id="3_obw18"] + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ojwu4"] +bg_color = Color(0.776471, 0.25098, 0.803922, 1) +border_width_left = 4 +border_width_top = 4 +border_width_right = 4 +border_width_bottom = 4 +border_color = Color(0.984314, 0.054902, 0.333333, 1) +border_blend = true +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 +expand_margin_left = 4.0 +expand_margin_top = 4.0 +expand_margin_right = 4.0 +expand_margin_bottom = 4.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_hpw41"] +bg_color = Color(1, 0.501961, 0, 1) +draw_center = false +border_width_left = 2 +border_width_top = 2 +border_width_right = 2 +border_width_bottom = 2 +border_color = Color(1, 0.501961, 0, 1) +corner_radius_top_left = 10 +corner_radius_top_right = 10 +corner_radius_bottom_right = 10 +corner_radius_bottom_left = 10 +expand_margin_left = 4.0 +expand_margin_top = 4.0 +expand_margin_right = 4.0 +expand_margin_bottom = 4.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_o5uwa"] +bg_color = Color(0.988235, 0.988235, 0.988235, 1) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_klstf"] +bg_color = Color(0.988235, 0.988235, 0.988235, 1) +corner_radius_top_left = 8 +corner_radius_top_right = 8 +corner_radius_bottom_right = 8 +corner_radius_bottom_left = 8 + +[sub_resource type="Gradient" id="Gradient_mvm8j"] +colors = PackedColorArray(1, 1, 1, 0.607843, 1, 1, 1, 0) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_oacma"] +gradient = SubResource("Gradient_mvm8j") +fill = 1 +fill_from = Vector2(0.5, 0.5) +fill_to = Vector2(0.75, 0.25) + +[node name="EmoteSquareItem" type="TextureButton"] +custom_minimum_size = Vector2(118, 118) +offset_right = 118.0 +offset_bottom = 118.0 +pivot_offset = Vector2(-38, 215) +toggle_mode = true +script = ExtResource("1_hlkld") + +[node name="Control_Inner" type="Control" parent="."] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Pressed" type="Panel" parent="Control_Inner"] +unique_name_in_owner = true +visible = false +texture_filter = 4 +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_ojwu4") + +[node name="Selected" type="Panel" parent="Control_Inner"] +unique_name_in_owner = true +visible = false +texture_filter = 4 +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_hpw41") + +[node name="Background" type="Panel" parent="Control_Inner"] +texture_filter = 4 +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_o5uwa") + +[node name="Inner" type="Panel" parent="Control_Inner/Background"] +unique_name_in_owner = true +self_modulate = Color(0.34902, 0.611765, 1, 1) +texture_filter = 4 +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.02 +anchor_top = 0.02 +anchor_right = 0.98 +anchor_bottom = 0.98 +grow_horizontal = 2 +grow_vertical = 2 +pivot_offset = Vector2(-38, 215) +mouse_filter = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_klstf") + +[node name="Glow" type="TextureRect" parent="Control_Inner/Background/Inner"] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = SubResource("GradientTexture2D_oacma") + +[node name="TextureRect_Picture" type="TextureRect" parent="Control_Inner/Background/Inner"] +unique_name_in_owner = true +texture_filter = 2 +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +pivot_offset = Vector2(32, 32) +texture = ExtResource("2_ynh3m") +expand_mode = 1 + +[node name="Label_Number" type="Label" parent="Control_Inner/Background/Inner"] +unique_name_in_owner = true +custom_minimum_size = Vector2(20, 20) +layout_mode = 1 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -20.0 +offset_right = 20.0 +grow_vertical = 0 +pivot_offset = Vector2(10, 10) +theme_override_colors/font_color = Color(0, 0, 0, 1) +theme_override_fonts/font = ExtResource("3_obw18") +theme_override_font_sizes/font_size = 14 +text = "0" +horizontal_alignment = 1 +vertical_alignment = 1 + +[connection signal="item_rect_changed" from="." to="." method="_on_item_rect_changed"] diff --git a/godot/src/ui/components/emotes/emote_wheel.gd b/godot/src/ui/components/emotes/emote_wheel.gd index 6d87d1dd..64dc44c7 100644 --- a/godot/src/ui/components/emotes/emote_wheel.gd +++ b/godot/src/ui/components/emotes/emote_wheel.gd @@ -1,21 +1,8 @@ extends Control -const DEFAULT_EMOTE_NAMES = { - "handsair": "Hands Air", - "wave": "Wave", - "fistpump": "Fist Pump", - "dance": "Dance", - "raiseHand": "Raise Hand", - "clap": "Clap", - "money": "Money", - "kiss": "Kiss", - "shrug": "Shrug", - "headexplode": "Head Explode" -} - @export var avatar_node: Avatar = null -var emote_items: Array[EmoteWheelItem] = [] +var emote_items: Array[EmoteItemUi] = [] var last_selected_emote_urn: String = "" @@ -27,7 +14,7 @@ var last_selected_emote_urn: String = "" func _ready(): self.hide() for child in emote_wheel_container.get_children(): - if child is EmoteWheelItem: + if child is EmoteItemUi: child.play_emote.connect(self._on_play_emote) child.select_emote.connect(self._on_select_emote.bind(child)) emote_items.push_back(child) @@ -38,7 +25,7 @@ func _ready(): avatar_node.avatar_loaded.connect(self._on_avatar_loaded) # Load default emotes as initial state - _update_wheel(DEFAULT_EMOTE_NAMES.keys()) + _update_wheel(Emotes.DEFAULT_EMOTE_NAMES.keys()) func _on_avatar_loaded(): @@ -53,28 +40,8 @@ func _update_wheel(emote_urns: Array): # Set default or continue - var emote_item: EmoteWheelItem = emote_items[i] - emote_item.emote_urn = emote_urns[i] - emote_item.number = i - - if is_emote_default(emote_item.emote_urn): - emote_item.emote_name = DEFAULT_EMOTE_NAMES[emote_urns[i]] - emote_item.rarity = Wearables.ItemRarity.COMMON - emote_item.picture = load( - "res://assets/avatar/default_emotes_thumbnails/%s.png" % emote_urns[i] - ) - else: - var emote_data := Global.content_provider.get_wearable(emote_urns[i]) - if emote_data == null: - # TODO: set invalid emote reference?, fallback with defualt? - continue - emote_item.emote_name = emote_data.get_display_name() - emote_item.rarity = emote_data.get_rarity() - emote_item.async_set_texture(emote_data) - - -func is_emote_default(urn_or_id: String) -> bool: - return DEFAULT_EMOTE_NAMES.keys().has(urn_or_id) + var emote_item: EmoteItemUi = emote_items[i] + emote_item.async_load_from_urn(emote_urns[i], i) # Forget await func _gui_input(event): @@ -102,11 +69,12 @@ func _on_play_emote(emote_urn: String): self.hide() Global.explorer_grab_focus() if avatar_node: - avatar_node.emote_controller.play_emote(emote_urn) - avatar_node.emote_controller.broadcast_avatar_animation(emote_urn) + var emote_controller = avatar_node.emote_controller + emote_controller.play_emote(emote_urn) + emote_controller.broadcast_avatar_animation(emote_urn) -func _on_select_emote(selected: bool, emote_urn: String, child: EmoteWheelItem): +func _on_select_emote(selected: bool, emote_urn: String, child: EmoteItemUi): if emote_urn == last_selected_emote_urn: return diff --git a/godot/src/ui/components/emotes/emote_wheel.tscn b/godot/src/ui/components/emotes/emote_wheel.tscn index 777a7bbc..bfec1508 100644 --- a/godot/src/ui/components/emotes/emote_wheel.tscn +++ b/godot/src/ui/components/emotes/emote_wheel.tscn @@ -76,7 +76,6 @@ offset_bottom = -73.0766 grow_horizontal = 2 grow_vertical = 2 picture = ExtResource("3_poid4") -emote_name = "wave" [node name="EmoteWheelItem2" parent="Container/EmoteWheelContainer" instance=ExtResource("2_h3qru")] layout_mode = 1 @@ -93,7 +92,6 @@ grow_horizontal = 2 grow_vertical = 2 rotation = 0.615341 picture = ExtResource("3_poid4") -emote_name = "wave" [node name="EmoteWheelItem3" parent="Container/EmoteWheelContainer" instance=ExtResource("2_h3qru")] layout_mode = 1 @@ -110,7 +108,6 @@ grow_horizontal = 2 grow_vertical = 2 rotation = 1.23913 picture = ExtResource("3_poid4") -emote_name = "wave" [node name="EmoteWheelItem4" parent="Container/EmoteWheelContainer" instance=ExtResource("2_h3qru")] layout_mode = 1 @@ -127,7 +124,6 @@ grow_horizontal = 2 grow_vertical = 2 rotation = 1.8656 picture = ExtResource("3_poid4") -emote_name = "wave" [node name="EmoteWheelItem5" parent="Container/EmoteWheelContainer" instance=ExtResource("2_h3qru")] layout_mode = 1 @@ -144,7 +140,6 @@ grow_horizontal = 2 grow_vertical = 2 rotation = 2.51246 picture = ExtResource("3_poid4") -emote_name = "wave" [node name="EmoteWheelItem6" parent="Container/EmoteWheelContainer" instance=ExtResource("2_h3qru")] layout_mode = 1 @@ -161,7 +156,6 @@ grow_horizontal = 2 grow_vertical = 2 rotation = -3.12851 picture = ExtResource("3_poid4") -emote_name = "wave" [node name="EmoteWheelItem7" parent="Container/EmoteWheelContainer" instance=ExtResource("2_h3qru")] layout_mode = 1 @@ -178,7 +172,6 @@ grow_horizontal = 2 grow_vertical = 2 rotation = -2.49585 picture = ExtResource("3_poid4") -emote_name = "wave" [node name="EmoteWheelItem8" parent="Container/EmoteWheelContainer" instance=ExtResource("2_h3qru")] layout_mode = 1 @@ -195,7 +188,6 @@ grow_horizontal = 2 grow_vertical = 2 rotation = -1.87016 picture = ExtResource("3_poid4") -emote_name = "wave" [node name="EmoteWheelItem9" parent="Container/EmoteWheelContainer" instance=ExtResource("2_h3qru")] layout_mode = 1 @@ -212,7 +204,6 @@ grow_horizontal = 2 grow_vertical = 2 rotation = -1.25254 picture = ExtResource("3_poid4") -emote_name = "wave" [node name="EmoteWheelItem10" parent="Container/EmoteWheelContainer" instance=ExtResource("2_h3qru")] layout_mode = 1 @@ -229,7 +220,6 @@ grow_horizontal = 2 grow_vertical = 2 rotation = -0.625233 picture = ExtResource("3_poid4") -emote_name = "wave" [node name="Label" type="Label" parent="Container"] layout_mode = 1 diff --git a/godot/src/ui/components/emotes/emote_wheel_item.tscn b/godot/src/ui/components/emotes/emote_wheel_item.tscn index 90558569..87e03796 100644 --- a/godot/src/ui/components/emotes/emote_wheel_item.tscn +++ b/godot/src/ui/components/emotes/emote_wheel_item.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=6 format=3 uid="uid://c7bnh6p6qygxu"] [ext_resource type="Texture2D" uid="uid://c3tpoj72yuxp4" path="res://src/ui/components/emotes/emote_item.svg" id="1_qctv4"] -[ext_resource type="Script" path="res://src/ui/components/emotes/emote_wheel_item.gd" id="2_jdnf4"] +[ext_resource type="Script" path="res://src/ui/components/emotes/emote_item_ui.gd" id="2_jdnf4"] [ext_resource type="FontFile" uid="uid://drw8yv4w843s4" path="res://assets/themes/fonts/inter/Inter-SemiBold.ttf" id="3_lei38"] [sub_resource type="Gradient" id="Gradient_mvm8j"] @@ -13,14 +13,11 @@ fill = 1 fill_from = Vector2(0.5, 0.5) fill_to = Vector2(0.75, 0.25) -[node name="EmoteWheelItem" type="Control"] -layout_mode = 3 -anchors_preset = 0 +[node name="EmoteWheelItem" type="TextureButton"] offset_right = 140.0 offset_bottom = 140.0 pivot_offset = Vector2(-38, 215) script = ExtResource("2_jdnf4") -emote_name = null [node name="Control_Inner" type="Control" parent="."] unique_name_in_owner = true diff --git a/godot/src/ui/components/emotes/emotes.gd b/godot/src/ui/components/emotes/emotes.gd new file mode 100644 index 00000000..f4bc0039 --- /dev/null +++ b/godot/src/ui/components/emotes/emotes.gd @@ -0,0 +1,19 @@ +class_name Emotes +extends RefCounted + +const DEFAULT_EMOTE_NAMES = { + "handsair": "Hands Air", + "wave": "Wave", + "fistpump": "Fist Pump", + "dance": "Dance", + "raiseHand": "Raise Hand", + "clap": "Clap", + "money": "Money", + "kiss": "Kiss", + "shrug": "Shrug", + "headexplode": "Head Explode" +} + + +static func is_emote_default(urn_or_id: String) -> bool: + return DEFAULT_EMOTE_NAMES.keys().has(urn_or_id)