From 051626169bd89644057d532087175854c882d89c Mon Sep 17 00:00:00 2001 From: JCash Date: Thu, 17 Oct 2024 13:07:22 +0200 Subject: [PATCH 1/4] Added support for MaxRects packing --- examples/basic/basic-0.png | Bin 2866 -> 4745 bytes examples/basic/basic-1.png | Bin 2245 -> 2522 bytes examples/basic/basic-2.png | Bin 365 -> 0 bytes examples/basic/basic-3.png | Bin 2092 -> 0 bytes examples/basic/basic.tpinfo | 454 +++++++++--------- examples/basic/basic.tps | 90 +--- examples/broken/README.md | 4 - examples/broken/broken.tpatlas | 3 - examples/broken/missing_image.tpinfo | 61 --- exporter/defold/exporter.xml | 4 +- exporter/defold/grantlee/0.2/defoldscript.qs | 33 +- .../plugins/share/pluginTexturePackerExt.jar | Bin 118877 -> 118924 bytes .../defold/bob/pipeline/tp/AtlasBuilder.java | 2 + utils/build_plugins.sh | 2 - 14 files changed, 256 insertions(+), 397 deletions(-) delete mode 100644 examples/basic/basic-2.png delete mode 100644 examples/basic/basic-3.png delete mode 100644 examples/broken/README.md delete mode 100644 examples/broken/broken.tpatlas delete mode 100644 examples/broken/missing_image.tpinfo diff --git a/examples/basic/basic-0.png b/examples/basic/basic-0.png index ae690b2378b9a9caa059cd4c5388b750a4666b29..8273821fcdc4047e6cbb11350ea9ae59fc0ec304 100644 GIT binary patch literal 4745 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 V;NJ4&X~EqR;ArQ1tilF!?O)>&yQ=^I literal 2866 zcmcImXH=8P8lEp99|(!Sf>M>bYeAZV0W}h&#$CZm6CpIE8MvULKuDs3fG81MP+0*N zETB>ZLtDtlA~vc~1Suwfh=2(Zr5myzdw=bZd;i>X&zU(h?>p~2&oeXc%$bzEE=~k_ zO?dzSf#Phx9{>pLLO>2i8}F!lN6}_Qq_bx<017J06#_SYQwKo)1I6C<;OSoBKv>$^ zLu;OWnY`6OtE;yOiYp)&jqrH8TW))M1>1%y%a6E>c;Ql%e|)O&%KlP{zhUUv2vuh@ z*xdGF$`u*Y2>g0S2YWec>IMiKian&Hy47rOZm9LnW8=PhQr(v5hP*;bg;3OfrhN-n zYJIG|6`S#B70|c$O?|+ZX>|8vmmUh&k?F_xuWf2k?5-!t_T1*NA3$3%*-1S+5x|}* zTB=~RA=-ldf&rL$HT?kV@d#fH<9?whmkONE9F(@O-qq3Pf1oBpx|aMgq?XjcQL4Vv zUI4Jd)@&#@HG_lP!w!lP}HS$9c{uY%QEG&rCQL`zA=prp9ZiwWrp>lQlng)=$C^AUA& zR_%a2KB+2b)l29&Tl)~F4tVdo7_ru~dBn5`F7OBf&eM-+>RnuZJgIk8THy86rE|XHvLOO&ZTy>x3(~YSQ(TVlL zl(?m5U+eiMPEaNRgnTZR2J&*HO&cSvw2IB-&A`>nVdsmHhvqE!TgQrQ58%Ou(sBM| z{V-{H>~%jQz@eDIyEUA7JM<}> zRiN4V+v}(Ps#I`~l9g#9Icb@1e89O5drTAXmhLl%k+yay<;lXFYj_Z1bNMH_YK;52 zUW*!UgEi|f!k6?Xz|Bi&Z{JA#vT;Z{(&9j*P&}M+9JvV+R7~&A?CtWZ(e>W*TD28IUfTr~h{U)A|oV|GOJznzH_@ zj(<{6GKvk}2$=>?TDLz4pu0Wk#BKsEzzuQ&(JTrQm@gZgEtT*QEwYYyqgY=oBbF08 zQJsvQRPAUE{Q($F_Iiz}Oq3gE1u<4v#o8qSl z;1WNDPj~=IK)dY93BkcgFYDhuR)ouNR-5NmUN*^ zuDS?+w(g=jhqEibJy*lm2W~x9&9D})5o|#oneUvBVQ`IQX|QO6zg1~+<7~bGI4S;+ zcc8u52Cu#UO4B&T1#ZA?TJJySWAvn3XpAKn#7&vPJ0b5qUR|X(?3jm{%?^0qu*A8H z`j4t)1Dh{)%1s*uVaSDzu~V}-P`q~a`PhJF&YLlg8$U)ZoJ8%F~Q9Uj-BtZO|YCQ&c3Hq_8DebOj0WS#1F-Tl_}kbh9&uHc_(% zXkfjkV{Dqc$z?;*&t#Z9(eqh7&pdlq3Pub?iytxW1->VGX{RtwZ@XC3uj z&<9;UcNbxapJ)yd&Um zOHCY^GyxRRtZG9cAH9|TVk{scjLo4lE`siv1}Oi7>vh6~D#*1@2s1Od5clQ1`q`>o z@y#?Ms0`B-(*^JFHx^YROY3PMcrpZW6A0m|av%y%{4~ym@=1;mE>cZA3KPHj31nwD zP(Hm6?kD`wg>a^!n95!Kenc(MJG)*NGYir!%Fb|QL>1WtK+wi?V0~|UR=uRj(oT)= zL8qYKH;Jr5TlIcLJZIHVgwPGmAuZe=gm|^;f{zmrJ%}yo@v#IJl}e|vbKAyv)HRbT z$;eGa7?l44bSl{ieiSGm9bu=Z_zLkgtA-|K3ZeYL3rGb*7`d9iQgP)Nwt>*!BmZjM zQrbvdb9R2Yp4eNtX&q}#kb3LAPq#!eG>BF)wH?#>DG4z`vY9!|QKQqzeXMj)6+5K` z#($Cfc4hV3l633_81!@lXbgWvIUzxwQJlQrjcTkAX zX;bFFf@52Tt$vt1cntX!SuIF5Uzm2yGPt5sTZJxq4sMJ_+*8#PFyZjltG1nMM|>Y= zo~YnSkoxz$FmTVyRvf6@bO0f;Mvzbeo~mJXOnow)NJ$qZXrC_gjy~Oc3q8TmQpN8T zJN$Gu`BxJ>Fb{CCtTTu{HNkqYTCxe XZqjVVc-#{G1OtkLi+#y1>e;^lE`${` diff --git a/examples/basic/basic-1.png b/examples/basic/basic-1.png index 1e9449c8404c01182e7e0640b19bbca5dd3c0d61..ce49f9e7291aa815c6e4b48f228fb3ce0bacf5f0 100644 GIT binary patch literal 2522 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 CI)4%X literal 2245 zcmeHJ{XY|U9RF@>G#BL|C(m`6hf`8_E9IeiSQ~lB&BIts64QBXWMPJ@JJn^Trwy@c zOiC-_gbWwwN{FHf%TecXGvsLxr@!G|ulwoVug~Z8`FwtSzhCdy>+{a>@j9ZermqG7 zP{(0ieF1>1uMn^iwmweZ55xlirTQGjyRDxxCFKA5UxEKvf#T0&OY7!)P4V^m0YIP| zR1j)kscUTBqN$~=v-NAeZTbd=M#d)Jm?6zAEUm0}+wS`wb>QG3dxyhlXBSsD3>N3^ z;pOdv_wx@3Bm@N$kB6QJKN)cP_=PtLjj8}fI;{F5vqsLX%Piks^t9x4C(D+Qy+|v5{ z^S1UsI{tj|vh!6}chBqIH*fm~-U$ca4-JoqK8%iyfBf|K#N^cU%&b^4C!Jqd{JgZh zvbrWygd6p-*V!TBv4k@Ke5L)RA%I<|2LN0L=ZeOs2xo@Ef_41#+UBZEO<5Ox8DwXS zN*KZ4|9W7h9vQyX*UADqj(niyyJ0(z#LVIc?&R_>-sG}gu-z{?Tbe$$j(0rPI8hYP zy!XtlPcMg?;^LK!C(pjxl)Yt7L~he61{3nAYTBog9Yzb7# zRO=@X+Gk6RFEq@4?0Rd>mn^d?q=kzPQl~{)KwSdItiKCqV{uxak-ul*ugt=B>l&Ir zCM+WOuvbutT%z%2Wpik2cmkJqB7o+Pybj;WFr+ zmZ-m~@vxh!kkuxKGJE?Po!kcH6^`T^D$5aKqQg>Ty6tv#+YjelTUX|#x!6_;H@eoT zqsL6Wukl!w{Dq+-nOE?Nb#TV}>?*femh@;s&4Kx2^Dx`QT$;E=b0<%>R zmudl9=uu6HWb74S^{8}foE56tX~W&4$jv?&0}_l%R}%uaG043r7(QQ>SEk;LH7+@i z5)h;yRtQ3*V5k}r%T)c%#X#U~OuC5@SWtmY44ozgkz^PVxw+fjK(v!e#|Xi0DNrTD z(s0HklNkCg4$V%cPX($mbn`!84IT!jZ2Q9>w@h#>keBwRLGHLK#I{NCl(446>I7kJC&q=x zg|eK?Urb&Ogc>2MHL3A^k}l=ad9RjQdBn5=J);mYdM7&p*!x6l~0bel}U0l68d2+iMod}*nQsFdA)W$Ew^tcdJnA@?;H7R z>eNP$s+g#`h2i<>fsv{5~)y>gI~!GMQ( z^K|udS?83{1ORY@Qgr|T diff --git a/examples/basic/basic-3.png b/examples/basic/basic-3.png deleted file mode 100644 index 78b19dbe0d2800b428d3c2aec6e7d6286b9dbc55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2092 zcmeHH`#;lr9R7TFaXn;7AxtV=6_t_GVJFMnFClX&JDqY#Wg12?LnJC)C`G7AilZoZ zhbc{zP-M9^Z7Q3!kZqmaj{b&oe(e2vKd`Ah<}H>xtZi&}**joyd+^RKu5Rug-afwj0s@0W z_JcBNhip$aq$U>Cr>3)Q&Q8?PiJIiW#^nbeQMR?J(=z z=-BuKd-4N^JN5C?G><4N*+FJVM5E)LBFIGUig3L^%D1R{yqTimiST&ge{dTYd)jH;bckgLi z&Lgy=CX_rIEIIoFAbSGa+mw`Cn9Rce7%d}TiBNN(TVvIfH>zTlvOkqbHHu$TyO+Jf zCipPz@oF*L&%TnB@;V(3UcQm&BuH+7e2o%lcLFOU4k{1WwUpghFIR6$@XM?P(`QUH zz3ySyA{cSiIcG;W}U25Wtlx*5W_u=}}KUNHtX*vYpCjDWX7uMJV# z8R+^@Wb=dFqqUoteC^&UKvX35@Z{=&5nkm(P`Ti!4a1-^WyN!x^h7Kglwvw2z$R!2 zPn;8F!3N`Ntg#p~U*fdF>JCb!qHg{?dnyEXzrP3Qx~0H3;-E0i~?_a(X?k1%0h~ zWSQw*D;`*16QNWcKm+!P@F)?br*)+x$hp8c-CHx$l^;-*sFF1e0N>)Ba+1jsagJOz zhT4v1Spf`d*0Dd6Am;SpR>G=Ub;&?R>`+iJ%r^A!=0;Ri1w{uGb_!G8cSDU7M456+ zf6Vt|c&HPdTH|0hn#=F5g(vxZvIO;66AsOt)6_{k@g4_mD&1%~_v>%pQ8BW%!#m zv0lg{j3Q+gj5lzi!kT`a2z-GojEnlbk3CG? z;blE%z%Gl1&dKb2g%9MT(cIzdAC1LUwA9dWUWsa`fjF*Q`u^ptizM=qXr11Z@GCDh zEH}+iXkW?Z0wF3*7-kTsY0FCi^tM-dXFyruBL{he4)pT7oo`=pp10@ diff --git a/examples/basic/basic.tpinfo b/examples/basic/basic.tpinfo index eaab25b..4d79713 100644 --- a/examples/basic/basic.tpinfo +++ b/examples/basic/basic.tpinfo @@ -1,7 +1,7 @@ # Exported by Defold Exporter # For documentation of the fields: https://www.codeandweb.com/texturepacker/documentation/custom-exporter#sprite-type -version: "1.0" +version: "2.0" description: "Exported using TexturePacker" pages { name: "basic-0.png" @@ -24,9 +24,13 @@ pages { width: 128 height: 128 } + pivot { + x: 64 + y: 64 + } frame_rect { - x: 1 - y: 1 + x: 0 + y: 0 width: 128 height: 128 } @@ -34,72 +38,76 @@ pages { width: 128 height: 128 } + indices: [1, 2, 3, 0, 1, 3] vertices { x: 128 - y: 128 + y: 0 } vertices { x: 0 - y: 128 + y: 0 } vertices { x: 0 - y: 0 + y: 128 } vertices { x: 128 - y: 0 + y: 128 } - indices: [1, 2, 3, 0, 1, 3] } sprites { - name: "box_small_128" - trimmed: true + name: "circle_fill_128" + trimmed: false rotated: false is_solid: false corner_offset { - x: 79 - y: 57 + x: 0 + y: 0 } source_rect { - x: 79 - y: 57 - width: 42 - height: 65 + x: 0 + y: 0 + width: 128 + height: 128 + } + pivot { + x: 64 + y: 64 } frame_rect { - x: 1 - y: 130 - width: 42 - height: 65 + x: 0 + y: 128 + width: 128 + height: 128 } untrimmed_size { width: 128 height: 128 } + indices: [1, 2, 3, 0, 1, 3] vertices { - x: 121 - y: 122 + x: 128 + y: 0 } vertices { - x: 79 - y: 122 + x: 0 + y: 0 } vertices { - x: 79 - y: 57 + x: 0 + y: 128 } vertices { - x: 121 - y: 57 + x: 128 + y: 128 } - indices: [1, 2, 3, 0, 1, 3] } sprites { - name: "anim/test-0" + name: "shape_L_128" trimmed: false rotated: false - is_solid: true + is_solid: false corner_offset { x: 0 y: 0 @@ -107,42 +115,46 @@ pages { source_rect { x: 0 y: 0 - width: 64 - height: 64 + width: 128 + height: 128 + } + pivot { + x: 64 + y: 64 } frame_rect { - x: 44 - y: 130 - width: 64 - height: 64 + x: 128 + y: 0 + width: 128 + height: 128 } untrimmed_size { - width: 64 - height: 64 + width: 128 + height: 128 } + indices: [1, 2, 3, 0, 1, 3] vertices { - x: 64 - y: 64 + x: 128 + y: 0 } vertices { x: 0 - y: 64 + y: 0 } vertices { x: 0 - y: 0 + y: 128 } vertices { - x: 64 - y: 0 + x: 128 + y: 128 } - indices: [1, 2, 3, 0, 1, 3] } sprites { - name: "box_fill_64" + name: "triangle_fill_128" trimmed: false rotated: false - is_solid: true + is_solid: false corner_offset { x: 0 y: 0 @@ -150,85 +162,100 @@ pages { source_rect { x: 0 y: 0 - width: 64 - height: 64 + width: 128 + height: 128 + } + pivot { + x: 64 + y: 64 } frame_rect { - x: 44 - y: 130 - width: 64 - height: 64 + x: 128 + y: 128 + width: 128 + height: 128 } untrimmed_size { - width: 64 - height: 64 + width: 128 + height: 128 } + indices: [1, 2, 3, 0, 1, 3] vertices { - x: 64 - y: 64 + x: 128 + y: 0 } vertices { x: 0 - y: 64 + y: 0 } vertices { x: 0 - y: 0 + y: 128 } vertices { - x: 64 - y: 0 + x: 128 + y: 128 } - indices: [1, 2, 3, 0, 1, 3] + } +} +pages { + name: "basic-1.png" + size { + width: 128 + height: 256 } sprites { - name: "anim/test-1" - trimmed: false - rotated: false + name: "box_small_128" + trimmed: true + rotated: true is_solid: false corner_offset { - x: 0 - y: 0 + x: 79 + y: 56 } source_rect { - x: 0 - y: 0 - width: 64 - height: 64 + x: 79 + y: 56 + width: 42 + height: 66 + } + pivot { + x: 64 + y: 64 } frame_rect { - x: 109 - y: 130 - width: 64 - height: 64 + x: 0 + y: 0 + width: 66 + height: 42 } untrimmed_size { - width: 64 - height: 64 + width: 128 + height: 128 } + indices: [1, 2, 3, 0, 1, 3] vertices { - x: 64 - y: 64 + x: 121 + y: 56 } vertices { - x: 0 - y: 64 + x: 79 + y: 56 } vertices { - x: 0 - y: 0 + x: 79 + y: 122 } vertices { - x: 64 - y: 0 + x: 121 + y: 122 } - indices: [1, 2, 3, 0, 1, 3] } sprites { - name: "circle_fill_64" + name: "anim/test-0" trimmed: false rotated: false - is_solid: false + is_solid: true corner_offset { x: 0 y: 0 @@ -239,9 +266,13 @@ pages { width: 64 height: 64 } + pivot { + x: 32 + y: 32 + } frame_rect { - x: 109 - y: 130 + x: 0 + y: 42 width: 64 height: 64 } @@ -249,29 +280,29 @@ pages { width: 64 height: 64 } + indices: [1, 2, 3, 0, 1, 3] vertices { x: 64 - y: 64 + y: 0 } vertices { x: 0 - y: 64 + y: 0 } vertices { x: 0 - y: 0 + y: 64 } vertices { x: 64 - y: 0 + y: 64 } - indices: [1, 2, 3, 0, 1, 3] } sprites { - name: "anim/test-2" + name: "box_fill_64" trimmed: false rotated: false - is_solid: false + is_solid: true corner_offset { x: 0 y: 0 @@ -282,9 +313,13 @@ pages { width: 64 height: 64 } + pivot { + x: 32 + y: 32 + } frame_rect { - x: 174 - y: 1 + x: 0 + y: 42 width: 64 height: 64 } @@ -292,38 +327,26 @@ pages { width: 64 height: 64 } + indices: [1, 2, 3, 0, 1, 3] vertices { x: 64 - y: 58 - } - vertices { - x: 64 - y: 64 + y: 0 } vertices { x: 0 - y: 64 + y: 0 } vertices { x: 0 - y: 57 - } - vertices { - x: 28 - y: 1 - } - vertices { - x: 29 - y: 0 + y: 64 } vertices { - x: 35 - y: 0 + x: 64 + y: 64 } - indices: [4, 5, 6, 0, 4, 6, 2, 0, 1, 2, 3, 0, 0, 3, 4] } sprites { - name: "triangle_fill_64" + name: "anim/test-1" trimmed: false rotated: false is_solid: false @@ -337,9 +360,13 @@ pages { width: 64 height: 64 } + pivot { + x: 32 + y: 32 + } frame_rect { - x: 174 - y: 1 + x: 64 + y: 42 width: 64 height: 64 } @@ -347,45 +374,26 @@ pages { width: 64 height: 64 } + indices: [1, 2, 3, 0, 1, 3] vertices { x: 64 - y: 58 - } - vertices { - x: 64 - y: 64 + y: 0 } vertices { x: 0 - y: 64 + y: 0 } vertices { x: 0 - y: 57 - } - vertices { - x: 28 - y: 1 - } - vertices { - x: 29 - y: 0 + y: 64 } vertices { - x: 35 - y: 0 + x: 64 + y: 64 } - indices: [4, 5, 6, 0, 4, 6, 2, 0, 1, 2, 3, 0, 0, 3, 4] - } -} -pages { - name: "basic-1.png" - size { - width: 256 - height: 256 } sprites { - name: "circle_fill_128" + name: "circle_fill_64" trimmed: false rotated: false is_solid: false @@ -396,62 +404,43 @@ pages { source_rect { x: 0 y: 0 - width: 128 - height: 128 + width: 64 + height: 64 + } + pivot { + x: 32 + y: 32 } frame_rect { - x: 1 - y: 1 - width: 128 - height: 128 + x: 64 + y: 42 + width: 64 + height: 64 } untrimmed_size { - width: 128 - height: 128 - } - vertices { - x: 128 - y: 19 - } - vertices { - x: 128 - y: 110 - } - vertices { - x: 83 - y: 128 + width: 64 + height: 64 } + indices: [1, 2, 3, 0, 1, 3] vertices { - x: 34 - y: 128 + x: 64 + y: 0 } vertices { x: 0 - y: 94 + y: 0 } vertices { x: 0 - y: 24 - } - vertices { - x: 37 - y: 0 + y: 64 } vertices { - x: 85 - y: 0 + x: 64 + y: 64 } - indices: [2, 6, 7, 4, 5, 6, 2, 4, 6, 2, 3, 4, 0, 1, 2, 0, 2, 7] - } -} -pages { - name: "basic-2.png" - size { - width: 256 - height: 256 } sprites { - name: "shape_L_128" + name: "anim/test-2" trimmed: false rotated: false is_solid: false @@ -462,54 +451,43 @@ pages { source_rect { x: 0 y: 0 - width: 128 - height: 128 + width: 64 + height: 64 + } + pivot { + x: 32 + y: 32 } frame_rect { - x: 1 - y: 1 - width: 128 - height: 128 + x: 0 + y: 106 + width: 64 + height: 64 } untrimmed_size { - width: 128 - height: 128 - } - vertices { - x: 17 - y: 114 - } - vertices { - x: 128 - y: 114 + width: 64 + height: 64 } + indices: [1, 2, 3, 0, 1, 3] vertices { - x: 128 - y: 128 + x: 64 + y: 0 } vertices { x: 0 - y: 128 + y: 0 } vertices { x: 0 - y: 0 + y: 64 } vertices { - x: 15 - y: 0 + x: 64 + y: 64 } - indices: [0, 4, 5, 0, 1, 2, 0, 2, 3, 0, 3, 4] - } -} -pages { - name: "basic-3.png" - size { - width: 256 - height: 256 } sprites { - name: "triangle_fill_128" + name: "triangle_fill_64" trimmed: false rotated: false is_solid: false @@ -520,43 +498,39 @@ pages { source_rect { x: 0 y: 0 - width: 128 - height: 128 + width: 64 + height: 64 + } + pivot { + x: 32 + y: 32 } frame_rect { - x: 1 - y: 1 - width: 128 - height: 128 + x: 0 + y: 106 + width: 64 + height: 64 } untrimmed_size { - width: 128 - height: 128 - } - vertices { - x: 128 - y: 122 + width: 64 + height: 64 } + indices: [1, 2, 3, 0, 1, 3] vertices { - x: 128 - y: 128 + x: 64 + y: 0 } vertices { x: 0 - y: 128 + y: 0 } vertices { x: 0 - y: 120 - } - vertices { - x: 60 - y: 0 + y: 64 } vertices { - x: 67 - y: 0 + x: 64 + y: 64 } - indices: [3, 4, 5, 2, 0, 1, 2, 3, 0, 0, 3, 5] } } diff --git a/examples/basic/basic.tps b/examples/basic/basic.tps index 7579c51..7787293 100644 --- a/examples/basic/basic.tps +++ b/examples/basic/basic.tps @@ -4,7 +4,7 @@ fileFormatVersion 6 texturePackerVersion - 7.1.0 + 7.4.0 autoSDSettings @@ -32,7 +32,7 @@ dpi 72 dataFormat - defoldexporter + defold textureFileName flipPVR @@ -64,7 +64,7 @@ shapePadding - 1 + 0 jpgQuality 80 pngOptimizationLevel @@ -76,7 +76,7 @@ textureFormat png borderPadding - 1 + 0 maxTextureSize width @@ -161,7 +161,7 @@ trimMargin 1 trimMode - Polygon + Trim tracerTolerance 200 heuristicMask @@ -169,45 +169,13 @@ defaultPivotPoint 0,0 writePivotPoints - + individualSpriteSettings original/anim/test-0.png original/anim/test-1.png original/anim/test-2.png - - pivotPoint - 0,0 - spriteScale - 1 - scale9Enabled - - scale9Borders - 16,16,32,32 - scale9Paddings - 16,16,32,32 - scale9FromFile - - - original/box_fill_128.png - original/circle_fill_128.png - original/shape_L_128.png - original/triangle_fill_128.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 32,32,64,64 - scale9Paddings - 32,32,64,64 - scale9FromFile - - original/box_fill_64.png original/circle_fill_64.png original/triangle_fill_64.png @@ -225,10 +193,14 @@ scale9FromFile + original/box_fill_128.png original/box_small_128.png + original/circle_fill_128.png + original/shape_L_128.png + original/triangle_fill_128.png pivotPoint - 0,0 + 0.5,0.5 spriteScale 1 scale9Enabled @@ -272,44 +244,6 @@ normalMapSheetFileName exporterProperties - - defoldexporter::animations_flip - - value - - - defoldexporter::animations_fps - - value - 24 - - defoldexporter::animations_playback - - value - once_forward - - defoldexporter::animations_trim - - value - off - - defoldexporter::assets_path - - value - assets/{atlas_name}/{animation_name} - - defoldexporter::extrude_borders - defoldexporter::inner_padding - defoldexporter::margin - - value - 0 - - defoldexporter::sprite-prefix - - value - img_ - - + diff --git a/examples/broken/README.md b/examples/broken/README.md deleted file mode 100644 index 1300410..0000000 --- a/examples/broken/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# Broken files - -These are used for testing the extension only. -Do not use in your production diff --git a/examples/broken/broken.tpatlas b/examples/broken/broken.tpatlas deleted file mode 100644 index 00e9195..0000000 --- a/examples/broken/broken.tpatlas +++ /dev/null @@ -1,3 +0,0 @@ -file: "/examples/broken/missing_image.tpinfo" -rename_patterns: "" -is_paged_atlas: false diff --git a/examples/broken/missing_image.tpinfo b/examples/broken/missing_image.tpinfo deleted file mode 100644 index 814697e..0000000 --- a/examples/broken/missing_image.tpinfo +++ /dev/null @@ -1,61 +0,0 @@ -# Exported by Defold Exporter -# For documentation of the fields: https://www.codeandweb.com/texturepacker/documentation/custom-exporter#sprite-type - -pages { - name: "basic.png" - size { - width: 256 - height: 256 - } - sprites { - name: "shape_L_128" - trimmed: false - rotated: false - is_solid: false - corner_offset { - x: 0 - y: 0 - } - source_rect { - x: 0 - y: 0 - width: 128 - height: 128 - } - frame_rect { - x: 1 - y: 1 - width: 128 - height: 128 - } - untrimmed_size { - width: 128 - height: 128 - } - vertices { - x: 17 - y: 114 - } - vertices { - x: 128 - y: 114 - } - vertices { - x: 128 - y: 128 - } - vertices { - x: 0 - y: 128 - } - vertices { - x: 0 - y: 0 - } - vertices { - x: 15 - y: 0 - } - indices: [0, 4, 5, 0, 1, 2, 0, 2, 3, 0, 3, 4] - } -} diff --git a/exporter/defold/exporter.xml b/exporter/defold/exporter.xml index 738fe7a..e140c6b 100644 --- a/exporter/defold/exporter.xml +++ b/exporter/defold/exporter.xml @@ -100,7 +100,7 @@ true - false + true false @@ -133,7 +133,7 @@ 0 Polygon POT - false + true 0.5,0.5 diff --git a/exporter/defold/grantlee/0.2/defoldscript.qs b/exporter/defold/grantlee/0.2/defoldscript.qs index 0539b89..660e5f1 100644 --- a/exporter/defold/grantlee/0.2/defoldscript.qs +++ b/exporter/defold/grantlee/0.2/defoldscript.qs @@ -73,18 +73,37 @@ var exportSprite = function(output, indentLevel, sprite) field("is_solid", sprite.isSolid, indentLevel+1), ) - //exportPoint(output, indentLevel+1, "centerOffset", sprite.centerOffset); // don't think we need this one exportPoint(output, indentLevel+1, "corner_offset", sprite.cornerOffset); exportRect(output, indentLevel+1, "source_rect", sprite.sourceRect); + exportPoint(output, indentLevel+1, "pivot", sprite.pivotPoint); exportRect(output, indentLevel+1, "frame_rect", sprite.frameRect); exportSize(output, indentLevel+1, "untrimmed_size", sprite.untrimmedSize); - for (let i = 0; i < sprite.vertices.length; ++i) { - let vertex = sprite.vertices[i]; - exportPoint(output, indentLevel+1, "vertices", vertex); - } + // The vertices are in sprite image coordinate space (texels) + // Rotation is handled later in the pipeline + if (sprite.vertices.length > 0) + { + for (let i = 0; i < sprite.vertices.length; ++i) { + let vertex = sprite.vertices[i]; + exportPoint(output, indentLevel+1, "vertices", vertex); + } - exportIntArray(output, indentLevel+1, "indices", sprite.triangleIndices); + exportIntArray(output, indentLevel+1, "indices", sprite.triangleIndices); + } + else + { + exportIntArray(output, indentLevel+1, "indices", [1, 2, 3, 0, 1, 3]); + + let x0 = sprite.sourceRect.x; + let y0 = sprite.sourceRect.y; + let x1 = x0 + sprite.sourceRect.width; + let y1 = y0 + sprite.sourceRect.height; + + exportPoint(output, indentLevel+1, "vertices", {x: x1, y: y0}); // TR + exportPoint(output, indentLevel+1, "vertices", {x: x0, y: y0}); // TL + exportPoint(output, indentLevel+1, "vertices", {x: x0, y: y1}); // BL + exportPoint(output, indentLevel+1, "vertices", {x: x1, y: y1}); // BR + } output.push(indent(indentLevel) + "}"); } @@ -116,7 +135,7 @@ var exportAtlas = function(root) "" ); - output.push("version: \"1.1\""); // our file format version + output.push("version: \"2.0\""); // our file format version output.push("description: \"Exported using TexturePacker\""); // The tool used let textures = root.allResults[root.variantIndex].textures; diff --git a/texturepacker/plugins/share/pluginTexturePackerExt.jar b/texturepacker/plugins/share/pluginTexturePackerExt.jar index 23a16249d95ec4c3a01f0511ec0c5f7f3d3b36ce..7c9bd5ab68c5df803a2c8e5a93469f2878da01f9 100644 GIT binary patch delta 7951 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%0D(5qKhFR3AqX@m1>bK0 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 Date: Thu, 17 Oct 2024 13:17:50 +0200 Subject: [PATCH 2/4] Show pivot point in the tpinfo view --- texturepacker/editor/src/texturepacker.clj | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/texturepacker/editor/src/texturepacker.clj b/texturepacker/editor/src/texturepacker.clj index 8448eab..a7d3713 100644 --- a/texturepacker/editor/src/texturepacker.clj +++ b/texturepacker/editor/src/texturepacker.clj @@ -179,8 +179,12 @@ (def ^:private TSize (s/pair s/Num "width" s/Num "height")) +(def ^:private TPoint + (s/pair s/Num "x" s/Num "y")) + (def ^:private TImageInfo {:index-count s/Int + :pivot TPoint :size TSize :untrimmed-size TSize :vertex-count s/Int}) @@ -490,12 +494,14 @@ (into {} (mapcat (fn [page] - (map (fn [{:keys [frame-rect indices untrimmed-size vertices] :as sprite}] + (map (fn [{:keys [frame-rect indices untrimmed-size vertices pivot] :as sprite}] (let [original-name (:name sprite) size [(:width frame-rect) (:height frame-rect)] - untrimmed-size [(:width untrimmed-size) (:height untrimmed-size)]] + untrimmed-size [(:width untrimmed-size) (:height untrimmed-size)] + pivot [(:x pivot) (:y pivot)]] (pair original-name - {:size size + {:pivot pivot + :size size :untrimmed-size untrimmed-size :vertex-count (count vertices) :index-count (count indices)}))) @@ -608,6 +614,11 @@ (dynamic error (g/fnk [_node-id original-name tpinfo-image-infos-by-original-name] (validate-original-name _node-id original-name tpinfo-image-infos-by-original-name)))) + (property pivot types/Vec2 + (value (g/fnk [tpinfo-image-info] (:pivot tpinfo-image-info))) + (dynamic edit-type (g/constantly {:type types/Vec2 :labels ["X" "Y"]})) + (dynamic read-only? (g/constantly true))) + (property size types/Vec2 (value (g/fnk [tpinfo-image-info] (:size tpinfo-image-info))) (dynamic edit-type (g/constantly {:type types/Vec2 :labels ["W" "H"]})) From d100754dfe196b1de72646b0822a4650c205d7c5 Mon Sep 17 00:00:00 2001 From: JCash Date: Thu, 17 Oct 2024 13:37:58 +0200 Subject: [PATCH 3/4] Add default pivot if it's missing --- texturepacker/editor/src/texturepacker.clj | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/texturepacker/editor/src/texturepacker.clj b/texturepacker/editor/src/texturepacker.clj index a7d3713..6a72ad0 100644 --- a/texturepacker/editor/src/texturepacker.clj +++ b/texturepacker/editor/src/texturepacker.clj @@ -497,8 +497,12 @@ (map (fn [{:keys [frame-rect indices untrimmed-size vertices pivot] :as sprite}] (let [original-name (:name sprite) size [(:width frame-rect) (:height frame-rect)] - untrimmed-size [(:width untrimmed-size) (:height untrimmed-size)] - pivot [(:x pivot) (:y pivot)]] + width (:width untrimmed-size) + height (:height untrimmed-size) + untrimmed-size [width height] + pivot (if pivot + [(:x pivot) (:y pivot)] + [(/ width 2.0) (/ height 2.0)])] (pair original-name {:pivot pivot :size size From 44b44db2070fe27721aaf8d76d8149fb01e3d29e Mon Sep 17 00:00:00 2001 From: JCash Date: Thu, 17 Oct 2024 17:03:15 +0200 Subject: [PATCH 4/4] Add a default pivot point if the image doesn't already have one --- .../plugins/share/pluginTexturePackerExt.jar | Bin 118924 -> 119000 bytes .../defold/bob/pipeline/tp/AtlasBuilder.java | 12 +++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/texturepacker/plugins/share/pluginTexturePackerExt.jar b/texturepacker/plugins/share/pluginTexturePackerExt.jar index 7c9bd5ab68c5df803a2c8e5a93469f2878da01f9..9eb8f130046c75f0f16390ffb67b53362a1e6dc2 100644 GIT binary patch delta 7871 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 delta 7782 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